关键词 数据采集;WDM ;CPCI;DriverWorks;DMA
1 引言
|
|
CPCI总线机械特性上有VME总线的坚固特性,在数据传输方面采取与PCI一致的传输方法。高速数据采集系统中,总线数据传输能力要求强,数据采集系统采用CPCI总线,极大提高了数据采集卡的数据传输能力。为了充分发挥CPCI总线数据传输快、高可靠的优势,要解决好基于CPCI总线的数据采集卡与计算机主机之间的通信 问题 。Windows2000操作系统对CPCI总线提供良好的支持,该操作系统下,驱动程序的编写基于一种新的驱动模型WDM(Windows Driver Model),WDM为Windows98/2000/XP操作系统的设备驱动程序的设计提供了统一的框架。本文介绍的基于CPCI总线的高速数据采集卡用于某数字化仪(Digitizer)中,借助用DriverWorks开发的WDM设备驱动程序,用户 应用 程序和数据采集卡之间相互通信,实现主机命令的即时传送和板卡采集数据的高速传输。
2 硬件系统设计
针对不同的应用要求,CPCI接口卡设计采用的设计方案,一是使用PCI专用接口芯片与FPGA相结合的方案,专用接口芯片完成从PCI总线到本地用户总线的转接;FPGA灵活的转换逻辑时序,以适应不同的外设时序要求;二是采用可编程逻辑器件实现通用PCI总线接口,很多生产可编程逻辑器件的厂商都提供经过严格测试的PCI接口功能模块,由用户进行简单的组合设计即可。考虑到开发周期,本CPCI数据采集卡采用前一种设计方法,用PCI专用接口芯片实现。系统硬件组成如图1所示。
本数据采集卡PCI接口芯片选用PLX公司的PCI9054, PCI9054提供两个独立的可编程DMA控制器,有两个DMA通道,每个通道均支持Block(块传输)和Scatter/Gather(散/集传输)的DMA方式,PCI总线端支持32位/33MHz;本地端可编程实现8、16、32位数据宽度,传输速率最高可达到132M字节/秒。本地总线端时钟最高可达50MHz,支持复用(J模式)和非复用的32位地址/数据(C模式)。PCI9054工作方式有:直接主模式,直接从模式和DMA模式。直接主模式由本地处理器访问PCI总线上的I/O接口和计算机内存资源,本地处理器发起数据的传输。直接从模式指PCI总线作为主控设备发起对本地总线资源的访问,包括对本地处理器的控制和对本地内存的访问。DMA模式支持PCI总线与本地总线之间的突发传输。PCI9054实现了PCI总线到局部端总线的转接,用该芯片做设计时,不必对PCI规范作全面深入理解,方便用户在设计时专注于具体功能的实现。
本设计中PCI9054设置为非复用的32位地址/数据,即C模式,采用直接从模式和DMA方式分别传输主机命令和数据采集卡采集到的数据;可编程逻辑器件FPGA里边配置一个FIFO作为缓冲器,当主机向数据采集卡发送命令时,FIFO作为命令数据的缓冲器,命令数据发送完毕,引起DSP的一个中断,DSP从FIFO里读出命令数据,对命令解析,完成实际的硬件操作;当主机要读取数据采集卡采集到的数据时,DSP对SRAM中数据作预处理,上传到FPGA里边配置的FIFO中,这时FIFO作为数据采集卡上传数据的缓冲器,当FIFO数据满时,引起PCI中断,通知上层应用程序读取数据。EEPROM中存放设备号,厂商号以及本地总线的基地址空间,I/O空间,中断控制信号等信息,初始化时,系统将EEPROM配置参数装入PCI配置寄存器,并根据本地总线对内存,I/O端口和中断的需求统一划分,自动分配系统资源。
3 数据采集卡WDM驱动程序设计
3.1 WDM模型(Windows Driver Model)简述
WDM模型(Windows Driver Model) 是微软公司为Windows98和Windows2000的驱动程序设计的一种架构,在WDM驱动程序模型中,每个硬件设备至少有两个驱动程序。其中一个为功能驱动程序,它了解硬件工作的所有细节,负责初始化I/O操作,处理I/O操作完成时所带来的中断事件,为用户提供与设备相适合的控制方式;另一个驱动程序为总线驱动程序,它负责管理硬件与计算机的连接,总线驱动程序由操作系统提供。Window2000 系统结构图如图2所示,应用程序调用Windows子系统Win32 API,这个调用由系统服务接口作用到I/ O 管理器,I/ O 管理器进行必要的参数匹配和操作安全性检查,然后由这个请求构造出合适的IRP(I/O Request Package) 。IRP是DDK定义的一个数据结构,具有丰富的成员,对于单层驱动程序,直接接受并执行这个请求包,完成对硬件的操作,从而完成I/ O请求工作,并将执行的结果通过I/ O 管理器返回应用程序;对于多层驱动则将驱动程序分成若干层,每层驱动再把I/ O 请求划分成更简单的请求,以传给更下层的驱动执行。

图2 Windows2000 系统结构
3.2 驱动程序设计实现
该数据采集卡驱动程序完成以下功能:应用程序控制数据采集卡工作方式,向数据采集卡工作方式缓冲器发送工作方式控制字;应用程序查询数据采集卡工作状态,从数据采集卡工作状缓冲器读取工作状态字;为了使应用程序能实时处理数据采集卡上采集到的数据,SRAM与主机内存之间要实现DMA方式的数据传输。
采用VC+DDK+Driverworks进行驱动程序开发,Driverworks为驱动程序开发提供向导,可以方便的建立一个驱动程序框架。下面分别说明控制命令和DMA方式传输数据的实现方法。
1)主机发送数据采集卡控制命令实现
Driverworks利用KMemoryRange和KIoRange实现内存和I/O映射空间的读写,通过配置EEPROM,将PCI9054的Base2空间设定为一个内存映射空间,局部端FPGA上配置的FIFO地址空间映射到该内存空间,这样对FIFO的访问,就是访问Base2空间。驱动程序中,创建对象KMemoryRange m_MemoryRangeForB2,并在OnStartDevice(KIrp I)例程中对该对象初始化,使该对象与Base2空间关联,初始化以后,驱动程序其他例程就可以使用对象





