ARM中異常中斷的種類

**複位(RESET)**
當處理器複位引腳有效時,系統產生複位異常中斷,程式跳轉到複位異常中斷處理程式處執行。複位異常中斷通常用在下面幾種情況下︰系統加電時;系統複位時;跳轉到複位中斷向量處執行成為軟複位。

**未定義的指令**
當ARM處理器或者是系統中的協處理器認為當前指令未定義時,產生未定義的指令異常中斷,可以透過改異常中斷機製仿真浮點向量運算。

**軟體中斷**
這是一個由用戶定義的中斷指令。可用於用戶模式下的程式調用特權操作指令。在實時作業系統中可以透過該機製西線系統功能調用。

**指令與取終止(PrefechAbort)**
如果處理器預取的指令的位址不存在,或者該位址不允許當前指令訪問,當被預取的指令執行時,處理器產生指令預取終止異常中斷。

**數據訪問終止(DATAABORT)
如果數據訪問指令的目標位址不存在,,或者該位址不允許當前指令訪問,處理器產生數據訪問終止異常中斷

**外部中斷請求(IRQ)**
當處理器的外部中斷請求引腳有效,而且CPSR的暫存器的I控制位被清除時,處理器產生外部中斷請求異常中斷。系統中個外設透過該異常中斷請求處理服務。

**快速中斷請求(FIQ)**
當處理器的外部快速中斷請求引腳有效,而且CPSR的F控制位被清除時,處理器產生外部中斷請求異常中斷

異常中斷向量表及異常中斷優先級
中斷向量表指定了個異常中斷及其處理程式的對應關係。他通常存放在存儲位址的低端。在ARM體系中,異常中斷向量表的大小為32位元組,其中每個異常中斷佔據4個位元組大小,保留了4個位元組空間。
每個異常中斷對應的中斷向量表中的4個位元組的空間中存放了一個跳轉指令或者一個向PC暫存器中賦值的數據訪問指令。透過這兩種指令,程式將跳轉到相應的異常中斷處理程式處執行。當幾個異常中斷同時發生時,就必須按照一定的次序來處理這些異常中斷。

各個異常中斷的中斷向量位址以及中斷的處理優先級
中斷向量位址 異常中斷類型 異常中斷模式 優先級(6最低)
0x00 複位 特權模式 1
0x04 未定義的指令 未定義指令終止模式 6
0x08 軟體中斷 特權模式 6
0x0C 指令預取終止 終止模式 5
0x10 數據訪問終止 終止模式 2
0x14 保留 未使用 未使用
0x18 外部中斷請求 IRQ模式 4
0x1C 快速中斷請求 FIQ模式 3

在應用程式中安裝異常中斷處理程式
1.使用跳轉指令︰可以在異常中斷對應異常向量表中特定位置放置一條跳轉指令,直接跳轉到該異常中斷的處理程式。這種方法有一個缺點,即只能在32M空間範圍內跳轉。
2.使用數據讀取指令LDR︰使用數據讀取指令LDR向程式計數器PC中直接賦值。這種方法分為兩步︰先將異常中斷處理程式的絕對位址存放在存放在距離向量表4KB範圍內的一個存儲單元中;再使用數據讀取指令LDR將該單元的內容讀取到程式計數器PC中。 **在系統複位時安裝異常中斷處理程式**
1.位址0x00處為ROM的情況
使用數據讀取指令LDR示例如下所示︰
Vector_Init_Block
LDR PC, Reset_Addr
LDR PC, Undefined_Addr
LDR PC, SW_Addr
LDR PC, Prefeth_Addr
LDR PC, Abort_Addr
NOP
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr

Reset_Addr DCD Start_Boot
Undefined_Addr DCD Undefined_Handle
SW_Addr DCD SWI_Handle
Prefeth_Addr DCD Prefeth_Handle
Abort_Addr DCD Abort_Handle
DCD 0
IRQ_Addr DCD IRQ_Handle
FIQ_Addr DCD FIQ_Handle
使用跳轉指令的示例如下所示︰
Vector_Init_Block
BL Reset_Handle
BL DCD Undefined_Handle
BL SWI_Handle
BL Prefeth_Handle
BL Abort_Handle
NOP
BL IRQ_Handle
BL FIQ_Handle
2.位址0x00處為RAM的情況
位址0x00處為RAM時,中斷向量表必須使用數據讀取指令直接指向PC中賦值的形式。而且,必須使用下面的代碼巴中斷向量表從ROM中複製到RAM中位址0x00開始處的存儲空間中︰

MOV r8,#0
ADR r9,Vector_Init_Block
;複製中斷向量表(8字)
LDMIA r9!,(r0-r7)
STMIA r8!,(r0-r7)
;複製儲存各中斷處理函數位址的表(8字words)
LDMIA r9!,(r0-r7)
arrow
arrow
    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()