[ARM异常]-ARM Core如何响应中断的
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
.
說明:
在默認情況下,本文講述的都是ARMV8-aarch64架構,linux kernel 64位
.
自制ARM中斷\linux中斷\gic中斷控制器視頻:
目錄
- 1、51單片機的中斷響應模型
- 2、ARM的異常有哪?
- 3、ARM的異常向量表基地址
- 4、ARM的向量表offset
1、51單片機的中斷響應模型
我們先回憶一下在單片機上的中斷的使用。
如下圖所示,左邊是51單片機的管腳圖,P3.0-P3.5是單片機對應的中斷管教,當該管教電平發生變化時,觸發cpu異常。
當cpu來了一個異常時(中斷),cpu跳轉到異常向量地址處,執行handler函數,執行完畢后再回來
那么cpu異常時,跳轉的是哪個地址呢,其實這都是cpu出廠時設計好的。如下圖所示,左邊是cpu設計好的異常向量表基地址。右邊是軟件對異常的處理。
當來了一個uart中斷時,cpu觸發異常跳轉到0023地址處,而該地址處執行LJMP UART0_ISR指令,跳轉UART0_IAR函數去處理中斷…
2、ARM的異常有哪?
- 在ARMV7上,ARM異常有:RESET、swi、undef、prefetch、data abort、irq、fiq
其中RESET、swi是同步異常,其余是異步異常 - 在ARMV8上,ARM異常有serror、irq、fiq、Synchronous
其中Synchronous是同步異常,serror、irq、fiq是異步異常
解釋一下什么是同步異常什么是異步異常?
- 同步異常:軟件觸發行為、知道什么時候發生 例如:svc、smc、hyc指令觸發的都是同步異常
- 異步異常:軟硬件行為,不知道什么時候發生,發生時間是隨機的 例如:irq中斷觸發irq異常、fiq中斷觸發fiq異常…
當異常發生了,ARM CORE就要跳轉到異常向量表地址處了。其實是跳轉到:異常基地址 + 異常向量表偏移處
3、ARM的異常向量表基地址
(1)、ARMV7的異常向量表基地址
主要為VBAR、HVBAR、MVBAR三個寄存器,其中VBAR是banked.
(2)、ARMV8的異常向量表基地址
主要為VBAR_EL1、VBAR_EL2、VBAR_EL3三個寄存器
4、ARM的向量表offset
(1)、armv7的異常向量表的定義
其實在armv7上有多張異常向量表,下圖分別列舉出在secure、non-secure側的兩張異常向量表
(2)、在armv8上異常向量表
實際上有四組表,每組表有四個異常入口,分別對應同步異常,IRQ,FIQ和出錯異常。
- 如果發生異常并不會導致exception level切換,并且使用的棧指針是SP_EL0,那么使用第一組異常向量表。
- 如果發生異常并不會導致exception level切換,并且使用的棧指針是SP_EL1/2/3,那么使用第二組異常向量表。
- 如果發生異常會導致exception level切換,并且比目的exception level低一級的exception
level運行在AARCH64模式,那么使用第三組異常向量表。 - 如果發生異常會導致exception level切換,并且比目的exception level低一級的exception
level運行在AARCH32模式,那么使用第四組異常向量表。
另外我們還可以看到的一點是,每一個異常入口不再僅僅占用4bytes的空間,而是占用0x80 bytes空間,也就是說,每一個異常入口可以放置多條指令,而不僅僅是一條跳轉指令
后記:
.
更多視頻,盡在嗶哩嗶哩…
也歡迎添加微信,一起探討,一起學習,一起…
總結
以上是生活随笔為你收集整理的[ARM异常]-ARM Core如何响应中断的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TEE Internal core AP
- 下一篇: 在linux、optee、ATF中的中断