S12X系列双核单片机的整车控制器CAN结点设计
扫描二维码
随时随地手机看文章
摘要:XGATE内核的MC9S12XE系列双核单片机具有数据处理速度快、反应时间短、功耗低等优点,在汽车电子领域有着很好的应用前景。本文介绍了Freescale公司MC9S12X系列双核单片机在混合动力汽车整车控制器中应用的优点,给出了其进行CAN总线通信的硬件接口设计与执行流程。最后给出了其利用协处理器XGATE管理CAN总线通信的典型配置方法。
关键词:整车控制器;CAN;MC9S12XE;XGATE;中断
引言
高精度、高速度、高可靠性的混合动力汽车整车控制器是实现整车控制的基础。为了避免车载环境中的电磁干扰,满足闭环控制系统的快速响应,整车控制器与其他控制器的通信采取CAN总线方式。CAN总线位速率最大可达1 Mb/s,可以满足整车控制器与外界的高速通信。
Freeseal公司MC9S12XE(简称S12X)系列单片机专门用于汽车网络和通用车身应用,具有32位单片机的性能,且具有16位MCU的所有优点和功效。内部的增强型XGATE模块,允许高速数据自主地在单片机外设和内部RAM、I/O端口之间进行数据传输与处理,XGATE内置有一个16位的精简指令集内核,可以对要传输的数据进行预处理并执行复杂的通信协议,易于用C语言进行编程。合理地使用XGATE可以提高整车控制器与外界CAN总线的通信速度,而不增加主CPU(S12X CPU)的中断负荷,从而提高了单片机的数据处理能力。
1 CAN总线硬件接口设计
S12X双核单片机CAN总线结点接口原理图如图1所示。为了增强CAN总线节点的抗干扰能力,S12X单片机的CAN总线收发引脚并不是直接与PCA82C250的TxD和RxD相连,而是通过高速光耦6N137后与PCA82C250相连,这样就很好地实现了总线上各CAN总线结点间的电气隔离。
CANH和CANL引脚与地之间并联了两个电容C1、C2,可以滤除总线上的高频干扰,并具有一定的防电磁辐射的能力。另外,在两根CAN总线输入端与地之间分别接了TVS管D1和D2,当两输入端与地之间出现瞬变干扰时,可起到保护作用。
2 CAN总线数据处理的基本流程
S12X单片机利用XGATE进行CAN总线数据处理的流程如图2所示(执行顺序从左到右)。当S12X的MSCAN模块收到来自CAN总线上的消息时,XGATE首先执行中断处理程序,其可以对数据进行预处理或独自处理,也可以将数据保存到合适的内存缓冲区,以提交给主CPU(即S12X CPU)进行进一步操作。在XGATE上的代码执行期间,S12X CPU上的代码也一直运行,这样在每100μs接收一帧CAN总线信息的情况下(这也是高速CAN总线的理论最大值),就可以有效地提高程序代码的性能。尤其在对实时性要求较高的工业场合中,如进行混合动力汽车中的CAN总线通信等,有很大的应用价值。这些情况下,闭环控制系统都需要快速的系统响应,以及合理有效地配置好XGATE,可以很好地满足控制系统的需要。MC9S12XE单片机的结构配置在混合动力汽车控制系统的应用中具有很高的性价比。
3 XGATE的典型配置方法
XGATE的应用与编程方法在参考文献和中均有介绍,但基于XGATE的CAN总线的C语言编程大都没有具体说明。这里给出一个含有XGATE的
MC9S12XEP100单片机通过ZLG USBCAN接口卡与上位机进行CAN总线通信的例子,XGATE模块编写的基本步骤如下:
①存Code Warrior软件中新建一个双核的工程文件,在main.c和xgate.h中对共享数据段进行初始化,并将CAN1接收中断提交给XGATE处理,然后启动XGATE。
②初始化S12X CPU和CAN1通道,在xgate.cxgate中编写接收中断函数,并对中断向量表进行设置。
③编写与XGATE中CAN1接收中断相对应的主处理器中断函数,使主处理器能够响应来自XGATE的中断请求。
其主要配置方法如下:
①新建一个双核工程义件,在main.c中对共享数据段进行初始化:
在prm文件中,SHARED DATA定义于一块独立的内存块中,并放置于未分贝的RAM页中,这样双核运行时均能存取SHARED_DATA块中的变量,实现了数据共享。
“#definc CAN0RECEIVE_VEC 0xAA”语句中对XGATE中的CAN1接收中断向量地址进行定义,其为CAN1在XGATE中的接收中断号乘以2.CAN1的接收中断向量号可在xgate.cxgate进行查找。代码如下:
将CAN1的接收中断交由XGATE进行处理,即将XGATE模块的中断请求配置寄存器置1(RQST=1),优先级设置为1(PRIO=1)。
在xgate.h中对共享数据段进行初始化:
②在xgate.cxgate中编写接收中断函数,代码如下:
XGATE中的中断函数可以对数据进行预处理,如提取整车控制器所感兴趣的CAN总线信息等,然后利用SIF向S12X CPU发出中断请求。在xgate.cxgate中还要对中断向量表进行设置:
{(XGATE Function)CAN1RECEIVE,0)//对应通道号55
第一个参数为CAN1接收中断函数的入口,第二个参数不使用,可以配置为任意值。
在main.c中初始化CPU12X和CAN1通道:
对主函数进行初始化,可对接收到的感兴趣信息用与PORTB端口的相连发光二极管进行显示。
③编写主处理器的中断函数,使主处理器能够响应来自XGATE的中断请求,代码如下:
CPU12X的CAN1接收中断号可在mc9s12xep100.h进行查询,其定义为:
#define VectorNumber_Vcanlrx 42
需要补充说明的是,由于S12X CPU与XGATE之间常用的通信方式是共享资源。由于这两个内核可以独立异步地访问内存及片上外设,就产生了数据完整性的问题,因此在访问共享数据时还要进行特定的操作。
在Code Warrior环境下对含有XGATE的MC9S12XEP100进行调试的界面如图3所示。由于工程使用了双核,故调试器有两套窗口,左侧是S12X CPU,有侧是XGATE。
结语
飞思卡尔S12X系列16位单片机是较流行的车载型单片机,应用广泛,它的众多优势中最有特色的就是XGATE。与以往的单核单片机相比,利用S12X系列可以显著提高整车控制器在CAN总线通信时的性能,使整车控制器的主CPU摆脱耗时的中断处理,能够集中执行与混合动力汽车整车控制策略相关的算法程序。而XGATE的编程实际就是写一组中断服务程序和相关寄存器的设置,可以根据具体情况对本文提供的主要配置函数加以修改。