0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TC3xx芯片的Trap詳解(二)之TC3xx芯片的產(chǎn)生

832065824 ? 來源:汽車電子嵌入式 ? 2023-10-27 11:36 ? 次閱讀

前言

前面的文章<>介紹了Trap的類型以及Trap產(chǎn)生后如何定位Trap位置和原因,但是對(duì)于Trap的產(chǎn)生只簡(jiǎn)要闡述了內(nèi)部異常(Exception)時(shí)會(huì)產(chǎn)生Trap,對(duì)于Trap還存在以下的問題:

問題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來清除。

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

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ā)事件。

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

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

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ì)異常處理

在<>一文中我們知道Tricore異常由8大類(Class0 – Class 7)。

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

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

TC3xx的BTV寄存器保存了異常向量表的基地址。異常向量表里面保存了用戶配置的異常處理程序,值得注意的是,Vector OS中以及實(shí)現(xiàn)了Class 1(memory protection errors)Class 6(SYSCALL / TRAP instructions)的異常處理程序(exception handlers)。

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

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

產(chǎn)生Class 1 Trap后OS會(huì)調(diào)用Os_Hal_MemoryTrapEntry:

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

產(chǎn)生Class 6 Trap后OS會(huì)調(diào)用Os_Hal_SysCallTrapEntry:

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

沒有配置Handler的Trap產(chǎn)生后,OS就會(huì)調(diào)用Os_Hal_UnhandledTrapEntry,之后可能會(huì)調(diào)用PanicHooK()或者ProtectionHook():

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

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

測(cè)試了一個(gè)Class 1 Trap,最后也會(huì)走到ProtectionHook:

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

