1. 程式人生 > >ARM中斷處理過程

ARM中斷處理過程

ARM有七種異常中斷型別,優先順序、工作模式(有七種工作模式)、地址、功能都不一樣。如其中軟體中斷SWI優先順序為6,工作模式管理模式,異常向量地址為0x00000008,功能是使用者定義的中斷指令,可用於使用者模式下的程式呼叫特權操作。

當中斷產生後,除了復位中斷立即中止當前指令外,其餘情況都是處理器完成當前指令後,才去執行異常處理程式。

(1)將CPSR的值儲存到將要執行的異常中斷對應的各自SPSR中,以實現對處理器當前狀態、中斷遮蔽及各標誌位的保護。

(2)設定當前狀態暫存器CPSR的相應位。設定CPSR中的M4~M0的5位,進入相應工作模式,設定I=1禁止IRQ中斷,如果進入復位模式或FIQ模式,還要設定F=1以禁止FIQ中斷。

(3)將引起異常指令的下一條地址(斷點地址)儲存到新異常工作模式的LR(R14)中,使異常處理程式執行完後正確返回原來程式處繼續向下執行。

(4)給程式計數器PC強制賦值,轉入向量地址,以便執行相應的處理程式。

每種中斷異常模式對應兩個暫存器SP和LR。

從中斷返回。如果是復位異常,系統自動從0x00000000開始重新執行程式,無需返回。

(1)首先恢復原來被保護的使用者暫存器。

(2)將SPSR暫存器複製到CPSR中,使得原來CPSR狀態從相應的SOSR中恢復,一恢復被中斷的程式狀態。

(3)根據異常型別將PC值恢復成斷點地址,以繼續執行使用者原來執行著的程式。

(4)清除CPSR中的中斷禁止標誌I和F,開放外部中斷和快速中斷。

注意:(1)程式狀態暫存器及斷點地址的恢復必須同時進行。

(2)由於異常隨機發生,所以要對異常向量進行初始化,即在異常向量的地址處放置一條跳轉指令,跳轉到異常處理程式。