1.
首先就是知道
arm狀態下的通用暫存器和程式計數器,綠顏色的就是相應模式下的私有暫存器。 就是說程式一般執行在系統和使用者模式下,使用的是系統和使用者模式下的通用暫存器,當有異常發生時,比如
fiq,那麼系統將切換到
fiq模式下,相應的就會採用
fiq模式下的暫存器,其中綠顏色的就是只在
fiq模式下才會用到的暫存器。
2.
在模式切換的過程中,要保護系統和使用者模式下的通用暫存器狀態,以便在異常處理完成之後程式能正常返回。因為
fiq模式下
r8-r14
為其私有暫存器,所以切換的過程中,系統和使用者模式下的通用暫存器的
r8-r14
就不用保護了,所以減少了對暫存器訪問的需要,從而可以快速的進行
fiq處理,故稱為
fiq。
3. 異常處理的動作 。當然這都是核心自己幹的。以
fiq為例。
當系統進入
fiq模式時 ,
第一,將原來執行程式的下一條指令位址儲存到
lr中,就是將
r14儲存到
r14_fiq
裡面。第二,拷貝
cpsr
到spsr_fiq
。第三,改變
cpsr
模式位的值,改到
fiq模式。
第四,改變
pc值,將其指向異常處理向量所指的下一條指令。
離開異常處理的時候 ,
第一,將lr(
r14_fiq
)賦給pc
。第二,將
spsr
(spsr_fiq
)拷貝到
cpsr
。第三,清除中斷禁止標誌(如果開始時置位了)。 4
.異常中斷向量
異常中斷的向量位址
位址異常中斷型別
入口時處理器的操作模式
0x00000000
復位
超級使用者
0x00000004
未定義指令
未定義0x00000008
軟體中斷
超級使用者
0x0000000c
中止(預取指)
中止0x00000010
中止(資料)
中止0x00000014
保留保留
0x00000018 i
rq irq
0x0000001c fiq fiq
異常中斷優先順序
中斷
優先順序復位
最高資料異常
fiqirq
預取指異常中斷
未定義指令和軟體中斷最低5
.當發生
irq中斷時第一 ,模式進入到
irq裡面。
第二 ,
pc跳到
0x00000018
處執行。因為這是
irq的中斷入口。
第三 ,
通過0x00000018
:ldr pc, irq_addr 。跳轉到相應的中斷服務程式。這個裡面就有個確定哪個中斷源的問題了。那就有優先順序的問題了。每個中斷源會有自己的中斷服務程式。
第四 ,得到中斷源有硬體實現和軟體處理兩種方式。比如
lpc21xx
的就是利用硬體方式,為了利用向量中斷控制器的優點,
irq中斷向量入口處**做了修改,變成
0x00000018
:ldr pc, [pc, #-0xff0]
。這條指令從記憶體對映位址
0xfffff030
處獲得資料裝載到
pc,這樣就能夠直接從硬體中獲得中斷源。這樣就減少了中斷延遲 。記得,三星的
s3c44b0
好象採用的是用軟體確定中斷源,因此要建立中斷向量表。好久不用了,記不清了。
第五 ,得到中斷源,就知道要跳到哪個中斷服務程式去了。
一般都是這麼定義的。
timer0_handler handler timer0
。這種格式是呼叫一種巨集定義,目的是保護現場,跳到中斷服務程式。
ARM中斷處理過程
以s3c2440arm9核為例 1 s3c2440支援60個中斷源,含子中斷源 2 arm9採用五級流水線方式 3 支援外部中斷和內部中斷 24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要...
中斷處理過程
部分摘自 中斷 所謂中斷就是指cpu在正常執行程式的時候,由於內部 外部事件的出發 或由程式預先設定而引起cpu暫時中止當前正在執行的程式,儲存被執行程式相關資訊到棧中,轉而去執行為內部 外部事件 或由程式預先設定的事件的中斷服務子程式,待執行完中斷服務子程式後,cpu再獲取被儲存在棧中被中斷的程式...
中斷及中斷處理過程
1.中斷和異常的概念區別 intel的官方文件裡將中斷和異常理解為兩種中斷當前程式執行的不同機制。這是中斷和異常的共同點。不同點在於 中斷 interrupt 是非同步的事件,典型的比如由i o裝置觸發 異常 exception 是同步的事件,典型的比如處理器執行某條指令時發現出錯了等等。中斷又可以...