码流播放卡和码流采集卡的驱动方法

文档序号:6533847阅读:207来源:国知局
专利名称:码流播放卡和码流采集卡的驱动方法
技术领域
本发明涉及数字电视领域中码流传输方法,具体是码流播放卡和码流采集卡的驱动方法。
背景技术
Windows操作系统为了保证系统的安全性和可移植性,限制了应用程序直接操作硬件设备,应用程序只能通过驱动程序来读写和控制设备。有许多自主开发的硬件,要使这些硬件正常地工作在PC机的Windows操作系统下,必须为它们编写Windows驱动程序。
通用的驱动程序开发方法是使用DDK驱动程序开发包,用这种方法开发周期长,程序设计复杂;在一定程度上制约了驱动程序的开发。

发明内容
本发明的目的是克服现有技术的不足,提供一种应用程序访问自主开发的硬件码流播放卡和码流采集卡的驱动方法,其技术方案是码流数据在硬件和应用程序之间的传输采用直接存储器存取DMA传输模式;由驱动程序的中断服务例程ISR判断中断类型,并由中断延迟过程DPC例程分别对各中断类型进行处理;通过应用程序和驱动程序的通信,实现应用程序对硬件的控制。
所述码流数据采用直接存储器存取DMA传输流程如下[1]对软件DriverStudio提供的KDmaTransfer类的实例初始化,选用公共缓冲区的内存传输方式,满足码流数据高速、频繁传输数据的要求;[2]编写KDmaTransfer类实例的回调函数OnDmaReady,回调函数OnDmaReady判断数据传输是否完成;如果数据传输完成,则完成相应的I/O请求包;如果数据传输未完成,则进入StartDMA例程,启动DMA传输;[3]DMA传输完成,DMA中断控制器产生中断,驱动程序的中断服务例程ISR做出响应,判断中断类型为DMA中断,则延迟过程调用DPC例程调用Continue函数,再回到DMA的回调函数OnDmaReady,由回调函数OnDmaReady判断传输完成,结束本次DMA传输。
所述中断类型的判断及处理执行如下步骤 中断类型判断,驱动程序的中断服务例程ISR根据PCI9054芯片的DMA中断寄存器的比特发生变化,判断中断类型是DMA传输完成的中断或是硬件的本地中断;[2]根据所判断的中断类型,中断延迟过程调用DPC例程分别进行如下处理——硬件的本地中断,通知应用程序再次调用驱动程序进入DMA传输流程;——DMA传输完成的中断,则调用Continue函数进而回到DMA的回调函数OnDmaReady,由回调函数OnDmaReady判断出传输已完成就结束本次DMA传输。
所述应用程序和驱动程序通信是在两者之间约定一系列相同的I/O控制代码,应用程序将I/O控制代码命令发给驱动程序,驱动程序根据相应的I/O控制代码对硬件执行相应的操作。
码流播放卡和码流采集卡是自主开发的工作于计算机PCI总线上的硬件。为了实现应用程序对码流播放卡和码流采集卡的操作,本发明为硬件开发驱动程序。驱动程序是硬件和应用程序的接口,应用程序通过驱动程序完成对硬件的访问及操作。本发明解决了码流播放卡和码流采集卡与应用程序的接口问题,使得码流播放卡和码流采集卡能正常工作于计算机的PCI总线上,在计算机上完成码流播放和采集任务。进而使利用计算机进行码流的分析和监测成为可能。针对码流播放卡和码流采集卡要完成的功能,驱动程序按照要求完成了高速的码流传输,在码流速率高达120Mbps时数据传输正确,没有数据丢失现象。


