ARM的中斷處理過程

2021-05-01 23:37:04 字數 2225 閱讀 8037

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 是同步的事件,典型的比如處理器執行某條指令時發現出錯了等等。中斷又可以...