APP下载

基于S12X系列双核单片机的Flexray-CAN总线网关的设计与实现

2019-09-23豆海利陈晓飞

现代电子技术 2019年18期
关键词:双核缓冲区中断

豆海利,陈晓飞,杨 寒,冯 源

(1.空军工程大学 基础部,陕西 西安 710051;2.航空工业西安航空计算技术研究所,陕西 西安 710065)

0 引 言

MC9S12X 是美国Freescale 公司推出的双核单片机,内部集成可编程的外设中断协处理器XGATE。XGATE 既可以进行数据运算和处理,也可以实现外设之间、外设与RAM、外设与主CPU 之间的数据传输。双核之间协同工作,能够实现快速的中断响应、实时控制、I/O 功能扩展、通信接口连接和协议处理等,从而为复杂控制系统提供了低功耗、低成本的解决方案[1-3]。

现代无人机平台上广泛采用多种数据总线来实现各级别的数据传输和信息共享。利用车载平台上应用成熟的CAN 和Flexray 总线来构建无人机机载总线系统,可以在满足系统分布式控制、可靠实时数据传输要求的同时,更具有成本优势。

1 Flexray-CAN网关需求分析

本文中的无人机总线系统结构如图1所示。选定Flexray 总线作为第一级总线,采用双通道冗余工作模式,用于连接伺服系统、动力系统、飞控系统、显示系统。2 路 CAN 总线 A 和 B 作为二级总线,连接 4 台远程接口单元(RIU)。一级和二级总线之间通过Flexray-CAN 网关进行连接。

图1 无人机总线系统结构Fig.1 Structure of bus system of UAV

机电系统的各个设备就近与RIU 交联。RIU 是作为机电系统的终端信号处理和控制设备,主要负责传感器、作动器等接口的状态采集和输出控制,通过CAN 总线将信息汇总给网关装置。Flexray-CAN 网关主要根据系统数据交互的需求,负责CAN 和Flexray 总线之间的消息过滤和协议转换,监测并上报CAN 总线和各个RIU的故障状态信息。

本文基于双核单片机MC9S12XEP100 设计并实现了 Flexray-CAN 网关,用于连接 2 路 CAN 和 1 路冗余双通道的Flexray 总线。

2 Flexray-CAN网关的硬件设计

2.1 硬件结构和原理框图

本文设计的Flexray-CAN 网关的硬件结构如图2所示,选用集成5 个MSCAN 模块,并包含I/O 协处理器XGATE 的双核单片机MC9S12XEP100 作为该网关的主控芯片,负责对CAN 和Flexray 控制器的初始化,并控制消息过滤和协议转换、CAN 总线的故障监控等[3-4]。

图2 Flexray-CAN 网关的硬件结构Fig.2 Hardware structure of Flexray-CAN gateway

对CAN 和Flexray 总线接口进行电气隔离设计,可提高通信接口的抗干扰能力。本设计中,选用ADM3053 实现CAN 接口的供电和信号隔离,并集成CAN 收发器。Flexray 总线的每个通道分别使用各自独立的隔离器件ADuM5402 和总线驱动器TJA1080A。这样,在实现Flexray 协议控制器与物理层总线完全隔离的同时,保证双冗余通道之间的接口电路的独立性[5-6]。

2.2 CAN接口硬件实现

本设计中CAN 接口电路图如图3所示。

图3 CAN 接口电路原理图Fig.3 Schematic diagram of CAN interface circuit

ADM3053 根据隔离功能划分为逻辑端(图3左侧)和总线端(图3右侧),两端连接独立的电源和地信号。其中逻辑端与主控芯片MC9S12XEP100 相连,总线端连接必要的终端防护器件,包括共模电感和TVS 管。本设计中,2 路CAN 接口电路中的ADM3503 的逻辑端连接同一个的VIO 和VCC 供电,而总线端分别连接CAN_GND1 和CAN_GND2,以保证接口电路的独立性。

2.3 Flexray控制器的主机接口电路

本设计中主控器MC9S12XEP100 通过外部总线接口(EBI)与 Flexray 控制器 MFR4310 连接,Flexray 控制器的主机接口电路如图4所示。

图4 Flexray 控制器的主机接口电路Fig.4 Host interface circuit of Flexray controller

