更全的杂志信息网

基于Win7+RTX2012的LVDS遥测采集卡驱动程序开发

更新时间:2016-07-05

飞控组件综合测试系统主要用以对某型号产品的飞控组件的电气性能、功能、时序进行全面调试与测试,并隔离、定位和分析故障,完成常温、高低温性能测试、振动和冲击测试。飞控组件与载机、导引头、舵机等通讯,不断发出代表自身工作状态的LVDS遥测信息[1]。测试系统中的LVDS遥测采集卡需实时采集LVDS遥测信息,并存储、显示。Win⁃dows系统实时性差[2],在采集LVDS遥测信息过程中时常会出现丢帧、误码现象。本测试系统要求在有限的、确定的时间内实现一个周期数据的采集。鉴于Windows7良好的人机交互界面、强大的图形显示和数据处理功能[3],并考虑到各类实时系统或开发工具的实时性能、开发难度、软件可移植性、成本等因素,选取RTX2012对Windows 7系统进行硬实时扩展[3],进行LVDS遥测采集卡的RTX驱动程序开发。

1 LVDS遥测采集卡概述

LVDS遥测采集卡主要用于接收飞控组件发出的LVDS遥测信号[4],主要特性有:PXI总线接口;一帧255个遥测数据,每6 ms中断一次,完成一帧数据上传;接收字数可软件设置,数据接收时板卡自动存储,至少可记录十分钟遥测数据,且不丢帧;传输速率32 MB/s;传输距离≥5 m。

LVDS遥测信号只含有1路数据信号和1路时钟信号[5]。本采集卡主要有两大功能模块:LVDS遥测信号收发模块、PXI/CPCI总线接口模块。两个模块以一片FPGA(型号为EP1C12Q240)为核心,利用FPGA实现硬件总体时序逻辑控制、LVDS遥测信号的采集/发送功能。硬件总体设计框架如图1所示。

图1 LVDS遥测采集卡硬件结构框架

2 RTX2012概述

RTX2012(Real Time Extension 2012)是 Interval Zero公司的重要产品,通过对Windows的硬件抽象层进行硬实时扩展[6],设计实现实时任务的管理、调度。它没有对Windows系统进行修改或封装[7],支持部分win32API函数,并拥有一套RTAPI实时函数(中断处理函数为RTAPI独有)[8],方便平台间共享、移植软件程序。

挖掘单表的频繁项集可以采用现有的经典关联规则挖掘算法Apriori算法、Fp-Growth算法,或者使用一些基于经典算法的改进算法。但是本文对挖掘出的频繁相项集的格式做如下规定。频繁项集包括键链表、频繁项集、支持计数三个域,如图2所示。其中键链表指的是包含该项集的键的链表,用于实现项集的虚拟连接。支持计数为键链表中结点的个数。

为了煤炭矿区的可持续发展,在矿区规划编制和决策过程中充分考虑矿区开发可能涉及的环境问题,预防规划实施后可能造成的不良环境影响[1],协调经济与环境保护之间的可持续发展关系,必须进行煤矿区总体开发规划环境影响评价。

RTX2012支持PCI/PCI-E总线上基于消息、线性的中断[12],使得配置Win 7系统信息变得简单;RTX2012可以通过信号量、互斥体以及共享内存等高速IPC对象和同步机制[13],实现RTX与Windows之间数据交换。其定时器时钟频率为100ns,最低定时器周期为 100 μs,并支持实时以太网、USB 通讯[14]。RTX2012支持Microsoft Visual Studio 2010/2008/2005,使得不同版本开发工具开发出的软件程序可以较好兼容。

3 RTX驱动程序开发

利用Visual Studio2010+RTX2012开发RTX驱动,通过VS2010中“RTX Device Driver”选项按向导创建驱动程序框架,添加对应功能函数代码,经编译、运行,最后生成.rtss文件。

3.1 RTX驱动程序基本函数

