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