图1本发明码流播放卡应用程序和驱动程序通信示意框2本发明码流采集卡应用程序和驱动程序通信示意框3本发明码流播放卡驱动程序的DMA数据传输和中断处理流程4本发明码流采集卡驱动程序的DMA数据传输和中断处理流程图具体实施方式
下面结合附图详细阐述本发明的具体实施。
本发明的驱动程序包括码流播放卡驱动程序和码流采集卡驱动程序,是计算机应用程序与硬件码流播放卡和码流采集卡的关键接口。两驱动程序采用WDM(Windows DriverModel)驱动程序模型,借助于第三方软件包DriverStudio、在Visual C++6.0环境下进行开发,具有硬件初始化单元,应用程序与驱动程序通信单元,数据传输单元和安装文件。上述各单元协调工作,驱动硬件高速播放和采集码流。
本发明的驱动程序与操作系统配合完成硬件初始化,使硬件成为操作系统可访问的设备。码流播放卡和码流采集卡的驱动程序访问硬件资源采用I/O端口映射方式,首先在设备类中产生类KIoRange对象,其次在设备启动例程中初始化该对象。初始化成功后就可以使用KIoRange类的成员函数inb,inw,ind,outb,outw,outd访问硬件设备。
本发明的应用程序和驱动程序的通信主要实现应用程序对硬件的控制。应用程序每发送一个命令,驱动程序都有对应的函数负责执行两者约定好的操作。应用程序与驱动程序之间依靠I/O控制代码传递命令。驱动程序定义了一系列I/O控制代码,这些定义都包含在驱动程序的头文件中,并且和应用程序完全相同。应用程序使用DeviceIoControl函数将I/O控制代码传递给驱动程序,驱动程序根据控制代码I/O的不同执行对应的操作。I/O控制代码的格式如下#define代码名称CTL_CODE(设备类型,控制代码,控制代码的缓冲区传送机制,请求者访问要求)例如,在码流播放卡中定义一个名为CTRL_AD9851_INIT的I/O控制代码格式应为#define CTRL_AD9851_INIT CTL_CODE(FILE_DEVICE_UNKNOWN,0x807,METHOD_IN_DIRECT,FILE_ANY_ACCESS)当驱动程序收到应用程序发送的这个I/O控制代码时,执行预先约定好的操作,对硬件的AD9851芯片进行配置,使硬件能够产生码流播放时需要的时钟信号。
如图1和图2所示,码流播放卡和码流采集卡的应用程序的命令和驱动程序的操作各自互相对应。
在图1所示的码流播放卡的应用程序和驱动程序的通信过程为[1]应用程序将分析的码流速率传给驱动,发送I/O控制代码,驱动程序则将码流速率对应的控制字写入硬件上的AD9851芯片,由AD9851产生时钟作为码流原始速率的时钟信号;[2]应用程序将用户要发送的码流速率传给驱动,发送I/O控制代码,驱动程序则将码流速率对应的控制字写入播放卡的可编程逻辑器件FPGA;[3]应用程序根据用户选择的输出码流端口发送对应端口的选择I/O控制代码,驱动程序则访问FPGA串/并口相应的选择单元;[4]应用程序建立一个事件,通知驱动程序,驱动程序和应用程序共享事件; 应用程序命令开始播放码流,驱动程序则启动硬件输出码流;[6]应用程序命令停止播放,驱动程序则通知硬件停止输出码流。
在图2所示的码流采集卡应用程序和驱动程序通信过程为[1]应用程序根据用户选择的码流输入端口传送对应端口的选择命令I/O,驱动程序则访问码流采集卡的可编程逻辑器件FPGA串/并口相应的选择单元;[2]应用程序建立一个事件,通知驱动程序,驱动程序和应用程序共享事件;[3]应用程序命令开始采集,驱动程序启动硬件采集码流;[4]应用程序命令停止采集,驱动程序通知硬件停止输出码流。
为了实现高速率码流的播放与采集,本发明的驱动程序使用直接存储器存取DMA工作模式,完成码流数据在硬件和应用程序之间的传输。驱动程序的中断服务例程ISR判断中断类型,并由中断延迟过程调用DPC例程分别对各中断类型进行处理。本发明使用的开发软件DriverStudio为DMA操作提供了KDmaTransfer类用于DMA传输控制。
一.码流播放卡驱动程序的DMA数据传输及中断处理的实施例参见图3,码流播放卡的DMA数据传输步骤如下[1]对开发软件DriverStudio提供的KDmaTransfer类的实例初始化。驱动程序选用“公共缓冲区”的内存传输方式,满足每次DMA传输256KBytes数据以及数据传输频繁的要求;[2]编写KDmaTransfer类实例的回调函数OnDmaReady,由宏DMAREADY_CALLBACK定义,回调函数首先要调用KDmaTransfer类的成员函数BytesRemaining,判断其返回值是否为0,检查数据是否已经传输完成;[3]如果传输已完成,则调用KDmaTransfer类的成员函数Terminate并且完成相应的I/O请求包IRP;如果未完成,则执行数据传输,回调函数通知硬件开始传输数据进入StartDMA例程启动DMA传输,不需要等待数据传输完成,图3中用断划线表示。
当DMA传输完成,DMA中断控制器产生中断,驱动程序的中断服务例程ISR将做出响应,判断中断类型为DMA中断,然后在延迟过程调用DPC例程中调用Continue函数进而回到DMA的回调函数OnDmaReady,判断传输已完成,完成I/O请求包,实现给存储器FIFO发一半容量的数据。
存储器FIFO中的数据不断向端口输出,当数据少于半满时,硬件产生中断信号,此为本地中断,数据传输进入中断处理,如图3中灰色底纹流程所示。先由中断服务例程ISR根据PCI9054芯片的DMA中断寄存器的比特发生变化,判断中断类型是DMA传输完成的中断或是硬件的本地中断;如果是DMA传输完成的中断,则调用Continue函数回到DMA的回调函数OnDmaReady,判断传输已完成并结束本次DMA传输。
如果是硬件的本地中断,中断延迟过程调用DPC例程通知应用程序发送数据,再次调用驱动程序进入上述数据的DMA传输流程;使传输过程循环进行,直到停止播放为止。
二、码流采集卡驱动程序的DMA数据传输及中断处理实施例参见图4,码流采集卡从端口不断接收码流,存储器FIFO中的数据量增加,当存储器FIFO达到半满时产生本地中断,进入中断处理过程,如图4中灰色底纹流程所示。先由中断服务例程ISR根据PCI9054芯片的DMA中断寄存器的比特发生变化,判断中断类型是DMA传输完成的中断或是硬件的本地中断;如果是DMA传输完成的中断,则调用Continue函数回到DMA的回调函数OnDmaReady,判断传输已完成并结束本次DMA传输。
如果是硬件的本地中断,中断延迟过程调用DPC例程通知应用程序接收数据,再次调用驱动程序进入数据的DMA传输流程。
DMA传输步骤如下[1]对开发软件DriverStudio提供的KDmaTransfer类的实例初始化。驱动程序选用“公共缓冲区”的内存传输方式,满足每次DMA传输256KBytes数据以及数据传输频繁的要求;[2]编写KDmaTransfer类实例的回调函数OnDmaReady,由宏DMAREADY_CALLBACK定义,回调函数首先要调用KDmaTransfer类的成员函数BytesRemaining,判断其返回值是否为0,检查数据是否已经传输完成;[3]如果传输已完成,则调用KDmaTransfer类的成员函数Terminate并且完成相应的I/O请求包IRP;如果未完成,则执行数据传输,回调函数通知硬件开始传输数据进入StartDMA例程启动DMA传输,不需要等待数据传输完成,图4中用断划线表示。
当DMA传输完成,DMA中断控制器产生中断,驱动程序的中断服务例程ISR将做出响应,判断中断类型为DMA中断,然后在延迟过程调用DPC例程中调用Continue函数进而回到DMA的回调函数OnDmaReady,判断传输已完成,完成I/O请求包,结束本次DMA传输。
上述DMA传输流程将存储器FIFO中的码流数据传给应用程序,完成码流采集卡数据的传输。存储器FIFO中的数据被读出少于半满;由于硬件从端口不断接收码流,存储器FIFO中的数据经过积累又达到半满,又产生本地中断,使上述数据传输过程循环进行,直到收到应用程序停止采集的命令为止。
码流播放卡和码流采集卡是自主开发的设备,为了使操作系统和本发明的驱动程序连接起来,需要修改驱动程序安装文件。微软定义了一系列全局唯一标识符GUID和设备类名,选择自主开发的设备要加入的类,将驱动程序安装文件中的“Class”和“ClassGUID”修改为微软定义的相应的设备类名和全局唯一标识符GUID;修改设备管理器中设备显示的图标;修改驱动安装文件中的厂商标识符、设备标识符、提供商以及制造商信息。
另外还要修改驱动安装文件中的Manufacturer and Models Sections节中PCI\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd,其中aaaa是厂商标识符,bbbb是设备标识符,cccccccc是设备报告的子系统id,dd是修订号,一般只用到厂商标识符和设备标识符,安装文件中的这些内容要和硬件EEPROM中的一致。码流播放卡驱动安装文件修改为PCI\VEN_10B5&DEV_7820&SUBSYS_00000000&REV_00;码流采集卡驱动安装文件修改为PCI\VEN_10B5&DEV_6820&SUBSYS_00000000&REV_00。使应用程序和驱动程序连接并支持驱动程序正常工作。
权利要求
1.一种码流播放卡和码流采集卡的驱动方法,其特征在于采用直接存储器存取DMA传输模式实现码流数据在硬件和应用程序之间的传输;通过驱动程序的中断服务例程ISR判断中断类型,并由中断延迟过程调用DPC例程分别对各中断类型进行处理;通过应用程序和驱动程序的通信,实现应用程序对硬件的控制;所述采用直接存储器存取DMA传输码流数据的具体过程如下[1]对软件DriverStudio提供的KDmaTransfer类的实例初始化,选用公共缓冲区的内存传输方式,满足码流数据高速、频繁传输数据的要求;[2]编写KDmaTransfer类实例的回调函数OnDmaReady,回调函数OnDmaReady判断数据传输是否完成;如果数据传输完成,则完成相应的I/O请求包;如果数据传输未完成,则进入StartDMA例程,启动DMA传输;[3]DMA传输完成,DMA中断控制器产生中断,驱动程序的中断服务例程ISR做出响应,判断中断类型为DMA中断,则延迟过程调用DPC例程调用Continue函数,再回到DMA的回调函数OnDmaReady,由回调函数OnDmaReady判断传输完成,结束本次DMA传输;所述中断类型的判断及处理的具体步骤如下[1]中断类型判断,驱动程序的中断服务例程ISR根据PCI9054芯片的DMA中断寄存器的比特发生变化,判断中断类型是DMA传输完成的中断或是硬件的本地中断;[2]根据所判断的中断类型,中断延迟过程调用DPC例程分别进行如下处理——硬件的本地中断,通知应用程序再次调用驱动程序进入DMA传输流程;——DMA传输完成的中断,则调用Continue函数进而回到DMA的回调函数OnDmaReady,由回调函数OnDmaReady判断出传输已完成就结束本次DMA传输。
2.根据权利要求1所述的码流播放卡和码流采集卡的驱动方法,其特征在于所述应用程序和驱动程序通信是在两者之间约定一系列相同的I/O控制代码,应用程序将I/O控制代码命令发给驱动程序,驱动程序根据I/O控制代码对硬件执行相应的操作。
全文摘要
一种码流播放卡和码流采集卡的驱动方法,其码流数据在硬件和应用程序之间的传输采用直接存储器存取DMA传输模式;由驱动程序的中断服务例程ISR判断中断类型,并由中断延迟过程调用DPC例程分别对各中断类型进行处理;通过应用程序和驱动程序的通信,实现应用程序对硬件的控制。本发明解决了码流播放卡和码流采集卡和应用程序的接口问题,使得码流播放卡和码流采集卡能正常工作于计算机的PCI总线上,在计算机上完成码流播放和采集任务;进而使利用计算机进行码流的分析和监测成为可能。针对码流播放卡和码流采集卡要完成的功能,驱动程序按照要求完成了高速的码流传输,在码流速率高达120Mbps时数据传输正确,没有数据丢失现象。
文档编号G06F9/00GK1684030SQ20051004180
公开日2005年10月19日 申请日期2005年3月16日 优先权日2005年3月16日
发明者李兵兵, 李乐乐, 杨秀莲, 蔚述明, 黄新平, 王莎莎 申请人:西安电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1