基于VxWorks的PCI总线多功能数据采集卡驱动开发
Adlink公司的7396数据采集卡是PCI设备,PCI设备驱动程序属于VxWorks体系结构中的I/O系统部分,它往上为应用程序提供API接口,往下通过BSP访问PCI设备。基于VxWorks的PCi设备驱动程序开发流程如图3所示。分为4个步骤:①创建设备;②根据PCI设备的配置参数,对PCI设备编写功能函数程序;③编写测试程序进行功能测试;④驱动程序工作正常可靠,即可发布驱动程序,将其加载入VxWorks操作系统内核,完成驱动程序的开发。
在前面的一节中提到过,要访问一个PCI设备,首先要知道它的厂商号和设备号,在实际工作中,可以通过WinDriver这个在windows平台下运行的编写驱动的软件获得,这样比较方便和直观,通过它,得到7396的厂商号(Dev7396_VENDOR_ID)为0x144a,设备号Dev7396_DEVICE_ ID)为0x7396。知道厂商号和设备号后,就可以利用VxWorks提供的函数pciFindDevice()获得设备的总线号、设备编号和功能号。然后调用peiConfigInLong()获得多功能数据采集卡设备的配置空间、内存空间、I/O空间的地址;pciConfigInByte得到设备中断号。7396设备没有要访问的内存空间,所以没有涉及到内存的映射和操作。主要的实现代码如下所示:
在读取设备的基地址时,要特别注意结合设备相关的说明书进行,在前面的章节中提到过,7396设备包含3个寄存器空间(详见2多功能数据采集卡7396简介),所以读出来的基地址空间有可能是3个里面的一个。
由于使用的是PENTIUM系列的CPU来进行板卡驱动的开发,所以在边接中断向量的时候,中断号要加上0x20。
特别要注意操作9050的控制寄存器的偏移为0x4c的地方的操作,它是要实现中断必须要进行的操作,没有操作正确的话,中断是不能够正确运行的,而且9050的这个寄存器的各个位和9052还是不一样的,虽然都是PLX公司的产品。
读取完上面的I/O基地址和相应的中断后,就可以操作I/O空间了,这要根据相应板卡说明书上的基地址偏移来操作,而且还要注意设置端口是输入端口还是输出端口。中断服务程序在VxWorks下也有严格的要求,要注意。
5 结束语
文中结合具体的Adlink公司的7396数据采集卡,介绍了在VxWorks下编写PCI设备驱动的相关方法以及要注意的事项,并介绍了VxWorks的I/O系统和驱动相关的理论知识,它们是开发驱动的基础。根据上面方法开发出的7396驱动已经在某综合控制系统中稳定地运行。
数据采集 驱动 开发 多功能 总线 VxWorks PCI 基于 相关文章:
- 一种基FPGA和DSP的高性能PCI数据采集处理卡设计(08-26)
- 基于LabVIEW的USB实时数据采集处理系统的实现(03-26)
- 基于DSP和USB的高速数据采集与处理系统设计(05-01)
- 基于DSP和USB的三维感应测井数据采集系统(06-14)
- 多通道同步数据采集及压缩系统(08-12)
- 基于DSP的高速数据采集系统设计方案(06-25)