官术网_书友最值得收藏!

2.3.1 ARM體系支持的異常類型

1.IRQ

外部中斷請求(IRQ)異常是由nIRQ輸入低電平引發的普通中斷。IRQ相對FIQ來說是優先級低,當一個FIQ序列進入時它將被屏蔽。IRQ也可以通過設置CPRS中的“I”標志來禁止,同樣也不能夠在用戶模式中這樣做(只能在特權模式下這樣做)。

無論IRQ發生在ARM狀態或者Thumb狀態下,都可以采用以下語句來退出中斷處理:

2.FIQ

快速中斷請求(FIQ)異常通常是用來支持數據傳輸和通道操作的,在ARM狀態下,它具有充足的私有寄存器,用來減少寄存器存取的需要(從而減少進入中斷前的“上下文切換”的工作)。

FIQ是由外部設備通過拉低nFIQ引腳觸發的。通過對ISYNC輸入引腳的控制nFIQ可以區別同步或異步的傳輸情況。當ISYNC為低電平,nFIQ和nIRQ將被認為是異步的,中斷之前產生同步周期延長會影響處理器的流程。不管是ARM狀態還是Thumb狀態下的異常,FIQ處理程序都可以通過執行以下的語句來退出中斷處理:

通過設置CPSR的F標記位可以禁止FIQ中斷(但是要注意到在用戶模式下是不可行的)。如果F標記位已經清除,ARM920T在每個指令的最后檢測來自FIQ中斷同步器的低電輸出。

3.異常中止

異常中止表示當前存儲訪問不能完成。通過外部的中止(abort)輸入信號來告知內核。ARM920T在每次的存儲操作中檢測該異常是否發生。異常中止分兩種類型:預取指異常中斷(指令預取時產生)和數據異常中斷(數據訪問時產生)。

如果產生預取指中止,所取得的指令將會被標志為無效,但是異常不會立即發生,要直到取指令到達了管道的頭部才會發生。如果這些指令不執行——例如在管道內發生了分支跳轉,那么異常就不會發生了。

如果產生數據異常中止,則根據指令類型進行操作:

1)簡單數據傳輸指令(LDM,STR)寫回改變的基址[變址]寄存器:異常中斷處理器必須清楚這些。

2)取消交換指令盡管它還沒執行。

3)數據塊傳輸指令(LDM,STM)完成。如果設置為寫回,基址已經校正。如果指令超出了數據的寫基址(傳輸目錄中有它的基址),就應該防止寫超出。在中止異常將發生時,所有寄存器的覆蓋寫入都是禁止的。這意味著特別是R15(經常是最后一個改變的寄存器)的值將在中止的LDM指令中保留下來。

中止機制使得頁面虛擬存儲器機制得以實現。在采用虛擬存儲器的系統中,處理器可以產生任意的地址。當某個地址的數據無效,存儲器管理單元(MMU)將產生一個中止。這樣中止的處理程序就必須找出異常中斷的原因,使要求的數據可用,并重試被中止的指令。應用程序也既不需要了解實際可用存儲空間的大小,也不需要了解異常中斷對它的影響。

在完成了異常中斷的處理后,通過以下語句退出中斷處理(與是ARM狀態還是Thumb狀態無關):

通過執行該語句,就恢復了PC和CPSR,并重試被中斷的指令。

4.軟件中斷

SWI(軟件中斷指令)用來進入超級用戶模式,通常用于請求特殊的超級用戶功能。SWI的處理程序通過執行以下語句,退出異常處理(ARM狀態或Thumb狀態):

通過執行該語句,就恢復了PC和CPRS,并返回到SWI后面的指令上。注意:前面提到的nFIQ、nIRQ、ISYNC、LOCK、BIGEND和ABORT引腳只存在于ARM的CPU內核上。

5.未定義指令

當ARM遇到一個它不能執行的指令,將產生一個未定義指令陷阱。這個機制是軟件仿真器用來擴展Thumb和ARM指令集的。

在完成對未知指令的處理后,陷阱處理程序執行以下的語句退出異常處理(無論是ARM狀態還是Thumb狀態):

通過執行該語句,恢復了CPSR,并返回執行未定義指令的下一條指令。

ARM體系結構所支持的異常及具體含義如表2-4所示。

表2-4 ARM體系結構所支持的異常

主站蜘蛛池模板: 西盟| 壤塘县| 来宾市| 邛崃市| 松溪县| 太仓市| 莎车县| 武冈市| 新乡市| 南平市| 凌源市| 文化| 攀枝花市| 婺源县| 阿克陶县| 屏东县| 泗阳县| 哈尔滨市| 拜泉县| 孝昌县| 朝阳区| 登封市| 文化| 靖州| 咸宁市| 夹江县| 缙云县| 宁德市| 枣庄市| 渭源县| 鄂尔多斯市| 沅陵县| 阜康市| 华宁县| 邢台县| 深泽县| 视频| 历史| 神木县| 温泉县| 滕州市|