基于PCI Express总线的雷达数据记录器驱动程序开发

[09-13 16:53:20]   来源:http://www.88dzw.com  接口定义   阅读:8411

文章摘要:数据传输模块主要包括中断服务例程(ISR)和DPC例程(DpcForIrq)。前者响应LINT#中断和DMA中断,后者启动DMA传输并在数据传完后通知应用程序读取DMA缓存中的数据。因为ISR运行于较高的硬件中断级别[5](DISPATCH_LEVEL),它会阻塞所有的进程,而DpcForIrq运行在软件中断级别,不会阻塞所有进程,所以应该尽量减少ISR的运行时间,而在DpcForIrq中完成耗时的操作。本文在ISR中只判断中断类型,ISR的流程如图3所示:图3 ISR流程图在调试中发现:当PEX8311的LINT#中断信号有效时间超过8us时,会造成死机。但系统繁忙时,计算机会因为中断有效

基于PCI Express总线的雷达数据记录器驱动程序开发,标签:接口技术,微机原理与接口技术,http://www.88dzw.com

  数据传输模块主要包括中断服务例程(ISR)和DPC例程(DpcForIrq)。前者响应LINT#中断和DMA中断,后者启动DMA传输并在数据传完后通知应用程序读取DMA缓存中的数据。因为ISR运行于较高的硬件中断级别[5](DISPATCH_LEVEL),它会阻塞所有的进程,而DpcForIrq运行在软件中断级别,不会阻塞所有进程,所以应该尽量减少ISR的运行时间,而在DpcForIrq中完成耗时的操作。本文在ISR中只判断中断类型,ISR的流程如图3所示:


  图3  ISR流程图

  在调试中发现:当PEX8311的LINT#中断信号有效时间超过8us时,会造成死机。但系统繁忙时,计算机会因为中断有效时间太短而响应不了中断。为解决这一问题,使LINT#的有效时间加长到32us,驱动程序在刚进入ISR时,先禁止PCI中断,LINT#中断便不能传到计算机系统,也就不会造成死机,ISR也有足够的时间读中断寄存器的值进行判断。

  数据传输初始化工作完成后,当有LINT#中断时,系统调用ISR。ISR中先判断是LINT#中断,于是将标志m_LINT设置为true,接着调用IoRequestDpc ()将一个DPC对象放入DPC队列中,最后,中断服务程序退出。

  然后,系统取出DPC对象,在DISPATCH_LEVEL的级别下执行DpcForIrq。因为m_LINT为true,说明是FIFO存满数据,DpcForIrq设置DMA参数并启动DMA读数据。然后DpcForIrq退出。当PEX8311完成DMA传输后会产生DMA中断,中断服务程序按相同的方式执行,此时m_LINT被设置为false,说明是PEX8311完成DMA传输而产生的DMA中断,驱动程序在DpcFor_Irq中用事件通知应用程序读取DMA缓存中的数据写到SCSI硬盘上。如果应用程序不退出,驱动程序会一直按上述方式循环运行。当应用程序退出时,驱动程序关闭中断并释放DMA缓存。

  4.4 驱动程序调试

  本文采用Microsoft随DDK一起发布的调试工具WinDbg调试驱动程序。WinDbg是一种内核模式和用户模式调试器,可以用来分析故障转储文件和执行驱动程序代码。调试需要两台计算机:目标机(雷达数据记录器)和主机(运行Windbg的机器),它们用串口线连接,主机控制和监视目标机上的活动。设置好主机和目标机后,通过WinDbg的命令窗口可以设置断点、观察调试输出信息或分析目标机蓝屏后产生的故障转储文件。

  测试时:外部中断频率可以提高到200Hz以上,每次中断读取512KB数据。通过分析,测试数据完全正确。经反复测试,记录器稳定记录速度可达100MB/S以上。

  由于只采用了两个SCSI硬盘以及系统运行效率的限制,数据记录速度没有达到PEX8311的理论传输速度。若增加SCSI硬盘数量和升级硬件,记录速度还有很大提升空间。

  5 总结

  本文详细的介绍了基于PCI Express总线的雷达数据记录器驱动程序的开发。本文创新点为:针对雷达数据记录器和PEX8311的特点设计了高效的驱动程序,它具有易操作、移植性强的优点。该驱动程序已成功地应用于某雷达原始数据记录器中。


上一页  [1] [2] [3] 


Tag:接口定义接口技术,微机原理与接口技术接口定义
分类导航
最新更新
热门排行