基于CPCI总线的数据采集卡及其驱动程序设计_第1页
基于CPCI总线的数据采集卡及其驱动程序设计_第2页
基于CPCI总线的数据采集卡及其驱动程序设计_第3页
基于CPCI总线的数据采集卡及其驱动程序设计_第4页
基于CPCI总线的数据采集卡及其驱动程序设计_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于CPCI总线的数据网罗卡及其驱动程序方案摘要介绍了一种基于pi总线的下速数据网罗卡硬件及其d驱动程序方案要收,详细阐年夜黑策画机经由过程驱动程序与数据网罗卡硬件举止下速数据交换的要收,操做driverrks完成了开意下速数据传输要供的d驱动程序方案,真现了数据网罗卡与主机内存之间数据传输的da要收。闭键词数据网罗;d;pi;driverrks;da1引止pi总线机械特征上有ve总线的稳固特征,正在数据传输圆里采与与pi划一的传输要收。下速数据网罗系统中,总线数据传输本领要供强,数据网罗系统采与pi总线,极年夜前进了数据网罗卡的数据传输本领。为了充分阐扬pi总线数据传输快、下牢靠的下风,要挨

2、面好基于pi总线的数据网罗卡与策画机主机之间的通信标题问题。inds2000操做系统对pi总线供给良好的支撑,该操做系统下,驱动程序的编写基于一种新的驱动模型d(indsdriverdel),d为inds98/2000/xp操做系统的装备驱动程序的方案供给了统一的框架。本文介绍的基于pi总线的下速数据网罗卡用于某数字化仪digitizer中,借助用driverrks开拓的d装备驱动程序,用户使用程序战数据网罗卡之间互相通信,真现主机命令的坐即传支战板卡网罗数据的下速传输。2硬件系统方案针对没有同的使用要供,pi接心卡方案采与的方案方案,一是操做pi公用接心芯片与fpga相结开的方案,公用接心芯

3、片完成从pi总线到本天用户总线的转接;fpga灵敏的转换逻辑时序,以逆应没有同的中设时序要供;两是采与可编程逻辑器件真现通用pi总线接心,很多消费可编程逻辑器件的厂商皆供给经过宽酷测试的pi接心成效模块,由用户举止简朴的组开方案便可。考虑到开拓周期,本pi数据网罗卡采与前一种方案要收,用pi公用接心芯片真现。系统硬件组成如图1所示。本数据网罗卡pi接心芯片选用plx公司的pi9054,pi9054供给两个自力的可编程da操做器,有两个da通讲,每一个通讲均支撑blk(块传输)战satter/gather(散/散传输)的da方法,pi总线端支撑32位/33hz;本天端可编程真现8、16、32位数

4、据宽度,传输速度最下可抵达132字节/秒。本天总线端时钟最下可达50hz,支撑复用j形式战非复用的32位所在/数据形式。pi9054工作方法有:间接主形式,间接从形式战da形式。间接主形式由本天处理器访谒pi总线上的i/接心战策画机内存资本,本天处理器倡导数据的传输。间接从形式指pi总线做为主控装备倡导对本天总线资本的访谒,包含对本天处理器的操做战对本天内存的访谒。da形式支撑pi总线与本天总线之间的突收传输。pi9054真现了pi总线到局部端总线的转接,用该芯片做方案时,没必要对pi标准做片里深化年夜黑,便当用户正在方案时专注于详细成效的真现。本方案中pi9054设置为非复用的32位所在/数

5、据,即形式,采与间接从形式战da方法分别传输主机命令战数据网罗卡网罗到的数据;可编程逻辑器件fpga里边设置一个fif做为缓冲器,当主机背数据网罗卡收支命令时,fif做为命令数据的缓冲器,命令数据收支终了,惹起dsp的一此截至,dsp从fif里读出命令数据,对命令分析,完成真践的硬件操做;当主机稀读与数据网罗卡网罗到的数据时,dsp对sra中数据做预处理,上传到fpga里边设置的fif中,那时fif做为数据网罗卡上传数据的缓冲器,当fif数据谦时,惹起pi截至,照顾上层使用程序读与数据。eepr中存放装备号,厂商号和本天总线的基所在空间,i/空间,截至操做疑号等疑息,初初化时,系统将eepr设

