isa数据采集卡的wdm驱动程序实现

isa数据采集卡的wdm驱动程序实现

ID:9416144

大小:49.00 KB

页数:4页

时间:2018-04-30

isa数据采集卡的wdm驱动程序实现_第1页
isa数据采集卡的wdm驱动程序实现_第2页
isa数据采集卡的wdm驱动程序实现_第3页
isa数据采集卡的wdm驱动程序实现_第4页
资源描述:

《isa数据采集卡的wdm驱动程序实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、ISA数据采集卡的WDM驱动程序实现

2、第1摘要:ISA设计在(ODEL)中没有获得很好的支持,使用实现需要一些特殊处理。主要讨论老式ISA设备的驱动程序的设计与实现。作为微软为支持PNP(即插即用),为用户的PNP设备驱动完成了大量的底层工作。这也使得对各种老设备,特别是那些不具有即插即用特性硬件的支持明显的不足。在科研和工控中,最常用的数据采集卡通常都是基于PC总线的不能为PNP提供硬件支持的ISA设备。为这类硬件编写非驱动程序只能局部支持PNP特性,而且需要做大量额外的工作如:必须检测硬件,为硬件创建设

3、备对象(用于代表硬件),配置并初始化硬件使其正常工作,这些工作非常复杂。利用可以避免这些麻烦。1的结构实际上是一个编写驱动程序的规范。其驱动程序结构的特点和AConfig=<dma-list>][IOConfig=<io-range-list][IRQConfig=<irq-list>][MemConfig=<mem-range-list>]其中CONFIGPRIOITY命令指定这个LOGCONFIG项的优先级。其余子命令表示设备选用的硬件资源。下面是一个例子:[C

4、X2590.Install]……;其它命令LogConfig=CX2590_DMA;指定配置项的名称[CX2590_DMA];配置项的名称ConfigPriority=NORMAL;配置的优先级IOConfig=4300-3ff%3ff(3ff::);指定IO范围IRQConfig=4,5,9,10,11;指定可选的中断DMAConfig=0,1,2,3;指定可选的DMA在INF文件中加入LOGCONFIG命令可以解决ISA总线设备资源的自动分配问题,就可以为ISA总线设备编写驱动程序。3一个ISA设备驱动

5、程序的实现使用Numega公司的开发工具DriverStudio2.01可以大大地简化驱动程序的开发过程。DriverStudio开发通用内核模式的开发包是Driver驱动程序的驱动程序,包括生成驱动程序接口(专有),设备的符号连接,I/O传输方式以及电源管理和处理PNP请求的IRP处理子程序。A。它还负责处理各种IRP的例程。设备对象是系统所有I/O操作的基石,一个驱动程序必须有一个或一个以上的设备对象才真正有意义。驱动对象和设备对象的关系很象ENT_ONLYvirtualNTSTATUSRead(KIr

6、pI);//MENT_ONLYvirtualVOIDStarIo(KIrpI);//开始I/O传输VOIDCancelQueuedIrp(KIrpI);//判断传输IPR是否被取消VOIDInvalidate(void);//释放资源例程virtualNTSTATUSDefaultPnp(KIrpI);//处理默认的PNP操作virtualNTSTATUSDefaultPo_IoPotrRange0//管理I/O资源Kinterruptm_Irq;//管理中断资源……};在实际操作过程中,采用中断读数的方法

7、。在驱动程序中设置了两个缓冲区,一个前台缓冲区,一个后台缓冲区(用作后备缓冲区),系统总是先使用前台缓冲区。当前台缓冲区已满而仍然未被读出,系统触发中断时,此时使用后台缓冲区。读数的方法很简单,系统先读前台缓冲区的数据,只有当前台缓冲区未满而后台缓冲区满的时候才读后台缓冲区。这样可以保证采样数据序列的时间顺序。具体实现如下://ISR例程,完成数据从FIFO中读出BOOLEANAC_1810Device::Isr_Irq(void){//是否触发不断?未触发则返回,判断两个缓冲区情况,都满则返回……//前台

8、缓冲区未满,使用前台缓冲区if(m_pBuffer->numused<MAX_READ_BUF){for(inti=0;i<BLOCK_SIZE;i++){m_pBuffer_>buff[m_pBuffer->numused+i]=READ_FIFO;}m_pBuffer->numused+=BLOCK_SIZE;}else//完成其它情况的判断……returnTRUE;//中断成功返回}当应用程序使用标准J_READNTSTATUSAC_1810Device::Read

9、(KIrpI){//检查输入的合法性if(I.ReadSize()<BLOCK_SIZE){//不合法返回错误代码I.Information()=0;ReturnI.Pnpplete(this,STATUS_INVALID_PARAMETER);}//读0字节,永远成功if(I.ReadSize()==0){I.Information()=0;returnI.Pnpplete(this,STATUS_SUC

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。