APP下载

S12X系列双核单片机的整车控制器CAN结点设计*

2012-06-25李润鑫邱瑞昌刘彪高健

单片机与嵌入式系统应用 2012年7期
关键词:双核中断整车

李润鑫,邱瑞昌,刘彪,2,高健

(1.北京交通大学 电气工程学院,北京 100044;2.清华大学 汽车安全与节能国家重点实验室;3.中国机械工业建设集团有限公司)

李润鑫(硕士生),主要研究方向为汽车电子;邱瑞昌(副教授)主要研究方向为智能检测技术和电力电子与电能变换技术。

引 言

高精度、高速度、高可靠性的混合动力汽车整车控制器是实现整车控制的基础。为了避免车载环境中的电磁干扰,满足闭环控制系统的快速响应,整车控制器与其他控制器的通信采取CAN总线方式。CAN总线位速率最大可达1Mb/s,可以满足整车控制器与外界的高速通信。Freeseal公司MC9S12XE(简称S12X)系列单片机专门用于汽车网络和通用车身应用,具有32位单片机的性能,且具有16位MCU的所有优点和功效。内部的增强型XGATE模块,允许高速数据自主地在单片机外设和内部RAM、I/O端口之间进行数据传输与处理,XGATE内置有一个16位的精简指令集内核,可以对要传输的数据进行预处理并执行复杂的通信协议,易于用C语言进行编程。合理地使用XGATE可以提高整车控制器与外界CAN总线的通信速度,而不增加主CPU(S12XCPU)的中断负荷,从而提高了单片机的数据处理能力。

1 CAN总线硬件接口设计

S12X双核单片机CAN总线结点接口原理图如图1所示。为了增强CAN总线节点的抗干扰能力,S12X单片机的CAN总线收发引脚并不是直接与PCA82C250的TxD和RxD相连,而是通过高速光耦6N137后与PCA82C250相连,这样就很好地实现了总线上各CAN总线结点间的电气隔离。

CANH和CANL引脚与地之间并联了两个电容C1、C2,可以滤除总线上的高频干扰,并具有一定的防电磁辐射的能力。另外,在两根CAN总线输入端与地之间分别接了TVS管D1和D2,当两输入端与地之间出现瞬变干扰时,可起到保护作用。

图1 CAN总线结点接口原理图

2 CAN总线数据处理的基本流程

S12X单片机利用XGATE进行CAN总线数据处理的流程如图2所示(执行顺序从左到右)。当S12X的MSCAN模块收到来自CAN总线上的消息时,XGATE首先执行中断处理程序,其可以对数据进行预处理或独自处理,也可以将数据保存到合适的内存缓冲区,以提交给主CPU(即S12XCPU)进行进一步操作。在XGATE上的代码执行期间,S12XCPU上的代码也一直运行,这样在每100μs接收一帧CAN总线信息的情况下(这也是高速CAN总线的理论最大值),就可以有效地提高程序代码的性能。尤其在对实时性要求较高的工业场合中,如进行混合动力汽车中的CAN总线通信等,有很大的应用价值。这些情况下,闭环控制系统都需要快速的系统响应,以及合理有效地配置好XGATE,可以很好地满足控制系统的需要。MC9S12XE单片机的结构配置在混合动力汽车控制系统的应用中具有很高的性价比。

图2 CAN总线数据处理流程

3 XGATE的典型配置方法

XGATE的应用与编程方法在参考文献[3]和[4]中均有介绍,但基于XGATE的CAN总线的C语言编程大都没有具体说明。这里给出一个含有XGATE的MC9S12XEP100单片机通过ZLG USBCAN接口卡与上位机进行CAN总线通信的例子,XGATE模块编写的基本步骤如下:

①在Code Warrior软件中新建一个双核的工程文件,在main.c和xgate.h中对共享数据段进行初始化,并将CAN1接收中断提交给XGATE处理,然后启动XGATE。

②初始化S12XCPU和CAN1通道,在xgate.cxgate中编写接收中断函数,并对中断向量表进行设置。

③编写与XGATE中CAN1接收中断相对应的主处理器中断函数,使主处理器能够响应来自XGATE的中断请求。

其主要配置方法如下:

① 新建一个双核工程文件,在main.c中对共享数据段进行初始化:

