PCI总线高速数据采集卡及其驱动程序设计

更新时间:2023-07-26 21:21:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

PCI总线高速数据采集卡及其驱动程序设计

数采与监测

文章编号:1008-0570(2008)01-1-0085-02

PCI总线高速数据采集卡及其驱动程序设计

PCIBushighspeeddataacquisitioncardanddesignofthedriverprogram

(潍坊学院)魏先民

WEIXIANMIN

摘要:本文介绍了计算机通过驱动程序与数据采集卡硬件进行高速数据交换的方法,利用DriverWorks完成了满足高速数据传输要求的WDM驱动程序设计,实现了数据采集卡与主机内存之间数据传输的DMA方法。关键词:数据采集;驱动模型;直接存储访问中图分类号:TP393-08文献标识码:AAbstract:Thispaperintroduceshighspeeddataexchangemethodbetweencomputeranddataacquisitioncardbyitsdriverprogram.ByDriverWorksitaccomplisheddesignofWDMdrivermeetinghispeeddatatransporting,andrealizedDMAmethodbetweendataacquisitioncardandcomputerRAM.

Keywords:dataacquisition,WDM,DMA

Windows2000操作系统对PCI总线提供良好的支持,PCI总线数据具有传输速度快、高可靠性的优势,本文设计的PCI总线高速数据采集卡用于某数字化仪中,借助用DriverWorks开发的WDM设备驱动程序,用户应用程序和数据采集卡之间相互通信,实现主机命令的即时传送和板卡采集数据的高速传输。

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端口和中断的需求统一划分,自动分配系统资源。

技术创新

1硬件系统设计

数据采集卡使用PCI专用接口芯片与FPGA相结合的方案,系统硬件组成如图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总线与本地总线之间的魏先民:副教授

潍坊学院院级科研基金资助(2005K09)PLC技术应用200例》

2数据采集卡WDM驱动程序设计

2.1驱动程序设计实现

在WDM驱动程序模型中,每个硬件设备至少有两个驱动程序。其中一个为功能驱动程序,它负责初始化I/O操作,处理I/O操作完成时所带来的中断事件,为用户提供与设备相适合的控制方式;另一个驱动程序为总线驱动程序,它负责管理硬件与计算机的连接,总线驱动程序由操作系统提供。Win-dow2000应用程序调用Windows子系统Win32API,这个调用由系统服务接口作用到I/O管理器,I/O管理器进行必要的参数匹配和操作安全性检查,然后由这个请求构造出合适的IRP(I/ORequestPackage)。IRP是DDK定义的一个数据结构,具有丰富的成员,对于单层驱动程序,直接接受并执行这个请求包,完成对硬件的操作,从而完成I/O请求工作,并将执行的结果通过I/O管理器返回应用程序;对于多层驱动则将驱动程序分成若干层,每层驱动再把I/O请求划分成更简单的

360元/年-85-

PCI总线高速数据采集卡及其驱动程序设计

数采与监测

中文核心期刊《微计算机信息》(测控自动化)2008年第24卷第1-1期

请求,以传给更下层的驱动执行。

该数据采集卡驱动程序完成以下功能:应用程序控制数据采集卡工作方式,向数据采集卡工作方式缓冲器发送工作方式控制字;应用程序查询数据采集卡工作状态,从数据采集卡工作状缓冲器读取工作状态字;为了使应用程序能实时处理数据采集卡上采集到的数据,SRAM与主机内存之间要实现DMA方式的数据传输。

采用VC+DDK+Driverworks进行驱动程序开发。下面分别说明控制命令和DMA方式传输数据的实现方法。

1)主机发送数据采集卡控制命令实现

Driverworks利用KMemoryRange和KIoRange实现内存和I/O映射空间的读写,通过配置EEPROM,将PCI9054的Base2空间设定为一个内存映射空间,局部端FPGA上配置的FIFO地址空间映射到该内存空间,这样对FIFO的访问,就是访问Base2空间。驱动程序中,创建对象KMemoryRangem_Memo-ryRangeForB2,并在OnStartDevice(KIrpI)例程中对该对象初始化,使该对象与Base2空间关联,初始化以后,驱动程序其他例程就可以使用对象m_MemoryRangeForB2,调用KMemoryRange类的成员函数ind、inw、inb、outd、outw、outb完成对PCI9054Base2空间的双字、字、字节的输入输出操作,也就是对数据采集卡FPGA里边FIFO双字、字、字节的输入输出操作。对IO端口的访问类似,只是使用的是KIoRange类来完成。

需要注意的是PCI9054Base0、Base1固定设置为内存映射空间和I/O映射空间,用于PCI9054内部寄存器的访问。

下面以主机由驱动程序向数据采集卡发送工作方式控制字为例,说明KMemoryRange成员函数访问硬件的方法,代码中m_MemoryRangeForB2为KMemoryRange对象。

NTSTATUSDZDevice::DZDRIVER_IOCTL_Write_Handler(KIrpI)

NTSTATUSstatus=STATUS_SUCCESS;