6、置参数拆进pi设置存放器,并根据本天总线对内存,i/端心战截至的需供统一分别,自动分拨系统资本。3数据网罗卡d驱动程序方案3.1d模型(indsdriverdel)简述d模型(indsdriverdel)是微硬公司为inds98战inds2000的驱动程序方案的一种架构,正在d驱动程序模型中,每一个硬件装备最少有两个驱动程序。其中一个为成效驱动程序,它理解硬件工作的局部细节,负责初初化i/操做,处理i/操做完成时所带去的截至事变,为用户供给与装备相恰当的操做方法;另外一个驱动程序为总线驱动程序,它负责挨面硬件与策画机的毗邻,总线驱动程序由操做系统供给。ind2000系统规划图如图2所示,使用程

7、序挪用inds子系统in32api,那个挪用由系统处事接心做用到i/挨面器,i/挨面器举止需要的参数婚配战操做安好性检查,然后由那个恳供规划出契开的irp(i/requestpakage)。irp是ddk定义的一个数据规划,具有丰富的成员,对于单层驱动程序,间接担任并真止那个恳供包,完成对硬件的操做,从而完成i/恳供工作,并将真止的结果经由过程i/挨面器返回使用程序;对于多层驱动那么将驱动程序分红几层,每层驱动再把i/恳供分别成更简朴的恳供,以传给更基层的驱动真止。图2inds2000系统规划3.2驱动程序方案真现该数据网罗卡驱动程序完成以下成效:使用程序操做数据网罗卡工作方法,背数据网罗卡工

8、作方法缓冲器收支工作方法操做字;使用程序查询数据网罗卡工作形态,从数据网罗卡工作状缓冲器读与工作形态字;为了使使用程序能实时处理数据网罗卡上网罗到的数据,sra与主机内存之间要真现da方法的数据传输。采与v+ddk+driverrks举止驱动程序开拓,driverrks为驱动程序开拓供给指导,可以便当的创坐一个驱动程序框架。上里分别分析操做命令战da方法传输数据的真现要收。1)主机收支数据网罗卡操做命令真现driverrks操做keryrange战kirange真现内存战i/映照空间的读写,经由过程设置eepr,将pi9054的base2空间设定为一个内存映照空间,局部端fpga上设置的fif

9、所在空间映照到该内存空间,多么对fif的访谒,便是访谒base2空间。驱动程序中,创坐东西keryrange_eryrangefrb2,并正在nstartdevie(kirpi)例程中对该东西初初化,使该东西与base2空间联络闭系,初初化当前,驱动程序其他例程便可以操做东西_eryrangefrb2,挪用keryrange类的成员函数ind、in、inb、utd、ut、utb完成对pi9054base2空间的单字、字、字节的输进输出操做,也便是对数据网罗卡fpga里边fif单字、字、字节的输进输出操做。对i端心的访谒一样,只是操做的是kirange类去完成。需要注意的是pi9054base0

10、、base1稳固设置为内存映照空间战i/映照空间,用于pi9054内部存放器的访谒,base2、base3用户自己根据eepr设置去设定为内存映照空间年夜要i/0映照空间。正在驱动程序方案过程中,经常需要设置战查询pi9054内部存放器,访谒pi9054内部存放器,要用到base0或base1空间,本方案中,对pi9054内部存放器访谒操做base1,即i映照空间,比方:pi9054da通讲0传输字节数存放器偏偏移为0 x8,假设要设定da通讲0一次传输的字节数,可以经由过程初初化了的kirange东西_irange0的成员函数utd去真现。上里以主机由驱动程序背数据网罗卡收支工作方法操做字为

