<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

    文章

    5051

    瀏覽量

    117828
  • 觸發器
    +關注

    關注

    14

    文章

    1718

    瀏覽量

    60448
  • 中斷處理
    +關注

    關注

    0

    文章

    92

    瀏覽量

    10893
  • 狀態機
    +關注

    關注

    2

    文章

    486

    瀏覽量

    27206
  • 外部中斷
    +關注

    關注

    1

    文章

    131

    瀏覽量

    15647

原文標題:TC3xx芯片的Trap詳解(二)

文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TC3xx芯片的Endinit功能詳解

    上鎖Endinit。那什么是Endinit功能了? -- 本文就來詳細解鎖TC3xx芯片的Endinit機制。
    的頭像 發表于 11-27 09:23 ?832次閱讀
    <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 ?852次閱讀
    <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 ?6348次閱讀

    AURIX? TC3xx NVM是非易失性存儲器學習筆記

    TC3xx芯片最多有6個內核,每個核有自己的私有的Memory以及共有的Memory。
    發表于 06-19 09:09 ?3479次閱讀
    AURIX? <b class='flag-5'>TC3xx</b> NVM是非易失性存儲器學習筆記

    TC3xx芯片Trap功能詳解

    前面介紹了TC3xx一系列的功能與特性,看起來感覺高大上,但是總有一種空中樓閣的感覺:這些復雜的架構、特性、功能在平時好像也用不到呀?
    的頭像 發表于 07-03 09:13 ?2996次閱讀
    <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 ?891次閱讀
    <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 ?1034次閱讀
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>的MPU功能<b class='flag-5'>詳解</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>