基于Ardence RTX的1553B驱动程序开发

2014-09-26 03:48金相男
电子设计工程 2014年2期
关键词:驱动程序板卡实时性

金相男

(中国空空导弹研究院 河南 洛阳 471009)

飞行控制组件是空空导弹的重要组成部分。随着空空导弹地位的提高,飞行控制组件的重要性也日益凸显。其作用主要是控制导弹的飞行,并将导弹飞行状态信息传递到其他组件,协作确保导弹按一定轨迹运行并最终正确击中目标。

飞行控制组件的测试系统不仅仅强调结果的正确性,更重要的是要求得到结果的时间,即实时性。实时系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。飞控组件性能测试系统对实时性的要求非常高,要求在确定的、有限的时间内完成一次测试周期,包括大量数据的采集,同时对采集到得数据进行计算,并根据计算的结果输出控制信号,有时还要对数据进行存储和显示。针对测控系统对实时性的要求,从实时性、稳定性和易用性等方面对几种提高系统实时性的方法进行了比较,选取了Ardence RTX(Real-Time Extension)来对Windows系统进行实时扩展。而目前采用的1553B还不支持RTX,所以该设计方案主要针对1553B进行相应的RTX驱动开发。

1 硬件部分

飞控组件测试系统主要包括总控计算机系统(CTS)、遥测计算机系统 (BTS)、信号调理单元 (SCU)等5个部分,1553B就用于总控计算机系统的载机电气接口部分,与其他板卡配合实现简单的火控算法,模拟载机对飞控系统发送飞行任务等。

1553B总线是飞机内部时分制命令/响应多路复用数据总线,是由美国军方专为飞机上设备定制的一种信息传输总线标准。1553B总线系统主要由三部分组成:总线控制器BC、远程终端RT、数据总线Data Bus。工作频率1Mb/s,半双工工作方式。

1553B有3个类型的终端,即总线上唯一被安排为执行建立和启动数据传输任务的终端—总线控制器(BC)、用户子系统到数据总线上的接口—远程终端(RT)、监控总线上信息传输以完成对总线上数据源进行记录和分析的—总线监控器(MT)。远程终端在总线控制器的控制下提取数据或吸收数据,总线监控器本身不参与总线通信。

1553B的实时性好,数据传输速率比一般的通讯网高,总线下率高,而且有特有的方式命令以及差错控制措施(反馈重传纠错方法),确保了数据的完整性。由于其价格相对较高,所以多用于军事而非普通工业。

2 软件部分

飞控系统属于半实物仿真的实时测控系统,实时测控系统需要硬件支持,更依赖软件系统,而在软件中最关键的是实时操作系统,满足一些基本的要求:满足时间期限、多任务、抢占调度以及快速灵活的任务间的通信与同步[2]。由于Windows操作系统在线程调度、中断处理和定时器精度等方面体现出来的弱实时性,所以单纯的利用Windows操作系统已经远远不能满足测控系统对实时性的要求,因此本设计将采用对Windows系统进行实时扩展的方式来满足实时要求。通过对系统结构、开发难易度以及开发成本等方面考虑最终选择了Ardence RTX对Windows进行扩展。

2.1 软件开发环境

RTX (Real Time Extension)程序开发平台选择VisualStudio2005+Ardence RTX7.1。

RTX是美国Ardence公司开发的基于Windows操作系统的硬实时解决方案,其充分利用了Windows良好的可扩展性体系结构,增加了一个实时的子系统RTSS修改和扩展了Windows系统提供的硬件抽象层(HAL,Hardware Abstract Layers)。RTSS提供了实时运行环境和响应的编程接口,其满足:

1)任何时间其优先级都高于Windows。

2)执行实时任务时,能够延迟Windows的中断和错误。

3)执行实时任务时,能够处理实时中断。

RTX的体系结构如图1所示。

RTX被实现为一套库的集合,提供了一套被乘坐RTWinAPI的标准动态库,可以被标准Win32环境和RTSS环境调用。Windows服务控制管理器直接将RTX进程和动态链接库(DLL)的可执行映像装入内核的非分页内存中,确保在运行过程中不被置换出内存,保证了对外部事件响应的确定性。

