當arm異常中斷發生時,系統執行完當前指令後,將跳轉到相應的異常中斷處理程式處執行。當異常中斷處理程式執行完成後,程式返回到發生中斷指令的下條指令處執 行。在進入異常中斷處理程式時,要儲存被中斷程式的執行現場,從異常中斷處理程式退出時,要恢復被中斷程式的執行現場。
1、引起異常的原因 對於arm核,可以且只能識別7種處理器異常,每種異常都對應一種arm處理器模式,當發生異常時,arm處理器就切換到相應的異常模式,並呼叫異常處理 程式進行處理。
(1)、指令執行引起的異常 軟體中斷、未定義指令(包括所要求的協處理器不存在是的協處理器指令)、預取址中止(儲存器故障)、資料中止。
(2)、外部產生的中斷 復位、fiq、irq。
2、arm中異常中斷的種類
(1)、復位(reset)
a、當處理器復位引腳有效時,系統產生復位異常中斷,程式跳轉到復位異常中斷處理程式處執行,包括系統加電和系統復位。
b、通過設定pc跳轉到復位中斷向量處執行稱為軟復位。
(2)、未定義的指令 當arm處理器或者是系統中的協處理器認為當前指令未定義時,產生未定義的指令異常中斷,可以通過改異常中斷機制**浮點向量運算。
(3)、軟體中斷 這是乙個由使用者定義的中斷指令(swi)。可用於使用者模式下的程式呼叫特權操作指令。在實時作業系統中可以通過該機制實現系統功能呼叫。
(4)、指令與取終止(prefech abort) 如果處理器預取的指令的位址不存在,或者該位址不允許當前指令訪問,當被預取的指令執行時,處理器產生指令預取終止異常中斷。
(5)、資料訪問終止(dataabort) 如果資料訪問指令的目標位址不存在,或者該位址不允許當前指令訪問,處理器產生資料訪問終止異常中斷。
(6)、外部中斷請求(irq) 當處理器的外部中斷請求引腳有效,而且cpsr的暫存器的i控制位被清除時,處理器產生外部中斷請求異常中斷。系統中個外設通過該異常中斷請求處理服務。
(7)、快速中斷請求(fiq) 當處理器的外部快速中斷請求引腳有效,而且cpsr的f控制位被清除時,處理器產生外部中斷請求異常中斷。
3、異常的響應過程 除了復位異常外,當異常發生時,arm處理器盡可能完成當前指令(除了復位異常)後,再去處理異常。並執行如下動作: (1)、將引起異常指令的下一條指令的位址儲存到新模式的r14中,若異常是從arm狀態進入,lr暫存器中儲存的是下一條指令的位址(當前pc+4或 pc+8,與異常的型別有關);若異常是從thumb狀態進入,則在lr暫存器中儲存當前pc的偏移量,這樣,異常處理程式就不需要確定異常是從何種狀態 進入的。例如:在軟體中斷異常swi,指令mov pc,r14_svc總是返回到下一條指令,不管swi是在arm狀態執行,還是在thumb狀 態執行。
(2)、將cpsr的內容儲存到要執行異常中斷模式的spsr中。
(3)、設定cpsr相應的位進入相應的中斷模式。
(4)、通過設定cpsr的第7位來禁止irq。如果異常為快速中斷和復位。則還要設定cpsr的第6位來禁止快速中斷。
(5)、給pc強制賦向量位址值。 上面的異常處理操作都是由arm核硬體邏輯自動完成的,程式計數器pc總是跳轉到相應的固定位址。 如果異常發生時,處理器處於thumb狀態,則當異常向量位址加載入pc時,處理器自動切換到arm狀態,則異常處理返回時,自動切換到thumb狀態。
4、異常中斷處理返回 異常處理完畢之後,arm微處理器會執行以下幾步操作從異常返回:
(1)、將所有修改過的使用者暫存器從處理程式的保護棧中恢復。
(2)、將spsr複製回cpsr中,將連線暫存器lr的值減去相應的偏移量後送到pc中。
(3)、若在進入異常處理時設定了中斷禁止位,要在此清除。 復位異常處理程式不需要返回。w w w . d z i u u . c o m
arm中斷保護和恢復 ARM中斷異常處理的返回
舉個小例子,下面是一段arm彙編 0x3000bl add 0x3004mov r0,0 0x3008mov r1,1 0x300cmov r2,2 area test,code,readonly entry start mov r0,1 mov r1,1 bl add mov r0,0 mov r...
arm中斷保護和恢復 ARM中斷異常處理的返回
舉個小例子,下面是一段arm彙編 位址指令 0x3000 bl add 0x3004 mov r0,0 0x3008 mov r1,1 0x300c mov r2,2 area test,code,readonly entry start mov r0,1 mov r1,1 bl add mov r...
arm中斷保護和恢復 ARM異常中斷返回的幾種情況
重要基礎知識 r15 pc 總是指向 正在取指 的指令,而不是指向 正在執行 的指令或正在 解碼 的指令。一般來說,人們習慣性約定將 正在執行的指令作為參考點 稱之為當前第一條指令,因此 pc總是指向第三條指令。當 arm 狀態時,每條指令為 4 位元組長,所以 pc 始終指向該指令位址加 8 位元...