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