PULONGpBuffer=(PULONG)I.IoctlBuffer();//输入参数

ULONGm_Offset=*pBuffer;//控制字寄存器在局部地址空间上的偏移

ULONGm_Data=*(pBuffer+2);//控制字

m_MemoryRangeForB2.outw(m_Offset,m_Data);//向寄存器写控制字

I.Information()=sizeof(ULONG);//本次操作传输的字节数returnstatus;}

驱动程序控制字写函数中,首先取得从应用程序传递的偏移地址和控制字的指针,偏移地址和控制字存储在IRP的As-sociatedIrp域中SystemBuffer指针指向的缓冲区,驱动程序先取得指向该缓冲区的指针,然后分别取得偏移地址和控制字,最后向该偏移地址写控制字,程序执行后,即向硬件上的寄存器写入了相应的控制字。

2)DMA方式读取FPGA上FIFO数据实现DriverWorks提供了3个类KDmaAdapter、KDmaTransfer、KCommonDmaBuffer用于实现DMA操作,KDmaAdapter类用于建立一个DMA适配器对象,说明DMA通道特性和提供串行化访问的服务;KDmaTransfer类用于启动,控制DMA的传输以及DMA传输结束后数据由公用缓冲区拷贝靠应用程序数据缓冲

区;KCommonDmaBuffer类用于申请系统提供的公用缓冲区。DriverWorks中,实现DMA传输过程如图2所示。

技术创新

图2DMA传输过程

首先在设备启动例程(OnStartDevice)中创建一个KD-maAdapter类实例且在适配器对象描述表中正确描述适配器对象;创建一个KCommonDmaBufer类实例,调用该类的成员函数Initialize初始化公用缓冲区大小;创建一个KDmaTransfer类实例,并初始化为使用公用缓冲区作为DMA数据区。然后编写KDmaTransfer回调函数OnDamReady,回调函数中,先调用成员函数ByteRemaining(),判断数据是否传输完成。若完成,则调用函数Terminate()完成相应当IRP;未完成,则调用GetTransferDe-scripters(),获取当前传输数据的物理地址,传输字节数,然后进入StartDMA例程设置PCI9054的DMA寄存器,开始真正数据传输。当前段传输完成时,PCI9054的DMA中断控制器产生一个DMA中断,进入中断服务例程(ISR),中断服务例程中,首先判断是否为DMA通道的中断,然后禁止本次中断,再清除本次中断,最后连接到延时过程调用(DPC)。延时过程调用(DPC)中,调用KDmaTransfer类的Continue()成员函数,继续下一个段传输,直到DMA数据传输结束,完成该IRP。

2.2驱动程序和应用程序之间的通信

驱动程序和应用程序之间的通信包括应用程序与驱动程序通讯和驱动程序与应用程序的通信。应用程序与驱动程序通信过程为,应用程序先用CreateFile函数打开设备,然后用Devi-ceIoControl和驱动程序通信,DeviceIoControl使用不同的命令字来调用驱动程序中的函数,包括从驱动驱动程序读取数据和写数据给驱动程序两种情况。也可以用ReadFile从驱动中读取数据或者用WriteFile写数据给驱动程序,当应用程序退出时,用CloseHandle关闭设备。

当驱动程序捕捉到特点事件发生时,应当通知应用程序,与应用程序通信,驱动程序和应用程序通信的方法主要有两种,DeviceIoControl异步调用和WIN32事件通知。DeviceIoControl异步调用时,驱动程序先将此IRP保存起来,然后调用I.MarkPending(),最后驱动程序返回STATUS_PENDING,当一个事件发生时,驱动程序再完成这个IRP;使用WIN32事件通知和应用程序通信时,应用程序首先创建一个事件,直接将该事件句柄传递给驱动程序,应用程序等待驱动程序发送事件消息。

3结束语

本文作者创新点:高速数据采集卡使用PCI专用接口芯片与FPGA相结合的方案,用DriverWorks开发了其驱动程序,通过DMA方式高速读取板卡上的数据。(下转第89页)

200例》

360元/

PCI总线高速数据采集卡及其驱动程序设计

数采与监测

石油化工学院学报.2004.2(44-46)。

[3]Pursley,MichaelB.RoysterIV,ThomasC.High-ratedirect-se-quencespreadspectrum[J].IEEEMilitaryCommunicationsConfer-ence,2003:1101-1106。

[4]Yen,DavidC.;Chou,DavidC.;Tarn,J.Michael.Applicationsanddevelopmentofspreadspectrumtechnology[J].TechnologyinSocietyVolume:22,Issue:4,November,2000,525-535。

[5]李白萍,林少锋,孙伟峰.直接序列扩频通信系统同步技术的研究[J].西安科技学院学报.2003.2(201-204)。

[6]李乐民,赵梓森.数字通信传输系统[M].北京:人民邮电出版社,1999:454-463。

[7]C.Bouder,S.Azou,G.Burel.Performanceanalysisofaspreadingsequenceestimatorforspreadspectrumtransmission[J].JournalofTheFranklinInstitute,2004,1221-1227。

