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)
STMIA r8!,(r0-r7)