對(duì)于非OS處理的Trap(非Class 1和Class 6)如果配置了自定義的Exception Handler, Trap產(chǎn)生后調(diào)用自定義的Exception Handler。

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

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.

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

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é)。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    英飛凌TC3XX系列多核MCU學(xué)習(xí)筆記(1)

    聲明:本文是在學(xué)習(xí)英飛凌 TC3XX系列多核 MCU 過程中整理的筆記,便于后期復(fù)習(xí)!
    發(fā)表于 09-19 09:54 ?2567次閱讀
    英飛凌<b class='flag-5'>TC3XX</b>系列多核MCU學(xué)習(xí)筆記(1)

    TC3xx芯片的Endinit功能詳解

    上鎖Endinit。那什么是Endinit功能了? -- 本文就來詳細(xì)解鎖TC3xx芯片的Endinit機(jī)制。
    的頭像 發(fā)表于 11-27 09:23 ?2318次閱讀
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>的Endinit功能<b class='flag-5'>詳解</b>

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

    的Tick數(shù)就是基于模塊時(shí)鐘的)。本系列文章就來詳細(xì)介紹TC3xx芯片的時(shí)鐘系統(tǒng)及其具體配置。本文為TC3xx芯片時(shí)鐘系統(tǒng)的鎖相環(huán)PLL詳解
    的頭像 發(fā)表于 12-01 09:37 ?2624次閱讀
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>時(shí)鐘系統(tǒng)的鎖相環(huán)PLL<b class='flag-5'>詳解</b>

    英飛凌TC3xx系列安全管理單元的使用

    本篇文檔主要用來介紹英飛凌基于AURIX-2G TriCore 1.6.2架構(gòu)的 TC3xx系列安全管理單元的使用。
    的頭像 發(fā)表于 12-07 09:29 ?2132次閱讀
    英飛凌<b class='flag-5'>TC3xx</b>系列安全管理單元的使用

    TC3XX寄存器讀寫時(shí)間過長怎么解決?

    我目前在做TC3XX底層代碼優(yōu)化,經(jīng)過之前多次測(cè)試目前可以確定該系列芯片對(duì)單個(gè)寄存器地址的讀寫耗時(shí)超過100us。請(qǐng)問對(duì)于寄存器讀寫耗時(shí)你們官方有沒有確切的文件說明?還有就是既然寄存器讀寫時(shí)間那么長100M的外設(shè)總線時(shí)鐘是否有意義?
    發(fā)表于 01-25 06:56

    TC3xx系列怎么禁用trap

    目前在TC3xx調(diào)試flash讀寫功能,單獨(dú)運(yùn)行flash相關(guān)功能沒有問題,但將flash相關(guān)功能集成到工程中。操作pflash就會(huì)進(jìn)入trap中,查看了一些帖子說是要禁掉trap?請(qǐng)問怎么禁用
    發(fā)表于 01-31 06:21

    TC3xx系列是否支持RTC功能?

    請(qǐng)教各位,TC3xx系列芯片是否支持RTC功能,目前要記錄snapshot的時(shí)間點(diǎn)(年月日時(shí)分秒)。
    發(fā)表于 02-02 07:53

    TC3xx的HSM中有沒有單調(diào)計(jì)數(shù)器?

    你好, 我看到 OPTIGA 有單調(diào)計(jì)數(shù)器,但我在 TC3xx 的 HSM 中確實(shí)找不到單調(diào)計(jì)數(shù)器。 能否確認(rèn)TC3xx的HSM中沒有單調(diào)計(jì)數(shù)器?
    發(fā)表于 03-05 07:56

    TSIM是否支持TC3xx系列在沒有硬件的情況下調(diào)試應(yīng)用程序?

    你好, TSIM是否支持TC3xx系列在沒有硬件的情況下調(diào)試應(yīng)用程序? AURIX TC3xx - Free Entry ToolChain 是否有助于實(shí)現(xiàn)上述目的?
    發(fā)表于 05-17 07:02

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

    ADC模塊了,由于最近開始使用Infineon TC3xx芯片,在配置ADC模塊的時(shí)候發(fā)現(xiàn)ADC模塊對(duì)上提供的標(biāo)準(zhǔn)接口是一樣的,在切換芯片的時(shí)候,IoHwAb_ADC模塊基本不用修改,但是對(duì)于具體
    的頭像 發(fā)表于 01-29 16:45 ?8610次閱讀

    一起學(xué)習(xí)TC3xx芯片的UCB文件

    剛開始使用TC3xx芯片的時(shí)候,程序燒錄進(jìn)去后起不來,一番咨詢后是因?yàn)闆]有配置UCB導(dǎo)致的,然后刷了一個(gè)其他平臺(tái)項(xiàng)目的UCB文件后,程序正常起來了。
    的頭像 發(fā)表于 06-13 09:05 ?4680次閱讀
    一起學(xué)習(xí)<b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>的UCB文件

    AURIX? TC3xx NVM是非易失性存儲(chǔ)器學(xué)習(xí)筆記

    TC3xx芯片最多有6個(gè)內(nèi)核,每個(gè)核有自己的私有的Memory以及共有的Memory。
    發(fā)表于 06-19 09:09 ?7115次閱讀
    AURIX? <b class='flag-5'>TC3xx</b> NVM是非易失性存儲(chǔ)器學(xué)習(xí)筆記

    TC3xx芯片DMU介紹

    AUTOSAR架構(gòu)圖下的Fls模塊對(duì)上(Fee)模塊提供統(tǒng)一的標(biāo)準(zhǔn)接口,但是具體的實(shí)現(xiàn)因不同的芯片而不一樣,Infineon公司的Fls模塊通過操作TC3xx芯片的DMU模塊實(shí)現(xiàn)Fls的功能。在具體
    的頭像 發(fā)表于 08-31 14:10 ?1907次閱讀
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>DMU介紹

    TC3xx芯片的MPU功能詳解

    在前面的文章文章中我們介紹了RH850-U2A的內(nèi)存保護(hù)單元(MPU),了解了MPU的概念以及在RH850-U2A上的具體使用流程,但是對(duì)于TC3xx系列芯片的的MPU功能不甚了解。
    的頭像 發(fā)表于 09-19 11:42 ?2354次閱讀
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>的MPU功能<b class='flag-5'>詳解</b>

    深入解析TC3xx芯片中的SMU模塊應(yīng)用

    TC3xx芯片是德國英飛凌半導(dǎo)體公司推出的汽車級(jí)處理器芯片系列,其中的SMU(System Management Unit)模塊是其重要組成部分之一。SMU模塊在TC3xx
    的頭像 發(fā)表于 03-01 18:08 ?1762次閱讀