ARM基礎(chǔ)知識(shí)學(xué)習(xí)五
在應(yīng)用程序中安裝異常ARM中斷處理中斷處理程序 1.使用跳轉(zhuǎn)指令:可以在異常中斷對(duì)應(yīng)異常向量ARM中斷處理表中特定位置放置一條跳轉(zhuǎn)指令,直接跳轉(zhuǎn)到該異常中斷的處理程序。這種方法有一個(gè)缺點(diǎn),即只能在32M空間范圍內(nèi)跳轉(zhuǎn)。 2.使用數(shù)據(jù)讀取指令LDR:使用數(shù)據(jù)讀取指令LDR向程序計(jì)數(shù)器PC中直接賦值。這種方法分為兩步:先將異常中斷處理程序的絕對(duì)地址存放在存放在距離向量表4KB范圍內(nèi)的一個(gè)存儲(chǔ)單元中;再使用ARM中斷處理數(shù)據(jù)讀取指令LDR將該單元的ARM中斷處理內(nèi)容讀取到程序計(jì)數(shù)器PC中。 **在系統(tǒng)復(fù)位時(shí)安裝異常中斷處理程序** 1.地址0x00處為ROM的情況 使用數(shù)據(jù)讀取指令LDR示ARM中斷處理例如下所示: Vector_Init_BloARM中斷處理ck 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 使用跳轉(zhuǎn)指令的示例如下所示: Vector_Init_Block BL Reset_Handle BL DCD Undefined_Handle BL SWI_HanARM中斷處理dle BL Prefeth_Handle BL Abort_Handle NOP BL IRQ_Handle BL FIQ_Handle 2.地址0x00處為RAM的情況 地址0x00處為RAM時(shí),中斷向量表必須使用數(shù)據(jù)讀取ARM中斷處理指令直接指向PC中賦值的形式。ARM中斷處理而且,必須使用下面的代碼巴中斷向量表從ROM中復(fù)制到RAM中地址0x00開始處的存儲(chǔ)空間中: MOV r8,#0 ADR r9,Vector_Init_Block ;復(fù)制中斷向量表(8字) LDMIA r9!,(r0-r7) STMIA r8!,(r0-r7) ;復(fù)制保存各中斷處理函數(shù)地址ARM中斷處理的表(8字words) LDMIA r9!,(r0-r7) STMIA r8!,(r0-r7) |