#pragma DATA_SEG SHARED_DATA

volatile int LENGTH,MyDa[8];

volatile unsigned long SAE_ID0;

#pragma DATA_SEG DEFAULT

在prm文件中,SHARED_DATA定义于一块独立的内存块中,并放置于未分页的RAM页中,这样双核运行时均能存取SHARED_DATA块中的变量,实现了数据共享。

“#define CAN0RECEIVE_VEC 0xAA”语句中对XGATE中的CAN1接收中断向量地址进行定义,其为CAN1在XGATE中的接收中断号乘以2,CAN1的接收中断向量号可在xgate.cxgate进行查找。代码如下:

将CAN1的接收中断交由XGATE进行处理,即将XGATE模块的中断请求配置寄存器置1(RQST=1),优先级设置为1(PRIO=1)。

在xgate.h中对共享数据段进行初始化:

#pragma DATA_SEG SHARED_DATA

extern volatile int LENGTH,MyDa[8];

extern volatile unsigned long SAE_ID0;

#pragma pop

② 在xgate.cxgate中编写接收中断函数,代码如下:

XGATE中的中断函数可以对数据进行预处理,如提取整车控制器所感兴趣的CAN总线信息等,然后利用SIF向S12XCPU发出中断请求。在xgate.cxgate中还要对中断向量表进行设置:

{(XGATE_Function)CAN1RECEIVE,0}//对应通道号55

第一个参数为CAN1接收中断函数的入口,第二个参数不使用,可以配置为任意值。

在main.c中初始化CPU12X和CAN1通道:

对主函数进行初始化,可对接收到的感兴趣信息用与PORTB端口的相连发光二极管进行显示。

③ 编写主处理器的中断函数,使主处理器能够响应来自XGATE的中断请求,代码如下:

需要补充说明的是,由于S12XCPU与XGATE之间常用的通信方式是共享资源。由于这两个内核可以独立异步地访问内存及片上外设,就产生了数据完整性的问题,因此在访问共享数据时还要进行特定的操作[3]。

在Code Warrior环境下对含有XGATE的MC9S12XEP100进行调试的界面如图3所示。由于工程使用了双核,故调试器有两套窗口,左侧是S12XCPU,右侧是XGATE。

图3 MC9S12XEP100芯片的双核调试环境

结 语

飞思卡尔S12X系列16位单片机是较流行的车载型单片机,应用广泛,它的众多优势中最有特色的就是XGATE。与以往的单核单片机相比,利用S12X系列可以显著提高整车控制器在CAN总线通信时的性能,使整车控制器的主CPU摆脱耗时的中断处理,能够集中执行与混合动力汽车整车控制策略相关的算法程序。而XGATE的编程实际就是写一组中断服务程序和相关寄存器的设置,可以根据具体情况对本文提供的主要配置函数加以修改。

[1]飞思卡尔半导体.AN3224:Tutorial:Introducing the XGATE Module to Consumer and Industrial Application Developers.Pdf[OL].[2012-03].http://www.Freescale.com.

[2]徐为国.混合动力汽车的发展状况及前景初探[J].汽车科技,2001(6):107-109.

[3]周怡君,毛玉良.基于S12X双核微控制器的染色自动化控制器[J].电子技术应用,2010(36):42-44.

[4]王雷,曾洁,陈少华.等.S12XD系列中XGATE协处理器的原理及应用[J].单片机与嵌入式系统应用,2008(2):42-44.

[5]邵贝贝,龚辉.嵌入式系统中的双核技术[M].北京:北京航空航天大学出版社,2008.

猜你喜欢

双核中断整车
基于六自由度解耦分析的整车悬置设计
全球金融“F20”在此召开!横沥进入“双核”时代
基于FPGA的中断控制器设计*
跟踪导练(二)(5)
千里移防,卫勤保障不中断
新型夹心双核配和物[Zn2(ABTC)(phen)2(H2O)6·2H2O]的合成及其荧光性能
整车低频加速噪声研究及改进
HFF6127G03EV纯电动客车整车开发
三螺旋N-N桥连的双核Co(Ⅲ)配合物的合成、结构和性质
一个双核β-二酮镝(Ⅲ)配合物的超声化学合成、晶体结构和磁性