MFR4310 与MC9S12XEP100 进行主机接口适配时,通过IF_SELx 管脚的高低电平设置,使其工作在异步存储器接口(AMI)模式下。此时通过CE#,WE#,OE#信号来控制AMI 接口的数据交换。

主控器MC9S12XEP100 必须选择具备外部总线接口(EBI)的芯片类别,将其设置为扩展运行模式,并使能外部总线接口。本设计中使用通过片选信号CS0 来选中MFR4310,对应的存储空间范围为0x40_0000~0x7F_FFFF。

2.4 Flexray总线接口电路

TJA1080A 是 Flexray 总线驱动器,支持 1~10 Mb/s的通信速率。本设计中,选用ADuM5402 来实现MFR4310 和TJA1080A 之间信号和供电隔离。TJA1080A 的总线接口BP 和BM 信号通过共模电感和分裂终端电阻后,与Flexray 的物理总线相连[5]。Flexray 总线通道A 接口的电路如图5所示。

图5 Flexray 总线接口电路Fig.5 Interface circuit of Flexray bus

3 网关的双核工作模型

3.1 数据结构定义

数据结构的设计主要包括:消息缓冲区、消息过滤表和网关路由表[7-10]。

1)消息缓冲区。在双核的共享内存中分别为CAN和Flexray 消息创建独立的接收和发送缓冲区,每个缓冲区分为紧急消息缓冲区和普通消息缓冲区。缓冲区采用环形队列结构。

2)消息过滤表。在XGATE 的独享RAM 空间中,分别为CAN 和Flexray 消息创建独立的消息过滤表。当CAN 或Flexray 总线上有消息出现时,XGATE 会响应接收中断,然后以消息ID 为关键字来查找过滤表,并判别紧急消息还是普通消息。

3)网关路由表。在S12X主CPU的独享RAM空间中创建网关路由表。本文以1 包完整的最长CAN 消息(ID占4 B,数据8 B)作为基本组包和拆包单位。定义的网关路由表包括:CAN 消息ID、Flexray消息ID、CAN 消息刷新标志、Flexray消息刷新标志、目的子网编号。

3.2 网关的双核工作流程

本系统中Flexray-CAN 网关作为一级和二级总线之间的互联和交互中心,采用传统的单核控制器来实现,容易出现数据阻塞和消息延迟等问题,消息通信的实时性无法满足要求。本设计中,将网关的处理流程合理安排到S12X 主CPU 和协处理器XGATE 上,网关的双核工作模型如图6所示。

图6 网关的双核工作模型Fig.6 Dual-core working model of gateway

图中,S12X 主 CPU 执行 main()函数并响应 S12X 中断服务程序。main()函数是无限循环处理流程,它始终在查询CAN 和Flexray 的发送和接收消息缓冲区,进一步完成消息解析、协议转换、路由调度以及总线状态监测等功能。XGATE 执行CAN 消息的接收和发送中断、Flexray 消息的接收和发送中断、识别紧急消息等功能。当双核处理器初始化完成后,S12X 主CPU 进入main()函数,始终处于运行状态。而XGATE 是由中断触发执行,当没有中断事件时,XGATE 不执行任何指令,处于低功耗状态。

3.3 网关的双核通信设计

本设计中,采用相互中断和共享内存来实现网关内双核间的通信,如图7所示。

图7 网关的双核通信机制Fig.7 Dual-core communication mechanism of gateway

在S12X 主CPU 和XGATE 的共享内存中分别创建CAN 和Flexray 消息的收发缓冲区。S12X 双核单片机自带8 个硬件信号量,信号量有3 种状态:释放、S12X 主CPU 锁定、XGATE 锁定。两个内核可以独立异步地对消息缓冲区进行读写访问。每个内核在对消息缓冲区进行读写访问之前需要先申请锁定信号量,在访问结束后释放该信号量,从而保证对消息缓冲区访问的数据完整性[11]。

S12X 主CPU 和XGATE 之间可以相互中断,用于双核之间的同步。S12X 主CPU 可以通过置位或清除XGATE 软中断触发寄存器XGSWT 中的相应位来触发或清除这8个中断。XGATE 在中断服务程序末尾,通过SIF 指令向S12X 主CPU 提交中断。

