嵌入式设计应用
近年来,ГOCT18977、1553B和ARINC429已成为我军机载设备间、飞机与导弹间数据通信所广泛采用的总线标准。这种多种总线标准并存的情况带来一系列问题:一是在地面维护过程中,需要测试不同总线标准的数据;二是不同总线标准之间的协议转换。因此如何实现地面检测设备与多种不同总线标准机载设备之间的通信以及不同总线标准之间的协议转换成为必须解决的问题。本文针对某型飞机加挂某型导弹的实际应用,设计了一个基于μC/OS-Ⅱ的1553B和ARINC429总线实时协议转换系统。
1 协议转换系统的需求分析和设计原则
1553B和ARINC429总线实时协议转换系统是某型飞机发射架的一部分,主要完成以下功能:(1)完成对导弹加温、准备和发射三个阶段的实时控制;(2)在导弹准备和发射阶段,把1553B格式的飞行任务转换成ARINC429格式,并发送给导弹; (3)在导弹准备和发射阶段,控制电源模块输出4路直流给导引头;(4)完成对导弹故障的实时检测,并上报给飞机。
显然,该系统是一个典型的航空电子设备,因此,实时性和可靠性将是系统设计的基本要求。同样,简单化、模块化也是设计中要遵循的思想。具体来说,设计时应遵循下列几个原则:(1)实时性强;(2)可靠性高;(3)具有一定的扩展性;(4)维修性好;(5)通用性好。
2 1553B和ARINC429协议分析
2.1 1553B总线协议[1-3]
1553B总线的正式名称为“时分制指令/响应式多路传输数据总线”(Time Division Command/ Response Multiplex Data Bus),是目前世界军用飞机中应用最广泛的数据传输系统。1553B高度的可靠性和灵活性使它在机载、舰载以及地面武器设备中得到了广泛的应用,并逐渐应用到民用领域。
1553B总线的基本操作要求是:总线系统信息传输的控制权唯一归总线控制器所有;总线系统的操作应是指令/响应型的异步操作;数据总线上的信息传输应以半双工方式进行;数据总线上的信息流应由消息组成;总线系统应具有方式控制的能力。
1553B总线上只有3种字格式,分别是指令字、数据字和状态字,如图1所示。一个字的结构为“同步头+16位数据位+奇偶校验位”,总共20个位时。
1553B总线上的消息格式数量有限,可以分为非广播消息和广播消息两大类。非广播消息有6种消息格式,广播消息有4种格式,除了这10种消息格式之外,不应使用任何别的消息格式。
2.2 ARINC429总线协议[4-6]
ARINC429总线是ARINC为航空电子系统之间进行数据传输而定义的航空工业标准,其正式名称为MARK33数字式信息传输系统DITS(Digital Information Transfer System)技术标准,信号形式同ГОСТ18977。ARINC429 在国内被称为HB6096-86 数字信息传输系统。
ARINC429总线的一个数据字有32位,它们被分为5段,采用2的补码小数记法编码(BNR)或ISO5 号字母表数字子集编码(BCD),其数据格式如表1所示。
ARINC429的传输协议十分简单,是点对点的传输协议,解决了原来419 规范的许多矛盾和冲突。根据规范,其数字信息通过一对单向、差分耦合、双绞屏蔽线传输,属于串行通信,实现32比特字传输格式。
3 协议转换系统的硬件设计
3.1 总体设计方案和结构框图
综合协议转换系统的功能需求及1553B和ARINC429的协议分析,提出如下设计方案:(1)硬件环境:采用“MCU+FPGA+外围芯片”方案构建硬件系统,MCU采用TI 公司的DSP TMS320LF2407实现;FPGA采用Altera公司的Stratix FPGA军用温度级产品EP1S60F1020I6实现;外围芯片主要包括1553B协议芯片BU61580等。(2)软件环境:将嵌入式实时内核μC/OS-II移植到DSP控制器TMS320LF2407上从而构建一个低成本的通用嵌入式实时软件平台;基于DSP集成化软件开发环境CCS,用C语言和汇编语言进行软件开发。
1553B和ARINC429总线实时协议转换系统实际上是一个嵌入式微型计算机应用系统,由控制器模块、接口威廉希尔官方网站 模块和电源模块三部分组成,其总体结构如图2所示。
控制器模块是协议转换系统的核心,用于完成对导弹的实时控制、逻辑判断、总线转换以及串口通信等功能;接口威廉希尔官方网站 模块是协议转换系统的外部接口(飞机、导弹接口)与控制器模块之间的桥梁,其功能是信号隔离、电平转换和功率信号时序控制等;电源模块包括两个部分,一部分用于产生协议转换系统本身工作所需电源,另一部分用于产生导引头工作所需电源。
3.2 控制器模块的设计
控制器模块的结构原理图如图3所示。整个控制器模块主要由控制器、422总线通信威廉希尔官方网站 、1553B协议转换威廉希尔官方网站 、隔离变压器威廉希尔官方网站 、FPGA控制逻辑及ARINC429电平转换威廉希尔官方网站 等组成。
FPGA控制逻辑用Verilog HDL在QuartusII环境下编程实现,主要完成以下功能:(1)产生对1553B协议芯片BU61580操作的所有控制信号;(2)产生对ARINC429接收模块和ARINC429发送模块操作的所有控制信号; (3)为1553B协议芯片BU61580、ARINC429接收模块和ARINC429发送模块产生各自的工作时钟,其中分频数N可通过软件进行赋值,实现可编程时钟模块;(4)建立FIFO模块,在数据传输中缓冲和存储数据;(5)实现ARINC429信号接收和发送,包括同步处理、字头检验、奇偶校验、串并转换和并串转换等。
4 实时操作系统的移植、构建和优化
将嵌入式实时内核μC/OS-II移植到DSP控制器TMS320LF2407上构建一个低成本的通用嵌入式实时软件平台,以进行系统软件的开发。引入μC/OS-II实时内核的目的是要以很小的系统代价,大大降低DSP系统软件开发的难度,同时使系统的实时性得到保证。
4.1 μC/OS-II移植的可行性分析
所谓移植,就是使一个实时内核能在某个处理器上运行[7]。因为C语言是跨平台的,各种编译器都支持,所以μC/OS-II和其他嵌入式操作系统一样,和处理器无关的代码主要用C语言写。虽然μC/OS-II系统的大部分源代码都是用C 语言实现的,但仍需要使用X86 汇编语言来完成一些与处理器、寄存器相关的代码[8]。这是因为μC/OS-II在读写处理器寄存器时只能通过汇编语言来实现。
要顺利移植μC/OS-II,处理器必须满足以下要求:(1)处理器的C编译器能产生重入代码,利用C语言就可以打开和关闭中断;(2)处理器支持中断,并能产生定时中断;(3)处理器支持足够的RAM(可能是几千字节)作为数据存储的硬件堆栈; (4)处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。
显然,采用的控制器TMS320LF2407及编译器CCS均可满足要求,因此完全可以在TMS320LF2407上移植嵌入式实时内核μC/OS-II。
4.2 μC/OS-II的代码结构和移植步骤
μC/OS-II的代码结构以及它与硬件的关系如图4所示,其全部代码可以分为三个部分[9]:
(1)与处理器无关的代码。包括\SOFTWAREμC/OS-IISOURCE目录下的文件,主要提供μC/OS-II的系统服务、任务管理、任务间通信与内存管理等。这部分代码可完全移植到处理器上。
(2)与应用相关的代码。包括OS_CFG.H和INCLUDES.H头文件。OS_CFG.H文件包含μC/OS-II的初始化配置项,由一系列#define constant语句构成。INCLUDES.H是一个头文件,在所有.C文件的第一行被包含。用户可以通过编辑INCLUDES.H来增加自己的头文件,但是用户的头文件必须添加在头文件列表的最后。
(3) 与处理器相关的代码。即OS_CPU.H、OS_CPU_A.ASM及OS_CPU_C.C,绝大部分的移植工作都集中在这里。
移植μC/OS-II的具体步骤是:(1)在OS_CPU.H中设置一个常量来标识堆栈增长方向;(2)在OS_CPU.H中声明几个用于开关中断和任务切换的宏;(3)在OS_CPU.H中针对具体处理器的字长重新定义一系列数据类型;(4)在OS_CPU_A.ASM中改写4个汇编语言的函数:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR();(5)在OS_CPU_C.C中用C 语言重新编写6个简单的C函数: OSTaskStk Init()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskStatHook()和OSTimeTick Hook();(6)修改主头文件INCLUDES.H,将上面的三个文件和其他的头文件加入。
4.3 实时操作系统软件平台的优化
移植后的实时操作系统可根据具体硬件和性能需求进行优化,以获得更高的执行效率。
(1) 裁剪[9]
μC/OS-II具有源代码开放的优点,是一个可裁剪的操作系统。在实际应用时可根据需要对源代码进行取舍,去掉不需要的服务以及不需要的变量和函数,甚至可以根据需要改写相关函数。代码的削减可通过设置OS_CFG.H中的#define OS_×××_EN为0来实现。本系统中取消了不需要的邮箱服务、任务挂起等功能,使得代码非常简练,可靠性更好。此外,在μC/OS-II的源代码中,函数执行中有许多条件判断,作用是防止参数的错误传递。作为通用系统,这些条件判断是完全必要的,避免出现错误时系统崩溃。但作为具体的应用,只要在程序设计时保证参数传递的正确性,完全可以不用条件判断,所以在本系统程序设计时,取消了全部的条件判断,从而提高了函数的执行速度。
(2) 改进内存管理
μC/OS-II在内存管理上显得过于简单,其任务栈空间和内存分区的创建采用了定义全局数组的方法,即定义一维或二维的全局数组,在创建任务或内存分区时,将数组名作为内存地址指针传递给生成函数。这样实现起来固然简单,但是不够灵活有效。
编译器会将全局数组作为未初始化的全局变量,放到应用程序映像的数据段。数组大小是固定的,生成映像后不可能在使用中动态地改变。对于任务栈空间来说,数组定义大了会造成内存浪费,定义小了任务栈溢出会造成系统崩溃。对于内存分区,在不知道系统初始化后给用户留下了多少自由内存空间的情况下,很难定义内存分区所用数组的大小。可见,利用全局数组来分配内存空间是不合理的。另外,目前的μC/OS-II只支持固定大小的内存分区,容易造成内存浪费。所以应该改进以支持可变大小的内存分区。
因此,在本系统中采用如下方法来对内存进行管理:①系统初始化时,正确安排代码段和数据段的位置,从而确定用户自由空间的起始地址;②用目标板(LF2407)内存最高端地址减去起始地址得到用户自由空间的大小;③在自用空间中建立和使用内存分区,分配好任务堆栈、事件控制块和消息队列等各自内存大小。
(3) 堆栈的使用和管理
在μC/OS-II中,各任务的堆栈在逻辑上是相互独立的,这样在分配每一个任务堆栈区的大小时,不但要考虑本任务中的局部变量和函数嵌套所需要的堆栈空间,还要考虑系统中所可能发生的最大层数的中断嵌套所需的堆栈空间,从而要占用较多的RAM空间,在系统中有多个任务同时存在时尤其严重。如果对此考虑不足,则可能会出现运行中的任务堆栈空间不足、溢出的情形,从而导致系统崩溃。
针对上述问题,本系统采用以下方法使用和管理堆栈:各任务栈相互分离,且不考虑中断使用;另外分配一个工作栈,可满足所需堆栈空间最大的任务在最大可能层数的中断嵌套下使用。运行时,将当前任务的任务堆栈内容拷贝至工作栈中,在工作栈中运行;当发生任务切换时,先将工作栈中的有用内容保存到当前任务栈,然后将待运行任务的任务栈调入工作栈,在工作栈中运行。在此过程中,堆栈指针始终指在工作栈区域内。
5 协议转换系统的软件设计
协议转换系统是一个多任务系统,并且各个任务之间很可能同时进行,其整个软件按功能可以分成两个模块:导弹加温、准备工作子程序和导弹发射子程序。流程图分别如图5、图6所示。
6 协议转换系统的测试和验证
系统参数和设置如下:晶振频率为11 059.2kHz,锁相环(PLL)倍增器值设置为4,存储器加速开启,中断类型为IRQ中断。在此条件下,其中断响应时间即为从中断发生起,到执行中断处理程序的第一条指令所用的时间,约为0.76μs;飞机控制指令发出到导弹动作实际执行,最大时间延迟约为1.43μs,系统实时性完全符合要求。将该协议转换系统安装在发射架内,进行实际的联机验证,实际运行结果表明,能有效实现参数、数据的传输和转换以及飞机对导弹的实时控制等。
1553B和ARINC429总线实时协议转换系统硬件部分采用“MCU+FPGA+外围芯片”进行构建;软件部分是将嵌入式实时内核μC/OS-II移植到DSP控制器上从而构建一个低成本的通用嵌入式实时软件平台,基于此平台以C语言和汇编语言在DSP集成化软件开发环境CCS上加以实现。协议转换系统在满足实时性和可靠性要求的前提下,软、硬件尽可能地简化;在结构上尽量模块化,同时便于监测、安装、维护和检修。为了验证协议转换系统的功能和性能是否完全符合要求,对协议转换系统进行了测试,并最终实现了联机验证。结果表明,该系统完全符合设计要求,完成了系统所应具有的所有功能。
全部0条评论
快来发表一下你的评论吧 !