11、例,分析keryrange成员函数访谒硬件的要收,代码中_eryrangefrb2为keryrange东西,用于base2空间的访谒。ntstatusdzdevie:dzdriver_itl_rite_handler(kirpi)ntstatusstatus=status_suess;pulngpbuffer=(pulng)i.itlbuffer();/输进参数ulng_ffset=*pbuffer;/操做字存放器正在局部所在空间上的偏偏移ulng_data=*(pbuffer+2);/操做字_eryrangefrb2.ut(_ffset,_data);/背存放器写操做字i.infratin(

12、)=sizef(ulng);/本次操做传输的字节数returnstatus;驱动程序操做字写函数中,起尾获得从使用程序传递的偏偏移所在战操做字的指针,偏偏移所在战操做字存储正在irp的assiatedirp域中systebuffer指针指背的缓冲区,驱动程序先获得指背该缓冲区的指针,然后分别获得偏偏移所在战操做字,终了背该偏偏移所在写操做字,程序真止后,即背硬件上的存放器写进了响应的操做字。2)da方法读与fpga上fif数据真现driverrks供给了3个类kdaadapter、kdatransfer、kndabuffer用于真现da操做,kdaadapter类用于创坐一个da适配器东西,分

13、析da通讲特征战供给串止化访谒的处事;kdatransfer类用于启动,操做da的传输和da传输竣过后数据由公用缓冲区拷贝靠使用程序数据缓冲区;kndabuffer类用于申请系统供给的公用缓冲区。driverrks中,真现da传输过程如图3所示。起尾正在装备启动例程(nstartdevie)中创坐一个kdaadapter类真例且正在适配器东西描摹表中准确描摹适配器东西;创坐一个kndabufer类真例,挪用该类的成员函数initialize初初化公用缓冲区大小;创坐一个kdatransfer类真例,并初初化为操做公用缓冲区做为da数据区。然后编写kdatransfer回调函数ndaready,

14、回调函数中,先挪用成员函数bytereaining(),断定命据能可传输完成。假设完成,那么挪用函数terinate()完成相该当irp;已完成,那么挪用gettransferdesripters(),猎与当前传输数据的物理所在,传输字节数,然落后进startda例程设置pi9054的da存放器,开端真正数据传输。当前段传输完成时,pi9054的da截至操做器收死一个da截至,进进截至处事例程isr,截至处事例程中,起尾断定能可为da通讲的截至,然后抑造本次截至,再拂拭本次截至,终了毗邻到延时过程挪用(dp)。延时过程挪用(dp)中,挪用kdatransfer类的ntinue()成员函数,担当

15、下一个段传输,曲到da数据传输完毕,完成该irp。3.3驱动程序战使用程序之间的通信驱动程序战使用程序之间的通信包含使用程序与驱动程序通信战驱动程序与使用程序的通信。使用程序与驱动程序通信过程为,使用程序先用reatefile函数翻开装备,然后用devieintrl战驱动程序通信,devieintrl操做没有同的命令字去挪用驱动程序中的函数,包含从驱动驱动程序读与数据战写数据给驱动程序两种情况。也可以用readfile从驱动中读与数据年夜要用ritefile写数据给驱动程序,当使用程序退出时,用lsehandle启锁装备。当驱动程序捕捉到特征事变收死时,该当照顾使用程序,与使用程序通信,驱动程序战使用程序通信的要收主要有两种,devieintrl同程序用战in32事变照顾。devieintrl同程序用时,驱动程序先将此irp保存起去,然后挪用i.arkpending(),终了驱动程序返回status_pending,当一个事变收死时,驱动程序再完成那个irp;操做in32事变照顾战使用程序通信时,使用程序起初创坐一个事变,间接将该事变句柄传递给驱动程序,使用程序等待驱动程序收支事变动静。4完毕语数据网罗是真

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论