>
首页 » 解决方案 » VxWorks下数据采集卡驱动程序开发

VxWorks下数据采集卡驱动程序开发

作者:  时间:2009-09-09 15:00  来源:

  1 引 言

  随着嵌入式技术的发展,数据采集广泛应用于现场设备中。本文根据实际项目需求,开发了数据采集卡在VxWorks操作系统下的驱动程序,以方便应用程序开发。

  本文采用的数据采集卡为盛博协同公司基于PC/104总线的ADT700采集卡,他通过总线与PC/104嵌入式系统构成一个高性能的数据采集与控制系统。ADT700具有如下特点:

  模拟输入 16单端/8差分输入;12位分辨率;100 kHz最大A/D采样率;0~+10 V,-5~+5 V,-10~+10 V双极性或单极性输入量程;1,2,4,8倍可编程增益;DMA实现数据的高速传输。

  模拟输出 4通道输出;-5~+5 V,-10~+10 V,0~5 V,0~10 V量程可选;通道单独置数或4通道同时置数。

  数字量I/O 可编程外围接口,24通道TTL/CMOS兼容;I/O接口上拉或下拉限流电阻。

  定时/计数器 6个16位、10 MHz(最大)定时/计

  2 VxWorks及其字符设备驱动

  VxWorks是一个基于抢占式的实时操作系统,他以其高度的可靠性、优秀的实时性、灵活的可裁性广泛应用到许多行业中。在VxWorks中,I/O系统提供了与设备无关的用户接口,应用程序可以通过标准的接口函数如:create(),remove(),open(),close(),read(),write(),ioctl()等来访问设备驱动程序,而不用关心驱动程序是如何实现的。ADT700属于字符型设备,他的驱动程序需要支持以上接口函数。

  下面以字符设备中open()操作为例,说明字符设备驱动程序结构。

  如图1所示,当应用程序调用fd=open("/xx0",ORDONLY,0)时,I/O系统根据文件名"/xx0"在设备列表中查找设备(设备是以文件形式存在的,文件名即设备名)(如①所示);查找到相应设备后根据驱动号定位到驱动表中(如②所示);I/O系统在文件描述表中预留一个表项fd=3(如③所示);然后I/O系统调用驱动程序中的xxoOpen()函数,返回需要保留的值,即设备描述指针(如④所示);I/O系统将驱动号和驱动返回值填到文件描述符表中(如⑤所示);最后,I/O系统返回新opeh()的文件在文件描述符表中的索引,应用程序得到文件描述符fd=3(如⑥所示)。用户可以通过操作文件来访问I/O设备。

  3驱动实现

  3.1 功能分类

  ADT700具有A/D,D/A转换,数字I/O,定时/计数等功能,对其进行分析,可分为3类:

  (1)A/D转换为只读,而D/A转换为只写;
  (2)数字I/O既可读又可写;
  (3)定时/计数器基本无需读写,只设置即可。

  根据以上功能,得出需要实现3个驱动,分别为:

  (1)adtDrv驱动,用于读入A/D转换后的数据,写出D/A转换的数据,设备描述符为"/adt";
  (2)ppiDrv驱动,用于读入或写出数字I/O的数字,设备描述符为"/ppi";
  (3)pitDrv驱动,用于设置定时/计数器,设备描述符为"/pit"。

  3.2基本流程

  (1)安装驱动

  I/O系统的功能是将用户的I/O请求转换成对相应驱动程序具体操作函数的调用,他通过维护一个包括所有驱动程序操作函数的地址表来实现的。通过调用ios-DrvInstall()可以动态安装驱动程序,该函数的参数就是7种基本I/O操作函数指针。iosDrvInstall()函数将这些地址写入驱动表中的一块空闲存储区中,并返回这块存储区的编号,编号即驱动程序号,可被与驱动程序相关联的设备使用。iosDrvInstall()的原型是:

  int iosDrvtnstall(FUNCPTR pCreate,FUNCPTRpDelete, FUNCPTR pOpen, FUNCPTR pClose,FUNCPTR pRead,FUNCPTR pWrite,FUNCPTR pI-octl);

  当调用iosDrvInstall()注册I/O函数成功后,在shell下用iosDrvShow命令可以观察驱动表中ADT700的驱动入口。

  (2)创建设备

  创建设备过程即是调用设备创建函数iosDevAdd()将此设备加入到I/O系统的设备列表中。iosDevAdd()的原型为:

  STATUS iosDevAdd(DEV_HDR*pDevHdr,char*name,int drvnum);

  其中:DEV_HDR是一个指向该设备的描述符指针;而DEV_HDR结构中的第一项则指向下一个设备的描述符指针。

  设备创建成功后,在shell下用devs命令可以观察设备列表中ADT700的设备描述符。

  以ADT700中adtDrv驱动为例,以上两步的完成过程如图2所示。

相关推荐

风河宣布对于未来机载性能环境联合体的承诺

风河  嵌入式  VxWorks  2012-02-29

基于Windows平台VxWorks交叉编译工具的设计

VxWorks  嵌入式  2011-09-05

嵌入式系统U盘实时启动技术

VxWorks  嵌入式系统  2011-09-01

基于Web的MCF5249数据采集系统的设计

Web  MCF5249  数据采集  2011-08-18

探地雷达信号的数据采集与显示研究

数据采集  探地雷达  2011-08-18

基于VxWorks实时嵌入式PLC设计

PLC  VxWorks  2011-08-15
在线研讨会
焦点