0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TC3xx芯片的Trap详解(二)之TC3xx芯片的产生

832065824 来源:汽车电子嵌入式 2023-10-27 11:36 次阅读

前言

前面的文章<>介绍了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请求(TrapTrigger)或者通过TRAPSET寄存器设置对应的trap bit都能置位对应的TRAPSTAT的状态bit.寄存器TRAPDIS[0:1]位域确定哪些CPUs接收来自TRAPSTAT的trigger flag.默认状态下,Reset复位后所有的CPUs会接收Trap. TRAPSTAT寄存器中的trap flag可以通过写TRAPCLR寄存器的对应bit来清除。

e4305a18-7478-11ee-939d-92fbcf53809c.png

Figure 1: CPU Trap Generation

1.1 Trap特点

. 可以通过ESRx Pin脚触发Safety Alarm来触发CPUTraps.

. CPUTrap触发事件能够被TRAPSTAT状态寄存器捕获。

.可以通过软件产生或者移除CPUTrap触发事件。

. 可以为单个 CPU 禁用或启用单个 CPU Trap触发事件。

e43c744c-7478-11ee-939d-92fbcf53809c.png

e447563c-7478-11ee-939d-92fbcf53809c.png

Figure 2: Monitoring and Reset Pins

1.2 Trap处理

当启用(enable)Trapsource并设置Trap状态标志时生成Trap时,建议在启用(enable) TRAPDISn 中的Trapsource之前通过 TRAPCLR寄存器 清除Trap状态标志。 Trap状态标志可以在启用Trapsource之前设置,只要启用Trapsource,就会导致意外的 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.VectorOS对异常的处理

2.1 异常Exception和中断的关系

异常(Exception,Trap产生):BTV寄存器中保存了异常向量表(Exception Vector)的基地址,异常向量表中保存了所有用户配置和系统自带的异常护理程序(Exception Handlers)。系统产生Trap时(比如非法访问0地址)就会以 “中断抢占“的方式调用对应的异常护理程序(Exception Handlers)。

中断(Interrupt,外部事件产生):BIV寄存器中保存了中断向量表(Interrupt Vector)的基地址。中断向量表中保存了所有用户配置和系统自带的中断护理程序(Interrupt Handlers)。系统产生外部(External)中断事件(比如配置了CAN的接收中断,收到CAN报文)时就会触发中断事件,系统就会调用对应的中断处理程序。

所以,严格意义上来讲,异常和中断没啥关系,只不过异常产生时会以“中断抢占“的方式调用异常处理程序,处理过程和外部事件触发的中断处理过程类似,都是抢占当前Task执行xxxhandlers.

用户调用DisableAllInterrupts API可以禁用/屏蔽所有的中断,但是屏蔽不了Exception产生Trap,NMI(Non-Maskable Interrupt)实际上是一种Trap而不是ISR,只不过NMITrap(Class 7)产生后一定会去调用TrapHandler/Exception Handler, 且过程也是“中断抢占“的形式,看上去就像”不可屏蔽的中断一样“。

2.2 Vector OS对异常处理

在<>一文中我们知道Tricore异常由8大类(Class0 – Class 7)。

e452187e-7478-11ee-939d-92fbcf53809c.png

e452187e-7478-11ee-939d-92fbcf53809c.png

TC3xx的BTV寄存器保存了异常向量表的基地址。异常向量表里面保存了用户配置的异常处理程序,值得注意的是,Vector OS中以及实现了Class 1(memory protection errors)Class 6(SYSCALL / TRAP instructions)的异常处理程序(exception handlers)。

e476764c-7478-11ee-939d-92fbcf53809c.png

e48d6ea6-7478-11ee-939d-92fbcf53809c.png

产生Class 1 Trap后OS会调用Os_Hal_MemoryTrapEntry:

e4918806-7478-11ee-939d-92fbcf53809c.png

产生Class 6 Trap后OS会调用Os_Hal_SysCallTrapEntry:

e4a8c610-7478-11ee-939d-92fbcf53809c.png

没有配置Handler的Trap产生后,OS就会调用Os_Hal_UnhandledTrapEntry,之后可能会调用PanicHooK()或者ProtectionHook():

e4c936fc-7478-11ee-939d-92fbcf53809c.png

e4e033a2-7478-11ee-939d-92fbcf53809c.png

测试了一个Class 1 Trap,最后也会走到ProtectionHook:

e50b4844-7478-11ee-939d-92fbcf53809c.png

对于非OS处理的Trap(非Class 1和Class 6)如果配置了自定义的Exception Handler, Trap产生后调用自定义的Exception Handler。

e51321ea-7478-11ee-939d-92fbcf53809c.png

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.

e526f026-7478-11ee-939d-92fbcf53809c.png

4.NMI的作用

在第2章中我们知道NMI是Trap不是ISR。

如果我们不想通过外部IC触发NMITrap: ESR1 Pin默认接到高电平(因为ESR1低电平有效默认触发NMITrap)。

