中斷控制器在芯片中的位置
中斷控制器的發展
中斷控制器的分類
中斷處理過程
既然處理中斷的最核心模塊是 中斷控制器 , 那麼 我們就應該瞭解 中斷控制器的典型工作流程 .
在瞭解工作過程中自然瞭解到 中斷控制器留給 CPU 的接口.從而達到怎麼控制中斷控制器來處理中斷的過程.
GIC對一箇中斷源的處理過程包含Inactive, Pending, Active和Active and Pending四種狀態。
1. 中斷控制器彙集各類外設發出的中斷信號
2. 中斷控制器告訴CPU , 此時CPU在吃到第5根陽春麪,這一根吃到了一半
3. CPU保存當前程序的運行環境
4. CPU置位PC,中斷服務程序處理中斷
5. 軟件ISR中進行相應的處理。
6. 軟件清除中斷,通過讀寫中斷控制器和外設相關的寄存器來實現。
7. 軟件恢復原來的環境
8. 軟件調用iret
9. 軟件控制 CPU 告知 中斷控制器中斷處理完畢
10.CPU 繼續吃第5根陽春麪剩下的一半
arm 芯片上的中斷控制器發展及種類
arm cortex-m 使用 NVIC
arm cortex-a 使用 GIC
gic 是有 單獨的 RF和trm 的.
nvic 的 RF和trm 分別在 cortex-m 處理器的 RF和trm 中.
問題:
cortex-a 和 cortex-m 在中斷系統上有什麼不同?
cortex-a 可以使用 NVIC嗎?
1.標準的中斷控制器
就是沒有對中斷進行管理,直接給 arm core
一開始是沒有中斷控制器的,這個叫做標準的中斷控制器
軟件可以設置忽略或屏蔽某設備的中斷請求
軟件讀寄存器判斷是哪個設備的什麼請求
3.VIC
對於ARM架構的soc,使用較多的中斷控制器是VIC(Vector Interrupt Controller)
至於能不能嵌套,看具體實現.
區分中斷優先級
硬件判斷中斷源並主動跳轉對應處理程序地址
stm32 等 cortex-m0 m1 m4 m0+ 用的
2.NVIC
可嵌套中斷控制器
單核時代用的
用於對中斷信號進行處理,然後給 arm core
arm7 arm11 cortex-a8(這幾個都是單核)
VIC是處於芯片外設和ARM內核之間的一個模塊,對芯片所有外設中斷進行管理,決定哪些中斷源可以產生中斷、產生哪種類型的中斷以及中斷後執行哪段服務程序。
ARM處理器內核具有兩個中斷輸入:向量中斷請求(IRQ)和快速中斷請求(FIQ)。向量中斷控制器使用32箇中斷請求輸入,可將其編程分配爲FIQ或向量IRQ類型。
可編程分配機制意味着外設中斷的優先級可動態分配和調整。
4.GIC
進入多核時代以後,GIC(General Interrupt Controller)的應用也開始逐漸變多。
GIC 可以實現中斷嵌套
單核時代用的
用於對中斷信號進行處理,然後給 arm core
cortex-a9( Cor tex-A9 爲單核 ,Cor tex-A9 MPCore 爲多核)
GIC爲中斷控制器,不要和ARM core的中斷搞混了,這些中斷都是連接到ARM core的IRQ或者FIQ上的。
ARM中斷種類
中斷源 |
分類 |
Cortex-M進入模式 |
ARM7進入模式 |
Cortex-A進入模式 |
一般外設 |
IRQ |
handler工作模式 |
SVC異常模式 |
SVC異常模式 |
電源鍵 |
FIQ |
handler工作模式 |
IRQ異常模式 |
IRQ異常模式 |
SWI指令 |
SWI |
handler工作模式 |
FIQ異常模式 |
FIQ異常模式 |