4 网关的软件设计

4.1 S12X主CPU的main()函数

图8是main()函数流程图。首先在共享数据段SHARED_DATA 中定义 CAN 和 Flexray 消息缓冲区,在XGATE 的独享RAM 空间中创建消息过滤表,在S12X主CPU 的独享RAM 空间中创建网关路由表。将它们声明为全局常量,并进行初始化,防止对其修改操作。然后分别对S12X主CPU,XGATE,MSCAN模块和MFR4310协议控制器进行初始化。进入主循环后,程序始终在查询CAN 和Flexray 的发送和接收消息缓冲区,进一步完成消息解析、协议转换、路由调度以及总线状态监测等功能。最后以软中断的方式通知XGATE 来发送消息。

图8 main()函数流程图Fig.8 Flow chart of main()function

4.2 XGATE的初始化和启动

在 S12X 主 CPU 初始化后,执行 SetupXGATE()函数来对XGATE 进行初始化并启动[3-4],操作过程如下:

1)向XGATE 中断向量基地址寄存器XGVBR 中写入XGATE 的中断向量表的起始地址,这样XGATE 响应中断时才能找到对应中断服务程序入口。

2)将需要响应的中断分配给XGATE,并通过中断配置寄存器ILVL[2:0]来设定中断优先级。

3)置XGATE控制寄存器 XGMCTL 中的 XGIE 位为1,来使能 XGATE 对 S12X 主 CPU 的中断。

4)置XGMCTL中的XGE位为1来启动XGATE工作。

4.3 S12X主CPU的中断服务程序

图9为S12X 主CPU 的中断处理流程图。本设计中采用双核的两级中断传递响应的方式,给紧急消息提供了一条及时的网关协议转换通路。XGATE 以中断响应的方式从上一级总线上接收到消息后,判断是紧急消息,就通过SIF 指令向S12X 主CPU 触发中断。然后S12X 主CPU 完成网关的一系列操作后,最后以软中断的方式通知XGATE将封装后的新消息发送到下一级总线。

4.4 协处理器XGATE程序设计

XGATE 的代码保存在.cxgate 文件中,主要内容包括:XGATE 中断服务程序和中断向量表。在创建双核工程时,将XGATE 程序安排在RAM 中运行。这样XGATE 的运行速度比 S12X 主 CPU 快 1 倍,并且不会与S12X 主 CPU 产生“读”竞争[1,12-13]。

图9 S12X 主CPU 的中断处理流程图Fig.9 Flow charts for interrupt processing of S12X main CPU

本设计中,将软中断、MSCAN 和Flexray 接口的接收中断、发送中断、总线错误中断等交由XGATE 负责。XGATE 的工作流程如图10所示。

图10 协处理器工作流程图Fig.10 Flow chart of co-processor operation

5 结 语

当前的Flexray-CAN 网关绝大多数是采用单处理器实现,为了缓解网关工作时可能出现的数据阻塞和延迟问题。笔者在充分考虑双核单片机MC9S12XP100 的S12X 主CPU 和协处理器XGATE 的技术特点、工作原理、数据交互、内核通信等机制的基础上,采用主处理器与协处理器并行协调工作的方式来设计工作流程,实现了一个可以连接2 路CAN 总线和1 路冗余双通道的Flexray 总线的Flexray-CAN 网关。实际应用表明,系统运行稳定可靠,与传统的采用单处理器实现的网关相比,数据处理能力和通信实时性得到了明显改善。

猜你喜欢

双核缓冲区中断
全球金融“F20”在此召开!横沥进入“双核”时代
嫩江重要省界缓冲区水质单因子评价法研究
跟踪导练(二)(5)
千里移防,卫勤保障不中断
新型夹心双核配和物[Zn2(ABTC)(phen)2(H2O)6·2H2O]的合成及其荧光性能
关键链技术缓冲区的确定方法研究
三螺旋N-N桥连的双核Co(Ⅲ)配合物的合成、结构和性质
一个双核β-二酮镝(Ⅲ)配合物的超声化学合成、晶体结构和磁性
AT89C51与中断有关的寄存器功能表解
地理信息系统绘图缓冲区技术设计与实现