汽车电子expert成长之路

本博客发布的个人原创精品----嵌入式系统技术文章,欢迎大家参考学习,并转发分享!

外设使用Tips之MPC574xP系列汽车级MCU的SWT看门狗定时器配置与使用

0
阅读(398) 评论(0)

内容提要

引言

1. SWT的功能概述

2. SWT的工作模式和初始化

3. SWT喂狗

总结


引言


NXP的MPC574xP系列汽车级MCU是业界第一款拿到功能安全ISO-26262 ASIL-D Qulification 证书的汽车级MCU--MPC5643L的新一代产品,主要针对底盘安全和新能源电机控制应用,比如EPS、VCU和BMS主控制器汽车电子产品,其为双核锁步PowerPC e200z4内核,加上端到端的ECC(e2eECC)以及失效收集与处理单元FCCU等安全机制可以实现汽车功能安全ISO-26262 ASIL-D等级。

2.jpg

其片内集成的SWT看门狗为了保证FCCU对功能安全的统一管理,其配置和使用与MPC56xx系列的SWT看门狗有所不同,本文将介绍MPC574XP系列的SWT的功能和具体使用方法以及配置时的注意事项。


1. SWT的功能概述


SWT--Software Watchdog Timer,软件看门狗定时器,是一个递减计数器。作为MPC574xP的片上外设模块,用于防止CPU内核软件跑飞(run away)/死循环陷阱(trap in a loop)或者总线传输失败终止(a bus transaction fails to terminate)造成的系统锁死(system lockup)。一旦SWT使能,用户程序就必须周期性的执行喂狗操作,如果喂狗不及时--未能在SWT定时器溢出之前喂狗,则会产生一个中断或者硬件复位请求,如果该定时器连续2次溢出则总是产生复位请求。

对于以前的MPC56xx系列MCU,SWT的复位请求直接连到(route to) RGM(Reset Generate Module--复位产生模块)直接产生对MCU的硬件复位,而在MPC574xP上,其SWT的溢出事件是作为MCU系统失效连接到FCCU的,通过FCCU的配置决定是否复位MCU:

3.jpg

4.jpg


 所以要让MPC574xP的SWT正常工作,必须正确配置FCCU相应的失效处理。


为了保证MPC574xP的SWT正常工作,主要需要配置的FCCU寄存器是FCCU_NCFS_CFGn非关键失效状态配置寄存器,因为其默认NCFSC14 = 00'b,为无复位响应,必须将其配置为对RGM模块产生短功能复位请求脉冲(NCFSC14 = 01'b)或者长功能复位请求脉冲(NCFSC14 = 10'b)

5.jpg


因此, 典型的MPC574xP系列MCUSWT相关FCCU初始化配置函数如下:

6.jpg

Tips:关于MPC574xP的FCCU使用请参考如下应用笔记:

AN5248:Using FCCU on MPC5744P (REV 0);

AN5259:MPC574xP FCCU Fault Sources (REV 0);


2. SWT的工作模式和初始化


通过SWT的控制寄存器SWT_CR,可知SWT定时器工作有正常模式(WND=0)和窗口模式(WND=1):


正常模式下:只要在SWT定时器溢出(计数器递减至0)之前执行喂狗都可以分为SWT计数器;


窗口模式下:只能在SWT计数器位于SWT_WN(SWT Window Register)SWT窗口寄存器定义的值到SWT定时器溢出(计数器递减至0)之前的这个时间窗口中执行喂狗,其他时间喂狗都会直接产生复位请求;

2.jpg

7.jpg

Tips:

 必须在SWT软件锁打开(SLK=0)时才能才能配置SWT_TO(SWT Time-out Register)和SWT_WN(SWT Window Register),为了解锁需要将0xC520接着0xD928的解锁序列写入到SWT_SR(SWT Service Register)服务寄存器;


将SWT_CR的FRZ位置为1,可以让其计数器在debug时停止计数,从而避免非预期的中断和复位;


在MPC574xP上,SWT的时钟源只有16MHz的IRCOSC,故以此看方便的计算溢出周期寄存器配置值;


如下为典型的SWT初始化函数:

8.jpg


3. SWT喂狗


根据SWT_CR控制寄存器的不同配置,SWT的喂狗分为两种模式:


固定序列模式(SWT_CR.SMD=0): 向SWT_SR服务寄存器写入0xA602和0xB480的序列


随机序列模式(SWT_CR.SMD=1): 向SWT_SR服务寄存器写入由SWT_SK(SWT Service Key Register)服务秘钥寄存器产生的随机序列;

9.jpg


Tips:喂狗时向SWT_SR服务寄存器写入喂狗序列/解锁序列时,请务必使用整个寄存器写,而不要用头文件中定义的位段操作(比如,SWT_0.SR.B.WSC  = 0xA602; SWT_0.SR.B.WSC  = 0xB480;),否则会造成IVOR1异常(至少在S32DS for Power V1.2下);


如下为MPC574xP的典型SWT的喂狗函数:

10.jpg


总结


MPC574xP为了实现更高等级的功能安全,引入了FCCU模块对MCU的片上外设失效和系统功能模块失效进行了统一管理,因此其SWT看门狗定时器在使用时必须配置相应的FCCU模块通道NCFSC14,使能复位请求脉冲,才能让RGM模块在SWT定时器溢出时产生对MCU的复位。


针对本文的介绍,我做了一个MPC574xP的SWT看门狗定时器配置和使用的demo工程--MPC5744P_SWT_DemoPrj.zip(基于S32DS for Power V1.2),我将其分享至如下百度云盘,工大家参考学习:


链接:http://pan.baidu.com/s/1hs9Z3pE

密码:6zw2

胡恩伟

NXP汽车电子FAE

若对本文观点有任何意见和建议欢迎留言指出。

如果喜欢,可以关注本人公众号,阅读更多精彩内容。