前言
前面的文章<<TC3xx芯片的Trap详解>>介绍了Trap的类型以及Trap产生后如何定位Trap位置和原因,但是对于Trap的产生只简要阐述了内部异常(Exception)时会产生Trap,对于Trap还存在以下的问题:
问题1: 异常(Exception)和外部中断的区别?
问题2: 什么是NMI,如何产生NMI,NMI有什么用?
问题3: 除了NMI,用户如何主动制造异常?
问题4: 如何配置异常中断?
本文先详细介绍TC3xx芯片的产生,然后再回答上述问题:
参考文档:
1. Infineon-AURIX_TC3xx_Part1-UserManual-v02_00-EN
2. TriCoreTM TC1.6.2 core architecture manual
缩略词
简写 |
全称 |
TCN |
Trap Class Number |
TIN |
Trap Identification Number |
TSR |
Trap Service Router |
NMI |
Non-Maskable Interrupt |
BTV |
Base Trap Vector Table Pointer |
注:本公众号文章中使用了一些第三方工具和文档,若有侵权,请联系作者删除!
正文
1.TC3xx芯片Trap产生
如图1所示,Trap请求(Trap Trigger)或者通过TRAPSET寄存器设置对应的trap bit都能置位对应的TRAPSTAT的状态bit. 寄存器TRAPDIS[0:1]位域确定哪些CPUs接收来自TRAPSTAT的trigger flag.默认状态下,Reset复位后所有的CPUs会接收Trap. TRAPSTAT寄存器中的trap flag可以通过写TRAPCLR寄存器的对应bit来清除。
Figure 1: CPU Trap Generation
1.1 Trap特点
. 可以通过ESRx Pin脚触发Safety Alarm来触发CPU Traps.
. CPU Trap触发事件能够被TRAPSTAT状态寄存器捕获。
. 可以通过软件产生或者移除CPU Trap触发事件。
. 可以为单个 CPU 禁用或启用单个 CPU Trap触发事件。
Figure 2: Monitoring and Reset Pins
1.2 Trap处理
当启用(enable)Trap source并设置Trap状态标志时生成Trap时,建议在启用(enable) TRAPDISn 中的Trap source之前通过 TRAPCLR寄存器 清除Trap状态标志。 Trap状态标志可以在启用Trap source之前设置,只要启用Trap source,就会导致意外的 CPU 陷阱。 Trap处理例程结束时,应清除Trap状态标志。
1.3 Trap寄存器
主要有:
TRAPSTAT: Trap Status Register.
TRAPSET: Trap Set Register.
TRAPCLR: Trap Clear Register.
TRAPDIS0: Trap Disable Register 0.
TRAPDIS1: Trap Disable Register 1.
具体每个寄存器的位域作用参考芯片手册。
2.Vector OS对异常的处理
2.1 异常Exception和中断的关系
异常(Exception,Trap产生): BTV寄存器中保存了异常向量表(Exception Vector)的基地址,异常向量表中保存了所有用户配置和系统自带的异常护理程序(Exception Handlers)。系统产生Trap时(比如非法访问0地址)就会以 “中断抢占 “的方式调用对应的异常护理程序(Exception Handlers)。
中断(Interrupt,外部事件产生): BIV寄存器中保存了中断向量表(Interrupt Vector)的基地址。中断向量表中保存了所有用户配置和系统自带的中断护理程序(Interrupt Handlers)。系统产生外部(External)中断事件(比如配置了CAN的接收中断,收到CAN报文)时就会触发中断事件,系统就会调用对应的中断处理程序。
所以,严格意义上来讲,异常和中断没啥关系,只不过异常产生时会以“中断抢占“的方式调用异常处理程序,处理过程和外部事件触发的中断处理过程类似,都是抢占当前Task执行xxx handlers.
用户调用DisableAllInterrupts API可以禁用/屏蔽所有的中断,但是屏蔽不了Exception产生Trap,NMI(Non-Maskable Interrupt)实际上是一种Trap而不是ISR,只不过NMI Trap(Class 7)产生后一定会去调用Trap Handler/Exception Handler, 且过程也是“中断抢占“的形式,看上去就像”不可屏蔽的中断一样“。
2.2 Vector OS对异常处理
在<<TC3xx芯片的Trap详解>>一文中我们知道Tricore异常由8大类(Class 0 – Class 7)。
TC3xx的BTV寄存器保存了异常向量表的基地址。异常向量表里面保存了用户配置的异常处理程序,值得注意的是,Vector OS中以及实现了Class 1(memory protection errors) 和Class 6(SYSCALL / TRAP instructions) 的异常处理程序(exception handlers)。
产生Class 1 Trap后OS会调用Os_Hal_MemoryTrapEntry:
产生Class 6 Trap后OS会调用Os_Hal_SysCallTrapEntry:
没有配置Handler的Trap产生后,OS就会调用Os_Hal_UnhandledTrapEntry,之后可能会调用PanicHooK()或者ProtectionHook():
测试了一个Class 1 Trap,最后也会走到ProtectionHook:
对于非OS处理的Trap(非Class 1和Class 6)如果配置了自定义的Exception Handler, Trap产生后调用自定义的Exception Handler。
2.3 Infineon提供的关于Trap的接口
void Mcu_SetTrapRequest(const Mcu_TrapRequestType TrapRequestId);
void Mcu_ClearTrapRequest(const Mcu_TrapRequestType TrapRequestId);
typedef enum
{
MCU_TRAP_ESR0 = 0x0U, /* ESR0 trap request */
MCU_TRAP_ESR1 = 0x1U, /* ESR1 trap request */
MCU_TRAP_TRAP2 = 0x2U, /* TRAP2 trap request */
MCU_TRAP_SMU = 0x3U, /* SMU trap request */
MCU_TRAP_INVALID = 0x4U /* Invalid trap request */
} Mcu_TrapRequestType;
3.异常配置
Exception Handler的配置基本和ISR一样,只有两个地方需要注意:
OsIsrInterruptType: 需要选EXCEPTION.
OsIsrCategory: 只能是CATEGORY_1 or CATEGORY_0.
4.NMI的作用
在第2章中我们知道NMI是Trap不是ISR。
如果我们不想通过外部IC触发NMI Trap: ESR1 Pin默认接到高电平(因为ESR1低电平有效默认触发NMI Trap)。
如果我们想使用NMI Trap: 比如把TLE35584 SBC的INT Pin脚接到ESR1,这样35584出现异常的时候,就能通过NMI_Handler快速的获取35584的错误状态。
5.总结
我们通过回答开头的几个问题来结束本文:
问题1:异常(Exception)和外部中断的区别?
答:参考2.1 异常Exception和中断的关系章节。
问题2:什么是NMI,如何产生NMI,NMI有什么用?
答:NMI是Class 7 Trap, 可以通过ESR1 Pin拉低触发NMI, NMI一般用来快速的捕获外部Exception.
问题3:除了NMI,用户如何主动制造异常?
答:可以通过调用Mcu_SetTrapRequest() API来设置Trap.
问题4:如何配置异常中断?
答:参考第3章节。
End
「汽车电子嵌入式在CSDN上同步推出AUTOSAR精进之路专栏,本专栏每个模块完全按实际项目中开发及维护过程来详细介绍。模块核心概念介绍、实际需求描述、实际工程配置、特殊需求介绍及背后原理、实际工程使用经验总结。 目的是让读者看完每一个章节后能理解原理后根据需求完成一个模块的配置或者解决一个问题。」
点击文章最后左下角的阅读原文可以获取更多信息
或者复制如下链接到浏览器获取更多信息
https://blog.csdn.net/qq_36056498/article/details/132125693
注:本公众号文章中使用了一些第三方工具和文档,若有侵权,请联系作者删除!
推荐阅读
汽车电子嵌入式精彩文章汇总第一期:20210530-20230703
AUTOSAR架构下NVM Block连续写及Default Value问题分析
AUTOSAR架构下QM Application如何访问ASIL Application
End
欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!
汽车电子嵌入式
微信扫描二维码,关注我的公众号
原文始发于微信公众号(汽车电子嵌入式):TC3xx芯片的Trap详解(二)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论