前言
前面的文章<
問題1:異常(Exception)和外部中斷的區(qū)別?
問題2:什么是NMI,如何產(chǎn)生NMI,NMI有什么用?
問題3:除了NMI,用戶如何主動制造異常?
問題4:如何配置異常中斷?
本文先詳細(xì)介紹TC3xx芯片的產(chǎn)生,然后再回答上述問題:
參考文檔:
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 |
注:本公眾號文章中使用了一些第三方工具和文檔,若有侵權(quán),請聯(lián)系作者刪除!
正文
1.TC3xx芯片Trap產(chǎn)生
如圖1所示,Trap請求(TrapTrigger)或者通過TRAPSET寄存器設(shè)置對應(yīng)的trap bit都能置位對應(yīng)的TRAPSTAT的狀態(tài)bit.寄存器TRAPDIS[0:1]位域確定哪些CPUs接收來自TRAPSTAT的trigger flag.默認(rèn)狀態(tài)下,Reset復(fù)位后所有的CPUs會接收Trap. TRAPSTAT寄存器中的trap flag可以通過寫TRAPCLR寄存器的對應(yīng)bit來清除。
Figure 1: CPU Trap Generation
1.1 Trap特點
. 可以通過ESRx Pin腳觸發(fā)Safety Alarm來觸發(fā)CPUTraps.
. CPUTrap觸發(fā)事件能夠被TRAPSTAT狀態(tài)寄存器捕獲。
.可以通過軟件產(chǎn)生或者移除CPUTrap觸發(fā)事件。
. 可以為單個 CPU 禁用或啟用單個 CPU Trap觸發(fā)事件。
Figure 2: Monitoring and Reset Pins
1.2 Trap處理
當(dāng)啟用(enable)Trapsource并設(shè)置Trap狀態(tài)標(biāo)志時生成Trap時,建議在啟用(enable) TRAPDISn 中的Trapsource之前通過 TRAPCLR寄存器 清除Trap狀態(tài)標(biāo)志。 Trap狀態(tài)標(biāo)志可以在啟用Trapsource之前設(shè)置,只要啟用Trapsource,就會導(dǎo)致意外的 CPU 陷阱。 Trap處理例程結(jié)束時,應(yīng)清除Trap狀態(tài)標(biāo)志。
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和中斷的關(guān)系
異常(Exception,Trap產(chǎn)生):BTV寄存器中保存了異常向量表(Exception Vector)的基地址,異常向量表中保存了所有用戶配置和系統(tǒng)自帶的異常護(hù)理程序(Exception Handlers)。系統(tǒng)產(chǎn)生Trap時(比如非法訪問0地址)就會以 “中斷搶占“的方式調(diào)用對應(yīng)的異常護(hù)理程序(Exception Handlers)。
中斷(Interrupt,外部事件產(chǎn)生):BIV寄存器中保存了中斷向量表(Interrupt Vector)的基地址。中斷向量表中保存了所有用戶配置和系統(tǒng)自帶的中斷護(hù)理程序(Interrupt Handlers)。系統(tǒng)產(chǎn)生外部(External)中斷事件(比如配置了CAN的接收中斷,收到CAN報文)時就會觸發(fā)中斷事件,系統(tǒng)就會調(diào)用對應(yīng)的中斷處理程序。
所以,嚴(yán)格意義上來講,異常和中斷沒啥關(guān)系,只不過異常產(chǎn)生時會以“中斷搶占“的方式調(diào)用異常處理程序,處理過程和外部事件觸發(fā)的中斷處理過程類似,都是搶占當(dāng)前Task執(zhí)行xxxhandlers.
用戶調(diào)用DisableAllInterrupts API可以禁用/屏蔽所有的中斷,但是屏蔽不了Exception產(chǎn)生Trap,NMI(Non-Maskable Interrupt)實際上是一種Trap而不是ISR,只不過NMITrap(Class 7)產(chǎn)生后一定會去調(diào)用TrapHandler/Exception Handler, 且過程也是“中斷搶占“的形式,看上去就像”不可屏蔽的中斷一樣“。
2.2 Vector OS對異常處理
在<
TC3xx的BTV寄存器保存了異常向量表的基地址。異常向量表里面保存了用戶配置的異常處理程序,值得注意的是,Vector OS中以及實現(xiàn)了Class 1(memory protection errors)和Class 6(SYSCALL / TRAP instructions)的異常處理程序(exception handlers)。
產(chǎn)生Class 1 Trap后OS會調(diào)用Os_Hal_MemoryTrapEntry:
產(chǎn)生Class 6 Trap后OS會調(diào)用Os_Hal_SysCallTrapEntry:
沒有配置Handler的Trap產(chǎn)生后,OS就會調(diào)用Os_Hal_UnhandledTrapEntry,之后可能會調(diào)用PanicHooK()或者ProtectionHook():
測試了一個Class 1 Trap,最后也會走到ProtectionHook:
對于非OS處理的Trap(非Class 1和Class 6)如果配置了自定義的Exception Handler, Trap產(chǎn)生后調(diào)用自定義的Exception Handler。
2.3 Infineon提供的關(guān)于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觸發(fā)NMITrap: ESR1 Pin默認(rèn)接到高電平(因為ESR1低電平有效默認(rèn)觸發(fā)NMITrap)。
如果我們想使用NMITrap:比如把TLE35584 SBC的INTPin腳接到ESR1,這樣35584出現(xiàn)異常的時候,就能通過NMI_Handler快速的獲取35584的錯誤狀態(tài)。
5.總結(jié)
我們通過回答開頭的幾個問題來結(jié)束本文:
問題1:異常(Exception)和外部中斷的區(qū)別?
答:參考2.1異常Exception和中斷的關(guān)系章節(jié)。
問題2:什么是NMI,如何產(chǎn)生NMI,NMI有什么用?
答:NMI是Class 7 Trap,可以通過ESR1 Pin拉低觸發(fā)NMI, NMI一般用來快速的捕獲外部Exception.
問題3:除了NMI,用戶如何主動制造異常?
答:可以通過調(diào)用Mcu_SetTrapRequest()API來設(shè)置Trap.
問題4:如何配置異常中斷?
答:參考第3章節(jié)。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124442 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2039瀏覽量
62139 -
中斷處理
+關(guān)注
關(guān)注
0文章
94瀏覽量
11255 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
493瀏覽量
28235 -
外部中斷
+關(guān)注
關(guān)注
1文章
133瀏覽量
16201
原文標(biāo)題:TC3xx芯片的Trap詳解(二)
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
英飛凌TC3XX系列多核MCU學(xué)習(xí)筆記(1)

TC3xx芯片時鐘系統(tǒng)的鎖相環(huán)PLL詳解

TC3XX寄存器讀寫時間過長怎么解決?
TC3xx系列怎么禁用trap?
TC3xx的HSM中有沒有單調(diào)計數(shù)器?
TSIM是否支持TC3xx系列在沒有硬件的情況下調(diào)試應(yīng)用程序?
AUTOSAR MCAL-基于Infineon TC3xx芯片的ADC模塊
AURIX? TC3xx NVM是非易失性存儲器學(xué)習(xí)筆記

TC3xx芯片DMU介紹

TC3xx芯片的MPU功能詳解

評論