iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
Arm Platforms

30天從0開始探索嵌入式世界系列 第 10

Day.10 進入 ARM 世界: ARM Cortex-M Exception 介紹

  • 分享至 

  • xImage
  •  

Exception 與 Interrupt

  • Interrupt 是由內部 timer 或 I/O 裝置發出的。
  • Exception 是由於程式 Error 或是處於異常狀態才會發出。

上圖是(Exception Nuber 1~15) ARM Cortex-M 架構的 內部定義的 Exception,16~255 就是 Interrupt 是開發人員要自己定義,在ARM的架構上來說,Interrupt是一種Exception。

  • Reset:
    • Power-on rest
  • NMI: 無法被Mask 的 interrupt
  • Hard fault: 這個故障的功能就是當kernel運行到錯誤的程式碼會導致產生硬體故障,用於指示出程序出現不可修復的異常,需要程式人員關注與處理。
  • MemManage: 在 MPU (記憶體保護單元) 發生的一些記憶體管理的錯誤
  • Bus fault: 在獲取指令、資料讀寫、獲取中斷向量檢測到訪問錯誤則產生Bus故障。
  • Usage fault: 一些錯誤程序導致的異常,例如使用一條無效的指令或是非法的狀態轉換
  • SVC:SVC 參考資料
  • PendSV:如果systick搶佔了其他ISRs,不會在其中執行上下文切換。會等到全部的ISRs執行完畢後(期間一定是無任務排程的),才執行pendsv異常,完成上下文的切換。==差別在於生成pendsv異常的時機
  • SYSTICK:系統滴答定時器(SYSTICK)中斷 cortex-M3 的SVC、PendSV異常`
  • IRQ: 通常是週邊或外部輸入產生的

Exception 優先權

每個Exception都有自己的優先權,在ARM Cortex-M中數值越小代表優先權越高,因為IRQ 都是從0開始設定優先權數值,Exception Nuber 1~15 通常在軟體會被定義成-14~-1。

在發生Exception時,會直接備份一些暫存器(xPSR,R15,R14,R12,R3,R2,R2,R1,R0),比較特別的是這些備份機制在硬體層就直接做掉了,不需要軟體額外來做,return 就把他還原。

Priority Group

在ARM Cortex-M裡,設定優先權的register bits被分為兩個欄位

  • group priority(靠近MSB這一邊)(或稱為preempt priority)
    • 如果一個exception handler正在執行,突然一個exception又進來,假設此exception 的 group priority 比你大的話就可以 preempt。
  • subpriority within group(靠近LSB這一邊)
    • 如果有多個相同優先權的exception handler在等待執行(Pending),那麼先比較subpriority,比較高的排前面先執行,如果還是一樣,Exception Number小的優先。

Excpetion 有 四種狀態

  • Pending - 中斷信號已經被asserted,即中斷已經到來,並且被識別到,這個可以是硬體產生或軟體產生的。此時處於等待CPU處理的階段。
  • Active - 中斷已經被CPU確認過,並且當前中斷正在被處理。此時同一個中斷不會被遞交到此狀態的CPU。直到此中斷不再處於active狀態
  • Pending & Active - 中斷正在處理,並且新的中斷也已經到來。
  • Inactive - 描述中斷沒有到來的狀態,這裡的定義是,不是處於active和pending狀態。

參考資料

【嵌入式放牛班】Cortex-M Interrupt
淺談優先權,從ARM Cortex-M到FreeRTOS設定


上一篇
Day.9 進入 ARM 世界: ARM Cortex-M 暫存器介紹
下一篇
Day11.進入 ARM 世界: ARM Cortex-M Exception Registers
系列文
30天從0開始探索嵌入式世界15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言