當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > ARM的中斷處理詳細過程
ARM的中斷處理詳細過程
時間:2018-07-30 來源:未知
ARM有七種異常中斷類型,優(yōu)先級、工作模式(有七種工作模式)、地址、功能都不一樣。如其中軟件中斷SWI優(yōu)先級為6,工作模式管理模式,異常向量地址為0x00000008,功能是用戶定義的中斷指令,可用于用戶模式下的程序調(diào)用特權(quán)操作。
當(dāng)中斷產(chǎn)生后,除了復(fù)位中斷立即中止當(dāng)前指令外,其余情況都是處理器完成當(dāng)前指令后,才去執(zhí)行異常處理程序。
(1)將CPSR的值保存到將要執(zhí)行的異常中斷對應(yīng)的各自SPSR中,以實現(xiàn)對處理器當(dāng)前狀態(tài)、中斷屏蔽及各標志位的保護。
(2)設(shè)置當(dāng)前狀態(tài)寄存器CPSR的相應(yīng)位。設(shè)置CPSR中的M4~M0的5位,進入相應(yīng)工作模式,設(shè)置I=1禁止IRQ中斷,如果進入復(fù)位模式或FIQ模式,還要設(shè)置F=1以禁止FIQ中斷。
(3)將引起異常指令的下一條地址(斷點地址)保存到新異常工作模式的LR(R14)中,使異常處理程序執(zhí)行完后正確返回原來程序處繼續(xù)向下執(zhí)行。
(4)給程序計數(shù)器PC強制賦值,轉(zhuǎn)入向量地址,以便執(zhí)行相應(yīng)的處理程序。
每種中斷異常模式對應(yīng)兩個寄存器SP和LR。
從中斷返回。如果是復(fù)位異常,系統(tǒng)自動從0x00000000開始重新執(zhí)行程序,無需返回。
(1)首先恢復(fù)原來被保護的用戶寄存器。
(2)將SPSR寄存器復(fù)制到CPSR中,使得原來CPSR狀態(tài)從相應(yīng)的SOSR中恢復(fù),一恢復(fù)被中斷的程序狀態(tài)。
(3)根據(jù)異常類型將PC值恢復(fù)成斷點地址,以繼續(xù)執(zhí)行用戶原來運行著的程序。
(4)清除CPSR中的中斷禁止標志I和F,開放外部中斷和快速中斷。
注意:(1)程序狀態(tài)寄存器及斷點地址的恢復(fù)必須同時進行。
(2)由于異常隨機發(fā)生,所以要對異常向量進行初始化,即在異常向量的地址處放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序。

