精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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章節。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120008
  • 觸發器
    +關注

    關注

    14

    文章

    1996

    瀏覽量

    61052
  • 中斷處理
    +關注

    關注

    0

    文章

    94

    瀏覽量

    10959
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27478
  • 外部中斷
    +關注

    關注

    1

    文章

    131

    瀏覽量

    15801

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    TC3xx芯片的Endinit功能詳解

    上鎖Endinit。那什么是Endinit功能了? -- 本文就來詳細解鎖TC3xx芯片的Endinit機制。
    的頭像 發表于 11-27 09:23 ?2093次閱讀
    <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 ?2373次閱讀
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>時鐘系統的鎖相環PLL<b class='flag-5'>詳解</b>

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

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

    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

    TC3xx的HSM中有沒有單調計數器?

    你好, 我看到 OPTIGA 有單調計數器,但我在 TC3xx 的 HSM 中確實找不到單調計數器。 能否確認TC3xx的HSM中沒有單調計數器?
    發表于 03-05 07:56

    TSIM是否支持TC3xx系列在沒有硬件的情況下調試應用程序?

    你好, TSIM是否支持TC3xx系列在沒有硬件的情況下調試應用程序? AURIX TC3xx - Free Entry ToolChain 是否有助于實現上述目的?
    發表于 05-17 07:02

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

    ADC模塊了,由于最近開始使用Infineon TC3xx芯片,在配置ADC模塊的時候發現ADC模塊對上提供的標準接口是一樣的,在切換芯片的時候,IoHwAb_ADC模塊基本不用修改,但是對于具體
    的頭像 發表于 01-29 16:45 ?8265次閱讀

    一起學習TC3xx芯片的UCB文件

    剛開始使用TC3xx芯片的時候,程序燒錄進去后起不來,一番咨詢后是因為沒有配置UCB導致的,然后刷了一個其他平臺項目的UCB文件后,程序正常起來了。
    的頭像 發表于 06-13 09:05 ?4472次閱讀
    一起學習<b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>的UCB文件

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

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

    TC3xx芯片DMU介紹

    AUTOSAR架構圖下的Fls模塊對上(Fee)模塊提供統一的標準接口,但是具體的實現因不同的芯片而不一樣,Infineon公司的Fls模塊通過操作TC3xx芯片的DMU模塊實現Fls的功能。在具體
    的頭像 發表于 08-31 14:10 ?1797次閱讀
    <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 ?2148次閱讀
    <b class='flag-5'>TC3xx</b><b class='flag-5'>芯片</b>的MPU功能<b class='flag-5'>詳解</b>

    深入解析TC3xx芯片中的SMU模塊應用

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