当运行RTSS线程时,所有Windows控制的中断都被屏蔽掉。当Windows线程请求设置中断屏蔽时,作为实际管理中断屏蔽的软件,HAL确保没有任何RTSS中断被屏蔽。RTSS执行自己的基于抢占的线程调度,并支持128级线程优先级。

Windows提供的计时器的定时周期为1000微秒 (1毫秒)。RT-HAL将其降到了100微秒并且提供了同步(与计时器)的时钟,其最小分辨率为100纳秒。

2.2 硬件环境配置

图1 RTX体系结构Fig.1 RTX structure

因为硬件要工作在RTX环境下,所以要将硬件导入到RTX。首先安装板卡的Windows驱动,在RTX Properties的Hardware标签页下选择设备设置,在Windows设备中右键点击1553B的板卡选择“Add RTX INF Support”,应用即可。在RTX环境下,设备要独占中断号以保证其正常运行。

2.3 驱动程序设计

2.3.1 驱动程序框架

安装好VS2005之后安装RTX7.1,RTX程序工程的建立直接嵌入到Visual Studio的开发环境中,如图2所示,多出了3个选项,选择Rtx Device Driver根据向导即可生成驱动程序框架,RTX的包含文件和库文件的路径已默认设置好,生成的文件类型为*.rtss。

通过RTX驱动生成向导快速生成的PCI设备驱动程序框架提供函数接口有:

1)设备管理函数

使用DeviceSearch()函数通过VenderID和DeviceID在总线上轮询查找设备,若找到则获得设备的总线号。使用DeviceInit()函数获得设备的硬件资源如中断号、内存、输入输出I/O和DMA等。使用DeviceClean()函数清除设备并释放硬件资源。

图2 VisualStudio2005工程选项卡Fig.2 VisualStudio2005 project tab control

2)中断管理函数

当系统产生中断后,程序首先进入DeviceISR,首先判断是不是该设备的中断,如果不是则传到下一个共享该中断号的设备,如果是则进入DeviceIST处理中断,注意,处理时先要禁止该板卡的中断然后查看获得的中断类型,释放信号通知相应的线程进行相应的中断处理,然后清中断并使能板卡中断继续工作。

在中断处理的过程中使用到的函数包括:DisableInterrupts OnChip ()、EnableInterruptsOnChip ()、IsMyInterrups()等。

2.3.2 驱动内部自定义函数

为了满足用户需求,将自定义一些结构体和函数用于对硬件进行初始化、读写配置、寄存器访问、本地控件访问等。该部分函数不向用户开放,仅内部调用。以设置为BC模式时使用的消息结构体为例[5]:

结构体中包含了数据传输方向、传输方式等基本信息,利用结构体将这些信息进行简单封装可使开发更加简洁。

其他相关函数例如:写9054本地寄存器函数void WriteLocalReg_1553B (USHORT offset, UINT32 regVal)、 读PCI配置空间void ReadPciConfigReg_1553B (USHORT offset,UINT32*pRegVal, DATA_WIDTH_MODE dataWidth)、 软件复位芯片void SoftReset_1553B()等。

如果读写数据量比较大的情况下,可以采用DMA传输方式。软件上配合DMA操作需要以下步骤:选择DMA通道;填写DMA模式控制寄存器和传输相关的寄存器包括PCI地址、LOCAL地址、传输数据量大小、传输方向等信息;启动DMA传输。相关的函数例如:DMA控制与配置模块BOOLEAN DMACtrl_1553B (PLX9054_DMA_CMD cmd, UINT32*pData)、初始化设备结构体中描述DMA的元素BOOLEAN DMAInit_1553B ()、DMA 块 读 写 BOOLEAN DMARead WriteBlock_1553B (CH_NUM_1553B chNum, UINT32 dwLocalAddr,UINT8*buffer, BOOL IsLocal2PCI)等。

2.3.3 用户接口函数