如果我们想使用NMITrap:比如把TLE35584 SBC的INTPin脚接到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章节。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5032

    浏览量

    117746
  • 触发器
    +关注

    关注

    14

    文章

    1681

    浏览量

    60412
  • 中断处理
    +关注

    关注

    0

    文章

    92

    浏览量

    10891
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27182
  • 外部中断
    +关注

    关注

    1

    文章

    131

    浏览量

    15598

原文标题:TC3xx芯片的Trap详解(二)

文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TC3xx芯片的Endinit功能详解

    上锁Endinit。那什么是Endinit功能了? -- 本文就来详细解锁TC3xx芯片的Endinit机制。
    的头像 发表于 11-27 09:23 823次阅读
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>的Endinit功能<b class='flag-5'>详解</b>

    TC3xx芯片时钟系统的锁相环PLL详解

    中的Tick数就是基于模块时钟的)。本系列文章就来详细介绍TC3xx芯片的时钟系统及其具体配置。本文为TC3xx芯片时钟系统的锁相环PLL详解
    的头像 发表于 12-01 09:37 804次阅读
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>时钟系统的锁相环PLL<b class='flag-5'>详解</b>

    AURIX™ TC3XX如何暂时仅启用/禁用CAN中断?

    你我使用的是 AURIX™ TC3XX。 在 CAN ISR 处理期间,如何暂时仅启用/禁用 CAN 中断?
    发表于 01-18 06:47

    TC3xx SCR功耗应该怎么评估?

    TC3xx SCR处于70kHz active状态,以及CAN WAKE UP也处于active,Tricore都掉电了,这个时候功耗是多少呢?SCR中不同的组件激活状态下,功耗应该怎么评估,有没有
    发表于 01-19 08:28

    tc3xx休眠时mcu pin可以是高阻态吗?如何设置?

    tc3xx,休眠时mcu pin可以是高阻态吗?如何设置?
    发表于 01-19 08:26

    TC3XX寄存器读写时间过长怎么解决?

    我目前在做TC3XX底层代码优化,经过之前多次测试目前可以确定该系列芯片对单个寄存器地址的读写耗时超过100us。请问对于寄存器读写耗时你们官方有没有确切的文件说明?还有就是既然寄存器读写时间那么长100M的外设总线时钟是否有意义?
    发表于 01-25 06:56

    TC3xx系列怎么禁用trap

    目前在TC3xx调试flash读写功能,单独运行flash相关功能没有问题,但将flash相关功能集成到工程中。操作pflash就会进入trap中,查看了一些帖子说是要禁掉trap?请问怎么禁用
    发表于 01-31 06:21

    TC3xx系列是否支持RTC功能?

    请教各位,TC3xx系列芯片是否支持RTC功能,目前要记录snapshot的时间点(年月日时分秒)。
    发表于 02-02 07:53

    GCC和TASKING有什么区别?应该为AURIX™ TC3xx选择什么?

    GCC 和 TASKING 有什么区别? 我应该为 AURIX™ TC3xx 选择什么? 这将如何影响代码的运行?
    发表于 03-01 10:09

    TC3xx的HSM中有没有单调计数器?

    你好, 我看到 OPTIGA 有单调计数器,但我在 TC3xx 的 HSM 中确实找不到单调计数器。 能否确认TC3xx的HSM中没有单调计数器?
    发表于 03-05 07:56

    AUTOSAR MCAL-基于Infineon TC3xx芯片的ADC模块

    过ADC模块了,由于最近开始使用Infineon TC3xx芯片,在配置ADC模块的时候发现ADC模块对上提供的标准接口是一样的,在切换芯片的时候,IoHwAb_ADC模块基本不用修改,但是对于具体
    的头像 发表于 01-29 16:45 6273次阅读

    AURIX™ TC3xx NVM是非易失性存储器学习笔记

    TC3xx芯片最多有6个内核,每个核有自己的私有的Memory以及共有的Memory。
    发表于 06-19 09:09 3379次阅读
    AURIX™ <b class='flag-5'>TC3xx</b> NVM是非易失性存储器学习笔记

    TC3xx芯片Trap功能详解

    前面介绍了TC3xx一系列的功能与特性,看起来感觉高大上,但是总有一种空中楼阁的感觉:这些复杂的架构、特性、功能在平时好像也用不到呀?
    的头像 发表于 07-03 09:13 2964次阅读
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>的<b class='flag-5'>Trap</b>功能<b class='flag-5'>详解</b>

    TC3xx芯片DMU介绍

    AUTOSAR架构图下的Fls模块对上(Fee)模块提供统一的标准接口,但是具体的实现因不同的芯片而不一样,Infineon公司的Fls模块通过操作TC3xx芯片的DMU模块实现Fls的功能。在具体
    的头像 发表于 08-31 14:10 869次阅读
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>DMU介绍

    TC3xx芯片的MPU功能详解

    在前面的文章文章中我们介绍了RH850-U2A的内存保护单元(MPU),了解了MPU的概念以及在RH850-U2A上的具体使用流程,但是对于TC3xx系列芯片的的MPU功能不甚了解。
    的头像 发表于 09-19 11:42 1019次阅读
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>的MPU功能<b class='flag-5'>详解</b>