进入主函数main()中,首选创建互斥体对象,防止其他线程对某一数据进行同时访问。随后,为设备创建控制资源,这些控制资源主要包括以下:Windows指向RTX的事件对象hW2REvent,RTX指向Windows的事件对象hR2WEvent,Windows和RTX之间的共享内存对象hDevCtrlShare,RTX命令接收线程对象hCmdThread。其中每块板卡都将会创建一个命令接收线程,而且接收线程的入口地址相同。如果在创建这些控制资源的过程中,任何一个资源创建失败,则退出主函数;反之,所有控制资源都创建成功,则挂起当前线程,等待用户发出相应的Windows指令,就进入RTX命令接收线程进行相应处理。

本研究利用陕西省卫生和计划生育委员会于2016年3月-6月期间在西安交通大学医学部举办“陕西省全科医生转岗培训班”的机会,向参与培训的医生发放调查问卷,由全科医生独立填答后,调查员现场回收问卷。此次培训面向全省所有乡镇卫生院,即每所乡镇卫生院均派出1名全科医生参加培训,能够确保调研对象的代表性和覆盖率。

DeviceSearch函数用于设备查找;DeviceInit函数用于获取板卡的内存空间、中断号等硬件资源;RtGetBusDataByOffset函数用于访问9054配置空间,获取本地寄存器和存储空间内存与中断信息[16];Rt⁃TranslateBusAddress和RtMapMemory函数将物理地址映射为虚拟地址,用基地址加上偏移量,RTX驱动程序就可读写本地寄存器或内存空间[17];Device⁃Cleanup用于释放板卡硬件资源。RtCreateShared⁃Memory和RtOpenSharedMemory用于创建、打开共享内存;RtCloseHandle用于释放共享内存;DeviceISR函数判断中断来源;DeviceIST函数处理中断;RtAt⁃tachInterruptVectorEx将中断向量与中断服务线程IST、中断服务例程ISR相关联[18],针对中断是否共享、中断电平触发方式、传递上下文等进行对应设置。

3.2 RTX驱动程序功能函数

3.2.1 主函数

利用向导快速创建的RTX驱动程序框架,主要提供了设备管理和中断管理方面的基本函数[15],供开发人员调用以完成对设备的初始化、清除设备资源、中断处理等功能。

3.2.2 初始化

清除设备的函数声明为void CleanU⁃pOneDevRtss(ULONG DevNum);,当初始化失败时或关闭板卡时,需调用该清除设备函数。首先,禁止中断,取消9054和本地地址空间的内存映射,之后,取消中断连接,关闭已经创建的发送Lock、接收Lock句柄以及接收完成事件,最后将板卡打开状态变量RtssDevCtrl[DevNum].bOpened置为FALSE,即可完成板卡资源释放清除功能。

3.2.3 清除设备

板卡初始化函数的声明为int InitializeO⁃neDevRtss(ULONG DevNum);,首先判断板卡是否打开,如果已经打开,则返回-1,表示初始化失败。如果板卡尚未打开,则利用DeviceSearch函数,根据vendorID和deviceID查询PXI总线上所有设备[19],LVDS遥测采集卡vendorID、deviceID依次为0x10b5、0x0104,查询到LVDS遥测卡后,返回设备的bus、slot和ConfigData信息,并进行一系列的板卡硬件资源的初始化任务[20],主要包括对9054寄存器、Local寄存器基地址获取、内存映射。之后,禁止中断,通过PciGetIrq获取中断请求Irq,并通过RtAttachInterrup⁃tVectorEx函数进行中断连接[21]。连接中断成功后,清除中断。随后,利用RtCreateLock函数创建发送时钟、接收时钟,并用RtCreateEvent函数创建接收完成事件通知。如果所有操作都未返回FALSE,则板卡打开状态变量bOpened置为TRUE,板卡初始化成功。否则,初始化失败,并利用CleanUpOneDevRtss(ULONG DevNum)释放已经获得的板卡资源。

3.2.4 中断处理

中断处理函数的声明形式为BOOLEAN RTAPI IST(PVOID pContext);,中断处理流程见图2。

图2 中断处理流程