[8]潘波,宋雪桦.采用变换域自适应技术抑制DS扩频通信中的窄带干扰[J].微计算机信息.2006.5-3.(100-102)。

作者简介:张连俊(1964.5-),汉族,山东理工大学计算机学院教授,硕士生导师,主要研究方向:扩频通信、信号处理;王善斌(1969.4-),汉族,山东理工大学计算机学院副教授,主要研究方

系统控制。向:信号处理、

Biography:Zhang,lian-jun(1964.5-),Male,HanNationality,ShandongUniversityofTechnology,MasterSupervisor:Mainre-searchdirection:SpreadSpectrumcommunication.,signalpro-cessing.

(255049山东淄博山东理工大学计算机学院)张连俊王善斌

(SchoolofComputer,ShandongUniversityofTechnology,Zi-bo255049)ZhangLian-junWangShan-Bin

通讯地址:(255049山东淄博山东理工大学计算机学院)张连俊

(收稿日期:2007.10.03)(修稿日期:2007.12.05)

图3LWZ-X截面应变测点关联拟合曲线

5结论

在实际项目中(以某大型斜拉桥长期健康监测系统为例),本系统作为桥梁长期健康监测系统的一部分,在收集了主梁应变、主梁温度、主塔温度等测点近一年的数据后,对数据预处理和关联分析方法进行了调试和测试,系统工作正常,各项数据正确而且可靠性比较高。系统运行的各项指标均比较良好。

本文作者创新点:桥梁长期健康监测系统中传感器数量多,数据采集频率高,产生了海量原始数据,本文提出在原始数据进入数据库之前先行筛选,保证准确有效的数据作为数据仓库的数据来源;异常数据另行存放,以备回溯检查,同时提出了原始数据预处理的有效方法。参考文献

[1]雷俊卿,钱冬生,长大跨桥实时监测预警系统研究,公路[J],2002(2):51~55

[2]陈坚,一种微型嵌入式数据库系统的设计与实现[J].微计算机信息,2005.25,VOL21(12),37 ̄40

[3]邱法维,杜文博等,虎门大桥应变监测数据处理系统设计,桥梁建设[J],2003(2):86~89

[4]岳建平,朱华吉,安全监测数据粗差检验方法评述,测绘通报[J],

682001(2):66~

[5]岳建平等,安全监测数据关联分析方法研究,测绘通报[J],1999(4):22~25

作者简介:杨锦园(1970-),女,湖北省黄石市人,湖北师范学院控制科学与工程系,高级工程师/硕士,主要研究方向:数据处理、信息融合。

Biography:YANGJin-yuan(1970-),Female,HuangshiHubei,DepartmentofControlScience&engineering,HubeiNormalU-niversity,SeniorEngineer/Master,Researcharea:datapro-cessing&informationfusion

(435000湖北黄石湖北师范学院控制科学与工程系)杨锦园

(DepartmentofControlScience&engineering,HubeiNormalUniversity,HuangshiHubei435000,China)YangJin-yuan通讯地址:(435000湖北黄石湖北师范学院控制科学与工程系)杨锦园

(收稿日期:2007.10.03)(修稿日期:2007.12.05)

技术创新

(上接第84页)

该扩频通信系统可实现多路信号的有效传输,具有抗干扰能力强、截获率低、易保密等优点。参考文献

[1]朱近康编著.CDMA通信技术[M].北京:人民邮电出版社,2001.9:142-168。

[2]吴明捷,胡鑫.微弱信号扩频通系统主要性能指标分析[J].北京PLC技术应用200例》

(上接第86页)

为测试驱动程序工作正常与否,编写了上层测试应用程序,测试表明,驱动程序能够快速加载主机控制命令,数据采集卡工作正常,传输速率符合要求。项目经济效益约20万元。参考文献

[1]王雪梅,施洪昌.基于PCI总线的数据采集卡的设计[J].微计算机信息,2005,4:41-43.

[2]武安河,邰铭,于洪涛.Window2000/XPWDM设备驱动程序开发[M].北京:电子工业出版社,2003.

[3]李贵山,陈金鹏著.PCI局部总线及其应用[M].西安:西安电子科技大学出版社.2003.

[4]Microsoft1Windows2000驱动程序开发大全[M].北京:机械工业出版社,2001.

作者简介:魏先民(1969.12),男(汉族),山东临朐人,副教授,主要研究方向:高速数据采集。

Biography:Weixianmin(1969-),man(theHannationality),

Shandongprovince,Weifanguniversity,adjunctprofessor,master,Researcharea:High-speedDataAcquisition.

(261061山东潍坊潍坊学院计算机与通信工程学院)魏先民通讯地址:(261061山东省潍坊市东风东街5147号潍坊学院计算机与通信工程学院)魏先民

(收稿日期:2007.10.03)(修稿日期:2007.12.05)

360元/年-89-

本文来源:https://www.bwwdw.com/article/jv1m.html

Top