PCM高速遥测发送卡的WDM驱动程序设计

时间:2022-08-03 02:59:47

PCM高速遥测发送卡的WDM驱动程序设计

摘 要:PCM高速遥测数据发送卡是一款基于PCI接口芯片9054的PCM信号源,工作码速率可达10 Mb/s。以在Windows 2000操作系统下设计PCM高速遥测数据发送卡的WDM驱动程序为例,介绍WDM驱动程序的基本特点和遥测数据发送卡的基本结构,详细讨论利用Driver Studio开发WDM驱动程序设计的关键技术,如设备初始化、软件FIFO、中断处理和DMA操作等。

关键词:PCI;WDM;I/O请求包(IRP);软件FIFO

中图分类号:TP311.52

文献标识码:B

文章编号:1004―373X(2008)04―063―03

开发驱动程序的软件主要有:MicroSoft公司的DDK,Jungo公司的Windriver和Compuware NuMega公司的Driver Studio三种。DDK是最基本的驱动程序开发工具,比较复杂,适于专业的驱动程序开发人员,不适于硬件开发人员开发驱动程序。Windriver开发驱动程序不需要熟悉操作系统内核知识,针对硬件PCI/ISA/PCM―CIA/USB开发驱动程序比较方便,但驱动程序的效率不高、缺乏灵活性。Driver Studio把DDK用类的形式进行封装,简化设备驱动程序的开发,方便又不失灵活性。所以这里选择Driver Studio作为驱动程序的开发工具。

在结合PCM高速遥测数据发送卡的基础上,本文介绍WDM驱动程序的结构特点和PCM高速遥测数据发送卡的硬件结构,并阐述针对数据发送卡的特点,详细地讨论驱动程序关键部分的设计。

1 PCM遥测数据发送卡的硬件结构

图1为遥测数据发送卡的原理框图。码型变换器的功能是根据原始PCM数据产生3种输出码型:NRZ―L,NRZ―M及NRZ―S之一,以适应更加广泛的测试目的。多电平驱动器将来自FPGA的LV TTL电平的PCM数据和时钟信号转换为3种电平接口输出,分别是TTL,EIA422及MLVDS。同步FIFO作为硬件数据帧缓存存储由PCI总线写入的数据帧,然后由序列生成器读出。序列生成器根据PCM时钟速率产生串行移出的PCM原始数据将来自FIFO的32位并行数据转换为串行输出,同时根据移位寄存器的状态产生发向FIFO的读数请求:

2 WDM驱动程序的结构及特点

WDM(Windows Driver Model)是在原有的NT内核模式驱动程序的基础上发展来的,他增加了PnP(Plugand Play)、电源管理、WMI(Windows Management Instru―mentation)等功能。WDM模型的层次结构如图2所示。

层次结构可以使I/O请求过程更加清晰。影响设备的每一个操作都使用I/O请求包(IRP),通常IRP被送到设备堆栈的最上层,然后逐渐过滤到下层驱动程序。每处理1个IRP,I/O管理器就调用1次StartIO例程,从而着手IRP处理工作;如何处理完全取决于具体的设备,调用驱动程序中相应的例程。驱动程序处理完IRP后,会将结果返回给I/O管理器,再由I/O管理器返回给用户应用程序。

3 PCM遥测数据发送卡WDM驱动程序的设计

在设备的驱动程序设计中,需要处理PCI设备的硬件读写、中断处理、DMA等功能。可以把驱动程序视为一个框架和若干例程的结合体,各个例程处理不同的IRP,而框架负责在IRP到来时调用相应的例程。利用Driver―Works的驱动程序向导(Driver Wizard)新建一个PCI设备驱动程序框架,然后在这个框架基础上添加必要的实现功能的处理代码,就可以完成整个驱动程序的设计。下面以PCM遥测数据发送卡为例讨论其主要的功能驱动程序例程的实现。

3.1硬件初始化例程