当有中断产生时,进入DeviceISR判断中断来源和类型,读取中断状态寄存器的值。如果不是本设备中断,就将中断传递到下一个共享该中断号的设备;如果是本设备中断,先禁止中断,再清除中断,并加锁以同步,判断设备是否开始接收数据。当设备没有开始接收时,就设置接收数目,并将数据从硬件底层读取放入驱动缓冲区中,数据接收完成时,就设置接收完成事件,并解锁,允许中断,继续等待下一个中断到来,完成数据接收。其中,将数据从硬件板卡上读到驱动FIFO中的代码实现如下:

3.2.5 命令接收线程

通过共享内存(ShareMemory)和信号量(Sema⁃phore),实时进程RTSS与上层应用程序Win32进程实现数据共享,通信过程如图3所示。

3.3 应用程序接口函数

为了更好实现LVDS遥测卡的各项功能,还需要封装一些用户接口函数,主要包括板卡的打开、关闭、发送数据、停止发送、接收数据、停止接收等。函数封装的具体形式如下:

RTX2012实时子系统采用抢占式优先级[9],分127个线程优先级,RTSS线程优先于所有的Windows线程[10];实时特性达微秒级,保证上下文线程切换,使得在亚微妙范围内的线程优先级更高;完全支持多核CPU,可指定RTX在独占的核上运行;能精确控制IRQ、I/O、内存等[11]

3.4 RTSS进程与Win32进程通信

该函数的声明形式为DWORD WINAPI RtxCmdThread(PVOID param);,用户通过 Windows友好的交互界面下发不同的操作命令,主函数接收命令,并传入RTX命令接收线程。RTX根据接收到Windows发出的不同命令进行相应的处理,这些命令主要包括打开板卡、关闭关闭、开始接收、停止接收操作。具体代码实现如下:

图3 RTSS与Win32通信简图

当RTSS访问共享内存中数据时,向共享内存发送请求访问信号量;共享内存接到请求信号量,向上层Win32发送询问信号量。如果上层应用已经准备好并将数据写入共享内存,在收到询问信号量后,则下发准备好信号量。此时,共享内存再返回可以访问信号量给RTSS,RTSS就可以从共享内存中读取数据。反之,当上层Win32进程需要访问共享内存数据时,过程同理。

科研绩效税收筹划方面:无论是年终一次性发放、按几个月分摊或是按一次性劳务发放的测算,都会大大加重财务人员的工作负担,由于课时费、科研绩效等报酬可能涉及一人多项的问题,财务人员没有精力逐人测算项目负责人各项收入应缴税额是否合理。此外,选定的纳税核算方式如果得不到税务主管部门的认可,还会增加高校的税务风险。因此,能否针对教师各种收入发放时间的特殊性,测算出缴税金额的临界点,为项目负责人提供多个可选的收入发放方案,也是研究方向之一。

我把泡好的茶端到杨公子的面前,一不留神手上一滑把茶水洒到他白净的衣服上,当然我没有顺势坐到他身上,那样目的太明显,我只是装着毫不在意地拿出手绢替他擦干,他把我的手轻轻地推开,温雅地说“不要紧”。他抬头看我的时候,我承认自己被电到了,他的眼神很像这个时代的湖水一样,干净清澈。我很没出息地低下了头,剧情明明不是这样写的,难道男主角不该轻易爱上穿越过去的女主角吗?

广垦畜牧旗下广东红马饲料有限公司年产饲料达50万吨,广东广垦恒之康食品有限公司和东莞市广垦食品有限公司开拓了生猪销售终端市场,“黑加宝”黑土猪优质猪肉专卖店在广州、深圳、东莞达400家。集团还与美国、澳洲、欧洲(丹、法、德、荷)等国外同行合作密切,积极实施“走出去”战略,进一步拓展广垦畜牧海外发展业务。

4 RTX驱动程序测试