软件上需要实现的接口主要包括[6]:打开关闭板卡、工作模式设置、填充相关消息、启动停止发送、读取状态字等,例如int OpenCard_1553B()、int CloseCard_1553B()等。 用户只要完成应用层面的工作,需要关心驱动是如何实现数据传递的。

2.4 RTX驱动开发中设备共享中断问题及解决方法

2.4.1 Windows设备与RTX设备

由于RTX技术说明文档中明确指出RTX设备必须独占中断号,所以是不能与Windows设备共享中断,如果出现中断号冲突,RTX设备的图标会带有叹号表示不能整成使用,只能将与其冲突中断号的Windows设备停用并刷新重启。

2.4.2 RTX设备之间

1)打开RTX Property中的设备管理器,找到RTX下的设备,如果两个或以上的设备共享了中断号,其前面的图标均有叹号表示没有获得有效的中断资源,双击打开,显示了板卡的一些资源信息,设置Disposition,默认的是Device Exclusive表示独占中断资源,需要改成Shared By RTX将该设备设成中断共享的,如图3所示。确定后需更新驱动程序并重启计算机,共享设备可正常工作了;

2)在打开板卡的代码中RtxAttachInterruptsEx()函数有一个参数BOOLEAN ShareVector,设置为TRUE;

3)中断服务例程ISR和中断服务线程IST:

RtAttachInterruptsEx()函数为每个中断向量挂接ISR和IST,在指明了该中断是共享中断时,RTX会将所有共享该中断的ISR组成一个函数链,这样每次发生该中断时都会依据ISR将这个链调用一遍,仅当是本设备产生中断才被处理。进入ISR后首先调用IsMyInterrupt函数读取PLX9054中断寄存器的值,查看DMA中断和Local中断是否被使能,如果都没有表示不是本设备产生的中断,ISR返回PassToNextDevice将该中断传递给链表中的下一个ISR处理,如果是本设备产生的中断,则ISR返回CallInterruptThread进入IST处理。在IST中先要向PLX9054中断寄存器中相应位置零禁止该设备其它中断的产生,然后根据中断类型进行相应处理,最后向相应寄存器中写入数值清中断,再使能设备中断继续工作。流程如图3所示。

图3 共享中断流程图Fig.3 Flow chart of share interrupt

3 结 论

论文研究的1553B驱动程序开发是基于Windows+RTX环境的,实现了在Windows操作系统中嵌入RTX实时子系统,有效地将Windows系统强大的界面开发能力和RTX的实时性能结合起来,并使系统结构简化紧凑,为今后在Windows系统平台下实现实时测控奠定了良好的基础。

[1]任传俊.基于RTX的MATLAB实时仿真技术研究与实现[D].长沙:国防科技大学,2006.

[2]宫厚良.基于RTX和LabVIEW的实时多任务测控系统的研究[D].重庆:重庆大学,2008.

[3]张蕾.基于RTX的全软件数控系统的研究[D].秦皇岛:燕山大学,2006.

[4]Stankovic J A,Ramamritham K.What is predictability for real-time systems[J].Real-Time Systems,1990,2(4):247-254.

[5]胡靖宇.实时软件开发技术的研究与实现 [D].西安:西北工业大学,2002.

[6]张冲,张科,吕梅柏.空空导弹飞控软件实时仿真系统研究[J].系统仿真学报,2008,20(23):6387-6390.

ZHANG Chong,ZHANG Ke,LV Mei-bai.Research of realtime simulation system for air-to-air missile’s flight control software[J].Journal of System Simulation,2008,20 (23):6387-6390.

猜你喜欢
驱动程序板卡实时性
基于PCI9054的多总线通信板卡的研制
基于FPGA的多通道模拟量采集/输出PCI板卡的研制
计算机硬件设备驱动程序分析
航空电子AFDX与AVB传输实时性抗干扰对比
计算机控制系统实时性的提高策略
一种基于光纤数据传输的多板卡软件程序烧写技术
一种通用模拟量及开关量信号采集板卡的设计
一种车载Profibus总线系统的实时性分析
基于MPC8280的CPU单元与内部总线驱动程序设计
妙用鼠标驱动