ARM體系的異常中斷

在ARM體系中,一般有如下3種方式控制程序的執行流程:spa

  • 在正常程序執行過程當中,每執行一條ARM指令,程序計數寄存器PC的值加4個字節;每執行一條Thumb指令,程序計數寄存器PC的值加2個字節。整個過程是按順序執行的。
  • 經過跳轉指令,程序能夠跳轉到特定的地址標號處執行,或者跳轉到特定的子程序處執行。其中,B指令用於執行跳轉操做;BL指令在執行跳轉操做的同時,保存子程序的返回地址;BX指令在執行跳轉操做的同時,根據目標地址的最低位能夠將程序狀態切換到Thumb狀態;BLX指令執行3個操做,跳轉到目標地址處執行,保存子程序的返回地址,根據目標地址的最低位能夠將程序狀態切換到Thumb狀態。
  • 當異常中斷髮生時,系統執行完當前指令後,跳轉到相應的異常中斷處理程序處執行。在異常中斷處理程序執行完成後,程序返回到發生中斷的指令的下一條指令處執行。在進入異常中斷處理程序時,要保存被中斷的程序的執行現場,在從異常中斷處理程序退出時,要恢復被中斷的程序的執行現場。

ARM中異常中斷的種類:ci

ARM體系中的異常中斷以下表所示。io

各類異常中斷都具備各自的備份的寄存器組,在本章前面已經有了比較詳細的介紹,這裏再也不重複。table

當多個異常中斷同時發生時,能夠根據異常中斷的優先級響應優先級最高的異常中斷。關於異常中斷的優先級將在之後介紹。軟件

ARM體系中的異常中斷exception

異常中斷名稱 含義
復位(reset)

當處理器的復位引腳有效時,系統產生復位異常中斷,程序跳轉到復位異常中斷處理程序處執行,復位異常中斷一般用於下面幾種狀況:請求

系統加電時;系統復位時;跳轉到復位中斷向量處執行,稱爲軟復位;程序

未定義指令 當ARM處理器或者是系統中的協處理器認爲當前指令未定義時,產生未定義的指令異常中斷,能夠經過異常中斷機制仿真浮點向量運行;
軟件中斷 這是一個用戶定義的中斷指令,可用於用戶模式下的程序調用特權操做指令。
指令預取停止 若是處理器預取的指令的地址不存在,或者該地址不容許當前指令訪問,當該被取的指令執行時,處理器產生指令預取停止異常中斷;
數據訪問停止 若是數據訪問指令的目標地址不存在,或者該地址不容許當前指令訪問,處理器產生數據訪問停止異常中斷;
外部中斷請求 當處理器的外部中斷請求引腳有效時,並且CPSR寄存器的I控制位被清除時,處理器產生外部中斷請求異常中斷,系統中各外設一般經過異常中斷請求處理器服務;
快速中斷請求 當處理器的外部快速中斷請求引腳有效時,並且CPSR寄存器的F控制位被清除時,處理器產生外部中斷請求異常中斷;

ARM處理器對異常中斷的響應過程:數據

ARM處理器對異常中斷的響應過程以下所述。異常

(1)保存處理器當前狀態、中斷屏蔽位以及各條件標誌位。這是經過將當前程序狀態寄存器CPSR的內容保存到將要執行的異常中斷對應的SPSR寄存器中實現的,各異常中斷有本身的物理SPSR寄存器。

(2)設置當前程序狀態寄存器CPSR中相應的位。包括設置CPSR中的位,使處理器進入相應的執行模式,設置CPSR中的位,禁止IRQ中斷,當進入FIQ模式時,禁止FIQ中斷。

(3)將寄存器lr_mode設置成返回地址;

(4)將程序計數器PC設置成該異常中斷的中斷向量地址,從而跳轉到相應的異常中斷處理程序處執行;

上述的處理器對異常中斷的響應過程能夠用以下的代碼來描述:

R14_<mode> = return link

SPSR_<mode> = CPSR

CPSR[4:0] = exception mode number

CPSR[5] = 0;

if(exception_mode > reset or FIQ) then

        CPSR[6] = 1

        CPSR[7] = 1

PC = exception vector address

從異常中斷處理程序中返回:

從異常中斷處理程序中返回包括如下兩個基本操做。

(1)恢復被中斷的程序的處理器狀態,即將SPSR_mode寄存器內容複製到CPSR中。

(2)返回到發生異常中斷的指令的下一條指令處執行,即把lr_mode寄存器的內容複製到程序計數器PC中。

在復位異常中斷處理程序開始整個用戶程序的執行,於是它不須要返回。

實際上,當異常中斷髮生時,程序計數器PC所指的位置對於各類不一樣的異常中斷是不一樣的,一樣的,返回地址對於各類不一樣的異常中斷也是不一樣的。

相關文章
相關標籤/搜索