- 嵌入式系統技術應用與開發
- 陸淵章 徐敏主編
- 1362字
- 2022-05-07 18:24:28
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體系結構所支持的異常

- ANSYS Workbench基礎教程與工程分析詳解
- TinyML:基于TensorFlow Lite在Arduino和超低功耗微控制器上部署機器學習
- 單片機應用基礎教程(第二版)
- 51單片機逆向學習實戰教程(電子設計與嵌入式開發實踐叢書)
- 嵌入式虛擬化技術與應用:ACRN開源項目實踐
- 零起點學Proteus單片機仿真技術
- 嵌入式系統Linux內核開發實戰指南(ARM平臺)
- 單片機應用技術實訓指導
- 單片微型計算機原理及應用
- 51單片機工程師是怎樣煉成的:基于C語言+Proteus仿真
- STM32W無線射頻Zigbee單片機原理與應用
- 嵌入式Linux軟硬件開發詳解:基于S5PV210處理器
- 單片機技術及應用(第2版)
- 愛上單片機(第4版)
- 深度學習實踐教程