ARM異常中斷處理概述 當(dāng)正常的程序執(zhí)行流程發(fā)生暫時(shí)的停止時(shí),稱之為異常,例如處理一個(gè)外部的中斷請(qǐng)求。在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行。處理器允許多個(gè)異常同時(shí)發(fā)生,它們將會(huì)按固定的優(yōu)先級(jí)進(jìn)行處理。 ARM體系結(jié)構(gòu)所支持的異常類型 異常類型 具體含義 異常向量表(Exception Vectors) 地址 異常 進(jìn)入模式 0x0000,0000 復(fù)位 管理模式 ox0000,0004 未定義指令 未定義模式 0x0000,0008 軟件中斷 管理模式 0x0000,000c 中止(預(yù)存指令) 中止模式 0x0000,0010 中止(數(shù)據(jù)) 中止模式 0x0000,0014 保留 保留 0x0000,0018 IRQ IRQ 0x0000,001c FIQ FIQ 異常優(yōu)先級(jí)(Exceprion Priorities) 優(yōu)先級(jí) 異常 1(最高) 復(fù)位 2 數(shù)據(jù)中止 3 FIQ 4 IRQ 5 預(yù)取指令 6(最低) 未定義指令、SWI 對(duì)異常的響應(yīng) 當(dāng)一個(gè)異常出現(xiàn)以后,ARM微處理器會(huì)執(zhí)行以下幾步操作 1、將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時(shí)能從正確的位置重新開始執(zhí)行。 異常處理完畢之后,ARM微處理器會(huì)執(zhí)行以下幾步操作從異常返回: 1、將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。 可以認(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行的,因此復(fù)位異常處理程序不需要返 中斷處理程序的安裝 一般在系統(tǒng)的啟動(dòng)代碼中安裝異常處理程序。大致可以分為兩種情況: 1、地址處存儲(chǔ)器為ROM/FLASH 在ROM/FLASH中安裝中斷處理程序 在ROM/FLASH的異常中斷向量表中,可以使用LDR指令直接向程序計(jì)數(shù)器PC中賦值,也可以直接使用跳轉(zhuǎn)指令轉(zhuǎn)到異常中斷處理程序。 當(dāng)0地址處為ROM時(shí),將跳轉(zhuǎn)指令安裝在0地址處: ;為中斷向量分配地址空間,此空間處為RAM的地址 RAM中安裝中斷處理程序 當(dāng)0地址處為RAM時(shí),中斷向量表必須使用數(shù)據(jù)讀取指令直接指向PC中賦值的形式。而且必須把中斷向量從ROM中復(fù)制到RAM地址的0地址處。 MOV r8, #0 ; ARM處理器共有7種不同的處理器模式: 1、用戶模式(User)2、快速中斷模式(FIQ)3、外部中斷模式(IRQ)4、特權(quán)模式(SVC)5、數(shù)據(jù)訪問中止模式(ABT)6、未定義指令中止模式(UND)7、系統(tǒng)模式(SYS)
![]() 除了用戶模式以外的其他6種處理器模式稱為特權(quán)模式。在這些模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進(jìn)行處理器的模式切換。ARM內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件設(shè)計(jì)上只允許(或者可選為只允許)特權(quán)模式下訪問。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。 其中,除了用戶模式、系統(tǒng)模式以外,其他5種特權(quán)模式又稱為異常模式。它們除了可以通過程序切換進(jìn)入外,也可以由特定的異常進(jìn)入。當(dāng)特定的異常出現(xiàn)時(shí),處理器進(jìn)入相應(yīng)的模式。每種異常模式都有一些獨(dú)立的寄存器,以避免異常退出時(shí)用戶模式的狀態(tài)不可靠。 用戶和系統(tǒng)模式這兩種模式都不能由異常進(jìn)入,而且它們使用完全相同的寄存器組。 系統(tǒng)模式是特權(quán)模式,不受用戶模式的限制。操作系統(tǒng)在該模式下訪問用戶模式的寄存器就比較方便,而且操作系統(tǒng)的一些特權(quán)任務(wù)可以使用這個(gè)模式訪問一些受控的資源。 |
|