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)由于異常隨機發生,所以要對異常向量進行初始化,即在異常向量的地址處放置一條跳轉指令,跳轉到異常處理程序。