OnStartDevice(KIrp I)参数例程中包含2种系统分配的资源配置信息:原始的资源配置信息(AllocatedRe―sources);转换后的资源配置信息(AllocatedResourcesTranslated)。因为I/O总线和CPU在寻址物理硬件的方式不同,所以存在2种资源列表。从注册表、PCI配置空间和其他地方获取原始的资源值和转换这些值的操作全部由PnP管理器完成,WDM驱动程序需要做的仅是从设备启动IRP中获取这些资源。

3.2 中断服务例程

中断服务例程运行在DIRQL级别上,需要尽可能快地运行。本设计在中断服务例程中,首先判断中断是否自己设备产生的,如果是,则调用一个在DISPATCH_LEV―EL级别上运行的延迟过程调用(DPC)。当中断服务例程完成后,一旦处理器获得DISPATH_LEVEI。运行权,就会运行DPC。中断服务例程流程图如3所示。

3.3 中断延迟调用例程

在延迟调用例程中,判断中断原因如果是DMA中断就启动DMA继续发送。如果是发送通道中断,则判断通道号,并把相应软件FIFO里面的待发送数据传送到硬件FIFO里。在此过程中需要检查在将软件FIFO中的数据写入硬件FIFO中后,如果软件FIFO已被读空,则应禁止通道中断,否则通道中断因为优先级高,会一直于有效状态,导致系统死锁。而在用户程序写软件FIFO的处理函数中,检查通道中断,如果被禁止,则应将新写入软件FIFO的数据读取一部分写入硬件FIFO中,然后开启通道中断。

3.4应用程序与驱动程序的通信例程

DeviceControl(KIrp I)主要用于应用程序与驱动程序之间的通信,如向硬件读写数据以及软件FIFO的操作等。DevcieControl响应用户应用程序DeviceloControl()发送的IRP,根据IOCTL代码来判断调用子处理函数PCI_9054_IOCTL_READ_Handler(I),PCI_9054_IOCTL_WRITE_Handler(I).DEV_IOCTL_TXI_FIFO_WRITE_Handler(I)分别完成对硬件的读写和软件FIFO的写操作。

3.5 DMA传输操作

硬件FIFO半满时产生通道中断,在DPC里,判断是通道中断,则初始化KDmaTransfer,然后调用OnD-maReady();在OnDmaReady()中启动首次DMA传输,传输时发生中断,在DPC中判断是否DMA中断,如果是,则调用Continue()再次启动下次传输,至此全总数据传输完成。其流程图如图4所示。

4 驱动程序编译、调试和安装

当驱动程序编写完成后,必须在DDK环境下进行编译,执行Rebuild aIl命令,编译完成后生成*.sys文件和*.inf文件。调试工具使用Softlce,基本过程如下:

(1)使用Symbol Loader加载驱动程序*.nms文件,然后激活Softlee,设置断点跟踪调试;

(2)用Genint命令产生虚拟中断测试,中断服务例程;

(3)根据需要测试其他功能。驱动程序的安装需要对DriverWizard生成的.INF文件进行修改,安装就是根据INF文件的信息,把编译好的驱动程序拷贝到特定的目录,并修改注册表来注册该驱动程序的参数。

5 结 语

本文编写的驱动程序在以前的驱动程序基础上,在驱动程序里增加一个相当于二级缓存的软件FIFO;有效地提高了数据的响应速度,从而实现更高的数据发送速率;解决了以前在遥测数据发送码速率较高情况下,出现数据帧不连续导致数据接收码同步死锁的现象。本文的驱动程序已成功的应用于所开发的PCM高速遥测数据发送卡,与同期开发的PCM遥测数据接收卡进行长时间的联接调试。实践证明他们可以在10 Mb/s的码速率上可靠工作,而无死锁或数据帧丢失现象。

上一篇:DSP在平行双轮电动车控制系统中的应用 下一篇:SPC3在现场总线智能从站设计中的应用