ARM中斷處理過程
阿新 • • 發佈:2019-01-10
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)由於異常隨機發生,所以要對異常向量進行初始化,即在異常向量的地址處放置一條跳轉指令,跳轉到異常處理程式。