对Windows下开发的LVDS遥测采集卡WDM驱动程序进行多次测试,板卡自检结果如图4所示,出现了丢帧、误码的情况。这是因为飞控组件综合测试系统对实时性要求较高,要求每6 ms来一次中断,完成一帧数据256字节的上传,而Windows系统的最小时间粒度仅为10 ms,无法满足实时性要求[22]。相应的利用Windows7+RTX2012开发的RTX驱动程序进行多次重复测试,结果如图5所示,接收到的数据与发送的数据完全吻合,表明设计开发的LVDS遥测采集卡的RTX驱动程序实时、准确、可靠的完成了板卡的数据接收任务,很好地满足了系统对数据接收实时性的要求。

5 结束语

鉴于飞控组件综合测试系统对接收LVDS遥测信息的实时性要求,开发了Win7+RTX2012下的LVDS遥测采集卡的RTX驱动程序。本文详细介绍RTX2012的驱动程序开发要点,并给出了详实的开发过程和方法。经反复测试,该RTX驱动程序运行稳定。目前,所开发的RTX驱动程序已应用于测试设备,能准确、实时地完成LVDS遥测信号接收任务。

图4 Windows驱动程序测试结果

图5 RTX驱动程序测试结果

参考文献:

[1]姜日东,徐志跃.基于PCI总线无时钟LVDS数据采集卡的研究[J].电子设计工程,2013(17):100-102.

[2]杨维,石德乾.基于Windows XP+RTX的火控调试平台软件设计[J].火炮发射与控制学报,2013(4):30-34.

[3]刘婷,蔡鹏飞.Windows7的推广与用户实际应用习惯的磨合[J].电脑编程技巧与维护,2013(2):113-114.

[4]胡建,张红波.某型导弹飞控系统遥测信息接收装置设计[J].电子设计工,2012(13):69-70,75.

[5]邵华,刘亚斌,徐志跃.实时高速LVDS串行数据采集系统的设计[J].计算机测量与控制,2008(3):424-426.

[6]Ardence公司.RTX技术白皮书[S].北京航天捷越(美斯比)科技有限公司,2004.

[7]韩玉芹.基于RTX子系统的导弹试验实时测控系统研发[D].西安:西安电子科技大,2013.

[8]王立红,方华.基于WINDOWS+RTX的舰炮火控测试评估系统开发[J].火力与指挥控制,2012,(11):199-201,205.

[9]董晓明.抢占式动态优先级实时调度算法[J].职业,2012(29):91.

[10]金相男.基于Ardence RTX的1553B驱动程序开发[J].电子设计工程,2014(2):149-151,155.

[11]王伟志,袭著有,王贽.基于RTX实时仿真系统的设计与实现[J].电子设计工程,2013(12):24-27.

[12]张前福,王华闯,许俊平,等.基于RTX的实时处理系统设计[J].微电子学与计算机,2012(8):58-61,65.

[13]张蓓蕾,夏伟杰,周建江.基于RTX的舵机控制系统研制[J].电子科,2011(11):77-79.

[14]黄键,庞亚华,薛顺虎.RTX环境下PCI设备实时驱动的开发[J].计算机工程,2010(20):211-213.

[15]吴佳楠,王伟,周军涛,等.基于RTX实时模块的飞控系统综合测试系统实现[J].测控技术,2010(9):72-76,84.

[16]王道彬,陈怀民,别洪武,等.基于RTX的实时测控系统软件设计[J].火力与指挥控制,2009(8):125-127.

[17]詹金勇.PXI/PCI总线设备驱动程序设计及应用[D].武汉:华中科技大学,2011.

[18]武文峰,张泓.基于RTX的PXI板卡驱动程序开发[J].航空兵器,2012(3):51-54.

[19]付文芳,张萍.RTX下PCI9052驱动程的开发[J].科技广场,2006(8):97-100.

[20]李宏科.一种基于RTX的实时系统的实现[J].装备制造技术,2006(3):55-56,65.

[21]张帆,史彩成.Windows驱动开发技术详解[M].北京:电子工业出版社,2008.

[22]胡浩.基于RTX实时系统ARINC429总线通信驱动开发[J].计算机测量与控制,2015(1):310-312.

王少虎,刘亚斌
《电子设计工程》 2018年第09期
《电子设计工程》2018年第09期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号