首页 理论教育 基于PCI总线数据采集卡驱动程序设计优化方案

基于PCI总线数据采集卡驱动程序设计优化方案

时间:2023-06-28 理论教育 版权反馈
【摘要】:同时,PCI总线支持突发、大批量的数据传输。DMA传输中,数据传输速率达到了PCI总线的最大值,发挥了PCI总线数据传输的高速率。当PCI数据采集卡接收完数据后会向主机发出中断,这个中断会让采集卡的驱动程序来处理,驱动程序在处理完后应迅速汇报给应用程序,让应用程序知道数据已准备好。

基于PCI总线数据采集卡驱动程序设计优化方案

驱动程序是计算机与数据采集处理卡进行信息交互的接口程序,它使得计算机与采集卡组合在一起成为一个有机的整体。

1.开发工具及主要例程

下面以DriverWorks和微软公司的Device driver kits(DDK)作为开发工具,简单介绍PCI总线数据采集卡的驱动程序设计。DriverWorks为驱动程序提供了基本的框架,设计中,利用它生成的源码中包含DspCard和DspCardDevice两个类,这两个类分别由KDriver和KPnpDevice类派生而来。Kdriver类提供设备驱动程序的基本框架结构,它负责驱动程序的初始化,并负责将IRP分发到目标设备对象。KpnpDevice类代表设备驱动程序,提供与应用程序的接口功能,承担IRP分发任务,提供与底层设备的接口功能,提供与其他系统对象(如中断、DMA等)的接口功能。

(1)DspCard类DspCard类包含的主要例程有:DriverEntry,AddDevice。

1)DriverEntry例程负责驱动程序的初始化,用以初始化驱动程序范围的数据结构和资源。

2)在驱动程序初始化后,PnP管理器调用驱动程序的AddDevice例程来初始化由该驱动程序所控制的设备。在AddDevice例程中,驱动程序创建一个设备对象作为目标I/O设备,并将设备对象附着到设备堆栈中,设备堆栈为每一个相关设备驱动程序包含一个设备对象。

(2)DspCardDevice类DspCardDevice类包含的主要例程有:PnP例程、WMI例程、Dispatch例程、StartIo例程。

1)PnP管理器使用IRP来指导驱动程序启动、停止和删除设备,并查询驱动程序的设备。在启动例程中,获取系统分配的资源,做一些初始化工作。在停止例程中,暂时使配置的资源无效。在删除例程中,释放分配的资源。(www.xing528.com)

2)Power例程响应电源管理器发出的IRP请求包,电源管理器使用IRP指示驱动程序来改变状态、等待并响应系统唤醒事件和查询驱动程序的设备。

3)StartIo例程用于对IRP请求的排队。对于实际物理访问设备,在某一时刻只能有一个操作在进行,这就要求在一个IRP未处理完之前,绝不允许处理另一个IRP。StartIo例程就是用来对这些请求进行串行处理的。

4)Dispatch例程即调度例程,主要处理应用程序与驱动程序之间的通信,包括Create、Close、CleanUp、Read、Write和DeviceControl。Dispatch例程也是本驱动程序中实现应用程序与采集卡数据传输的重要纽带。设计中,Read子例程用来读取指定地址的数据,而Write子例程则向指定地址写入数据。

2.驱动程序与采集卡的数据传输

驱动程序必须与数据采集处理卡进行数据传输,这些数据包括控制信息及采集处理后的数据。控制信息的数据传输通过Read、Write等例程,利用总线的单个数据传输方式来实现。同时,PCI总线支持突发、大批量的数据传输。设计中,利用接口芯片的DMA传输功能,通过DeviceControl例程传递DMA传输控制字实现了从数据采集卡到系统的高速数据传输。DMA传输中,数据传输速率达到了PCI总线的最大值,发挥了PCI总线数据传输的高速率。

3.驱动程序与应用程序的通信

虽然驱动程序是为设备的硬件层编程服务的,但同样需要提供和应用程序进行通信的能力,从而最终达到应用程序控制设备的目的。在WDM中,当WDM捕捉到特定的事件(如中断)时,应当可以与应用程序进行通信。当PCI数据采集卡接收完数据后会向主机发出中断,这个中断会让采集卡的驱动程序来处理,驱动程序在处理完后应迅速汇报给应用程序,让应用程序知道数据已准备好。在实现中,可以由应用程序创建一个事件,直接将该事件的句柄传递给WDM,然后等待WDM发送事件消息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