ARM 體系的異常中斷
6.1.1 異常中斷的種類
響應過程稱之為異常中斷。例如當ARM 系統(tǒng)檢測到外部的復位信號有效,ARM 系統(tǒng)的程
序就會跳轉到復位處理程序。在處理異常之前,ARM 內核保存當前的處理器狀態(tài),這樣當
處理程序結束時可以恢復執(zhí)行原來的程序。當然ARM 體系的產生異常中斷后,會按照一定
的程序進行中斷處理。下面我們分別介紹ARM 系統(tǒng)異常,ARM 體系異常中斷包括復位、
未定義的指令、軟件中斷,指令預取中斷等。
●復位(Reset ):當處理器的復位引腳有效時,系統(tǒng)產生復位異常中斷,程序跳轉到復位異
常中斷處理程序處執(zhí)行。復位異常中斷通常用在下面兩種情況:①系統(tǒng)加電時 ②系統(tǒng)復位
時。
●未定義的指令(undefined instruction):當ARM 處理器或者時系統(tǒng)中是協(xié)處理器認為當前指
令未定義時,產生未定義指令異常中斷??梢酝ㄟ^該異常中斷機仿真浮點向量的運算。
●軟件中斷(Soft interrupt SWI):這時有用戶定義的中斷指令??捎糜谟脩裟J较碌某绦蛘{
試特權操作指令。在實際的操作中可以通過該機制實現(xiàn)系統(tǒng)功能的調用。
●指令預取中止(Prefech Abort) :如果處理器預取的指令的地址不存在,或者該地址不允許
當前指令訪問,當該預取的指令執(zhí)行時,處理器產生指令預取中止異常中斷。
數(shù)據(jù)訪問中止(Data Abort):如果數(shù)據(jù)訪問指令的目標地址不存在,或許該地址不允許當前
指令訪問,處理器產生。
●外部中斷請求(IRQ):當處理器的外部中斷請求引腳有效,而且 CPSR 寄存器的 1 位控
制位被清除時,處理器產生外部中斷請求(IRQ)異常中斷。系統(tǒng)中個外設通常通過該異常
中斷請求處理器服務。
●快速中斷請求(FIQ ):當處理器外部快速中斷請求引腳有效,而且 CPSR 寄存器的 F 控
制位被清除時,處理器產生外部中斷請求(FIQ )異常中斷。
6.1.2 處理異常中斷的寄存器
中止模式(Abort abt ) 用于虛擬存儲及存儲保護
未定義指令模式(Undefined und ) 用于支持通過軟件仿真硬件的協(xié)處理器
系統(tǒng)模式(System sys) 用于運行特權級的操作系統(tǒng)
R13_svc 表示特權模式下的R13 寄存器,R_13abt 表示中止模式下的R13 寄存器,其余的各
寄存器名稱含義類推。
用戶模式 系統(tǒng)模式 特權模式 中止模式 未定義指令模式 外部中斷模式 快速中斷模式
CPSR CPSR CPSR CPSR CPSR CPSR CPSR
必須保存和恢復這些寄存器。
必須使用偽操作RN 來定義這些名稱。例如我們要使用寄存器R13_abt 可以使用下面的語句。
過給各異常中斷賦予一定的優(yōu)先級來實現(xiàn)這種處理次序。當然有些異常中斷時不可能同時發(fā)
生的,如指令預取中止異常中斷和阮籍異常中斷時由同一條指令的執(zhí)行觸發(fā),它們時不可能
同時發(fā)生的。處理器執(zhí)行一個特定的異常中斷的過程中,稱為處理器處于特定的中斷模式。
各異常中斷的中斷向量地址以及中斷的處理優(yōu)先級如表 6.3 所示。
中斷向量地址 異常中斷類型 異常中斷模式 優(yōu)先級(6 級最低)
0x0 復位 特權模式(SVC) 1
0x4 未定義的指令 未定義的指令中止模式 6
0x8 軟件中斷 特權模式 6
0x10 數(shù)據(jù)訪問中止 中止模式 2
0x14 保留 未使用 未使用
0x18 外部中斷請求 外部中斷模式 4
0x1c 快速中斷請求 快速中斷模式 3
6.1.4 進入異常中斷
6.1.5 退出異常中斷
ARM 系統(tǒng)處理完中斷后從異常中斷處理程序中返回包括下面的步驟。
因為整個應用系統(tǒng)時從復位異常中斷處理程序執(zhí)行的,所以復位異常中斷處理程序不需要返
回。
不同的。同樣,返回地址對于各種不同的異常中斷也是不同的。
下面我們分別介紹各種異常中斷處理程序的返回方法。
1.SWI 和未定義指令異常中斷處理程序的返回
SWI 和未定義指令異常中斷是由當前執(zhí)行的指令自身產生的,當 SWI 和未定義指令異常中斷
產生時,程序及順氣 PC的值還未更新,它指向當前指令后面第 2 指令(對于 ARM指令來說,
它指向當前指令地址加 8 個字節(jié)的位置;對于 Thumb 指令來說,它指向當前指令地址加 4
個字節(jié)的位置)。當 SWI 和未定義指令異常中斷發(fā)生時,處理器將值(PC-4)保存到異常模
式下的寄存器 lr_mode中。這時(PC-4)即指向當前的下一條指令。因此返回操作可以通過
下面的指令來實現(xiàn):
MOV PC,LR
寄存器內容復制到當前程序狀態(tài)寄存器 CPSR 中。
保存被中斷程序的執(zhí)行現(xiàn)場,在退出異常中斷處理程序時恢復被中斷程序執(zhí)行現(xiàn)場。異常中
斷處理程序中使用的數(shù)據(jù)棧由用戶提供。
SPSR_mode 寄存器內容復制到當前程序狀態(tài)寄存器 CPSR 中。該指令只能在特權模式下使用。
2.IRQ和 FIQ 異常中斷處理程序的返回
許 IRQ 中斷及 FIQ 中斷。如果有中斷引腳有效,并且系統(tǒng)允許該中斷產生,處理器將產生
IRQ 異常中斷或 FIQ 異常中斷。當 IRQ 和FIQ 異常中斷產生時,程序計數(shù)器 PC 的值也經更
新,它指向當前指令后面第 3 條指令(對預 ARM 指令來說,它指向當前指令地址加 12 個字
節(jié)的位置;對于 Thumb 指令來說,它指向當前指令地址加 6 個字節(jié)的位置)。當 IRQ 和 FIQ
異常中斷發(fā)生時,處理器將值(PC-4)保存到異常模式下的寄存器 lr_mode 中。這時(PC-4)
即指向當前指令后的第 2 條指令。因此返回操作可以通過下面的指令來實現(xiàn):
該指令將寄存器LR中的值減4后,復制到程序計數(shù)器PC中,實現(xiàn)程序返回,同時將SPSR_mode
寄存器內容復制到當前程序狀態(tài)寄存器 CPSR 中。
當異常中斷處理程序中使用了數(shù)據(jù)棧時,可以通過下面的指令進入異常中斷處理程序時保存
被中斷程序的執(zhí)行現(xiàn)場。異常中斷處理程序中使用的數(shù)據(jù)棧由用戶提供。
SPSR_mode 寄存器內容復制到當前程序程序寄存器 CPSR 中。該指令只能在特權模式下使用。
3.預取中止異常中斷處理程序的返回
在指令預取時,如果目標地址時非法的,該指令將被標記稱有問題的指令。這時,流水線上
該指令之前的指令繼續(xù)執(zhí)行。當執(zhí)行到該被標記稱有問題的指令時,處理器產生指令預取中
止異常中斷。
指令。因此指令預取中止異常中斷程序應該返回到產生該指令預取中止異常中斷的指令處。
而不是像前面兩種情況下返回到發(fā)生中斷的指令的下一條指令。
時,程序計數(shù)器 PC 的值還未更新,指向它當前指令后面第 2 條指令(對于 ARM 指令來說,
它指向當前指令地址加 8 各字節(jié)的位置;對于 Thumb 指令來說,它指向當前指令地址 4個字
節(jié)的位置)。當指令預取中止異常中斷發(fā)生時,處理器將值(PC-4)保存到異常模式下的寄
存器 lr_mode 中。這時(PC-4)即指向當前指令的下一條指令。因此返回操作可以通過下面
的指令來實現(xiàn):
SUSB PC , LR ,#4
該指令將寄存器 LR 中的值減 4 后,復制到程序計數(shù)器 PC 中,實現(xiàn)程序的返回,同時將
SPSR_mode 寄存器內容復制到當前程序狀態(tài)寄存器 CPSR 中。
時保存被中斷程序的執(zhí)行現(xiàn)場,在推出異常中斷處理程序時恢復被中斷程序的執(zhí)行現(xiàn)場。異
常中斷處理程序中使用的數(shù)據(jù)棧由用戶提供。
SPSR_mode 寄存器內容復制到當前程序狀態(tài)寄存器 CPSR 中。該指令只能在特權模式下使用。
4.數(shù)據(jù)訪問中止異常中斷處理程序返回
評論