论文部分内容阅读
[摘 要]介绍了在Windows系统环境下利用WDF开发CPCI接收设备的驱动程序的步骤。重点研究了板卡多突发中断情况下,实现在系统内核层稳定采集板卡数据的方法。
[关键词]CPCI,驱动程序,WDF
[Abstract]the paper introduces the process of empolderring CPCI receiving device driver using WDF depending Windows operation system. Particularly shows the device causing burst interruptions receives data stably.
[Key words]CPCI, driver,WDF
中图分类号:S343 文献标识码:A 文章编号:1009-914X(2018)24-0274-02
1.引言
数据接收卡是一种广泛应用的测试设备。为了便于板卡利用Windows系统的可视化界面,实时数据存储、分析与显示,需要开发基于Windwos系统的驱动,完成数据接收卡与用户应用程序间的桥接。由于cpci总线具有更好的机械特性和更多的扩展IO,自主研发数据接收卡采用cpci總线接口设计。驱动程序设计选用微软新推出的WDF(Windows Driver Foundation,Windows驱动基础)框架驱动模型,相比较早的WDM(Windows Driver Model),更提高了驱动程序的稳定性。
2.Windows环境下基于cpci总线的采集卡驱动框架设计
设备的驱动程序至少包含两个驱动程序,总线驱动程序和功能驱动程序。总线驱动程序由操作系统提供, 基于CPCI总线的驱动程序是指功能驱动程序,只要完成设备功能。采集卡主要实现数据的采集和指令的发送,因此采集卡的驱动主要实现中断操作及控制指令的读写操作。针对多中断接收卡设计的基于Windows系统的驱动设计,该驱动包括板卡识别模块,地址转换模块,多中断数据处理模块。具体驱动处理流程如下图所示。CPCI驱动程序设计步骤如图1所示。
1)初始化设备,创建设备对象、设备接口和IO队列,主要在DriverEntry例程实现。调用WdfDriverCreate()函数创建WDFDRIVER对象;
2)完成地址映射,将板卡硬件地址转换成Windows系统可以识别与操作的地址,初始化中断与DMA通道,主要在即插即用例程EvtDriverDeviceAdd()中实现;
3)上层应用程序发送控制指令,开中断,启动中断处理过程,主要在分发例程EvtIoDeviceControl()中实现;
4)中断操作,主要在中断例程中实现;
3.遇到问题及解决措施
数据接收卡产生突发多中断脉冲,且不同类型中断脉冲间隔可能会很短,一般的驱动程序设计会出现丢数情况,该驱动采用与硬件设备建立握手机制,动态存储中断类型信息,延迟数据搬移释放中断处理函数的方式,实现了接收卡实时稳定的接收数据。建立握手与中断类型缓存表,延迟数据处理的方法步骤如下所示。
1)建立中断类型缓存表,初始化读计数write_count_n =0与写计数read_ count_n =0;
2)在中断处理函数中接收中断,根据寄存器存储的中断类型将不同的标志位写入中断类型缓存表,相应中断类型的write_count_n加1,并根据中断类型标志位预判是否有其他中断到达;
3)中断类型判读完成后,向固定IO寄存器写入1,后写入0,输出脉冲,与硬件设备完成握手,通知硬件将高电平的中断信号拉低,有效防止驱动程序由于中断处理函数的处理时间较长而未能响应其他中断脉冲信号的情况的发生;
4)启动延迟过程调用,释放中断处理函数,继续接收其他类型中断,提高中断处理效率;
5)根据中断类型缓存表类型在延迟过程调用函数中进行不同数据的搬移,并将相应中断类型的read_count_n加1。根据数据类型置不同类型事件,通知上层应用程序从数据缓存中搬移数据(图2)。
4.结束语
自主研发板卡需要采集多路数据,输出多中断,采用普通驱动设计已经无法满足设计需求,在驱动设计中采用建立握手和中断类型缓存表的方法,实现了在驱动内核层实时稳定的进行数据采集。
参考文献
[1] 尹勇.PCI总线设备开发宝典[M].北京:航空航天大学出版社,2005.
[2] 贾涛,王铁岭.PCI数据采集卡的WDM驱动开发[J].国外电子测量技术,2006(8).
[3] 张帆,史彩成.Windows驱动开发技术详解[M].北京:电子工业出版社,2008.
[4] 郑秀玉,李晓明,李畅,等.基于PCI总线的数据采集卡驱动程序设计与实现[J].电器应用,2007,26(1).
[5] 王磊,鲁新平,李吉成.WinDriver在开发基于PLX9056芯片的PCI设备驱动程序中的应用[J].现代电子技术,2006,29(18).
[关键词]CPCI,驱动程序,WDF
[Abstract]the paper introduces the process of empolderring CPCI receiving device driver using WDF depending Windows operation system. Particularly shows the device causing burst interruptions receives data stably.
[Key words]CPCI, driver,WDF
中图分类号:S343 文献标识码:A 文章编号:1009-914X(2018)24-0274-02
1.引言
数据接收卡是一种广泛应用的测试设备。为了便于板卡利用Windows系统的可视化界面,实时数据存储、分析与显示,需要开发基于Windwos系统的驱动,完成数据接收卡与用户应用程序间的桥接。由于cpci总线具有更好的机械特性和更多的扩展IO,自主研发数据接收卡采用cpci總线接口设计。驱动程序设计选用微软新推出的WDF(Windows Driver Foundation,Windows驱动基础)框架驱动模型,相比较早的WDM(Windows Driver Model),更提高了驱动程序的稳定性。
2.Windows环境下基于cpci总线的采集卡驱动框架设计
设备的驱动程序至少包含两个驱动程序,总线驱动程序和功能驱动程序。总线驱动程序由操作系统提供, 基于CPCI总线的驱动程序是指功能驱动程序,只要完成设备功能。采集卡主要实现数据的采集和指令的发送,因此采集卡的驱动主要实现中断操作及控制指令的读写操作。针对多中断接收卡设计的基于Windows系统的驱动设计,该驱动包括板卡识别模块,地址转换模块,多中断数据处理模块。具体驱动处理流程如下图所示。CPCI驱动程序设计步骤如图1所示。
1)初始化设备,创建设备对象、设备接口和IO队列,主要在DriverEntry例程实现。调用WdfDriverCreate()函数创建WDFDRIVER对象;
2)完成地址映射,将板卡硬件地址转换成Windows系统可以识别与操作的地址,初始化中断与DMA通道,主要在即插即用例程EvtDriverDeviceAdd()中实现;
3)上层应用程序发送控制指令,开中断,启动中断处理过程,主要在分发例程EvtIoDeviceControl()中实现;
4)中断操作,主要在中断例程中实现;
3.遇到问题及解决措施
数据接收卡产生突发多中断脉冲,且不同类型中断脉冲间隔可能会很短,一般的驱动程序设计会出现丢数情况,该驱动采用与硬件设备建立握手机制,动态存储中断类型信息,延迟数据搬移释放中断处理函数的方式,实现了接收卡实时稳定的接收数据。建立握手与中断类型缓存表,延迟数据处理的方法步骤如下所示。
1)建立中断类型缓存表,初始化读计数write_count_n =0与写计数read_ count_n =0;
2)在中断处理函数中接收中断,根据寄存器存储的中断类型将不同的标志位写入中断类型缓存表,相应中断类型的write_count_n加1,并根据中断类型标志位预判是否有其他中断到达;
3)中断类型判读完成后,向固定IO寄存器写入1,后写入0,输出脉冲,与硬件设备完成握手,通知硬件将高电平的中断信号拉低,有效防止驱动程序由于中断处理函数的处理时间较长而未能响应其他中断脉冲信号的情况的发生;
4)启动延迟过程调用,释放中断处理函数,继续接收其他类型中断,提高中断处理效率;
5)根据中断类型缓存表类型在延迟过程调用函数中进行不同数据的搬移,并将相应中断类型的read_count_n加1。根据数据类型置不同类型事件,通知上层应用程序从数据缓存中搬移数据(图2)。
4.结束语
自主研发板卡需要采集多路数据,输出多中断,采用普通驱动设计已经无法满足设计需求,在驱动设计中采用建立握手和中断类型缓存表的方法,实现了在驱动内核层实时稳定的进行数据采集。
参考文献
[1] 尹勇.PCI总线设备开发宝典[M].北京:航空航天大学出版社,2005.
[2] 贾涛,王铁岭.PCI数据采集卡的WDM驱动开发[J].国外电子测量技术,2006(8).
[3] 张帆,史彩成.Windows驱动开发技术详解[M].北京:电子工业出版社,2008.
[4] 郑秀玉,李晓明,李畅,等.基于PCI总线的数据采集卡驱动程序设计与实现[J].电器应用,2007,26(1).
[5] 王磊,鲁新平,李吉成.WinDriver在开发基于PLX9056芯片的PCI设备驱动程序中的应用[J].现代电子技术,2006,29(18).