ARM有7種異常,數據中止、快速中斷請求、中斷請求、預取址中止、軟件中斷、復位及未定義指令。
2種類型的中斷,類是由外設引起的,即IRQ和FIQ。第二類是一條引發中斷的特殊指令SWI。兩種中斷都會掛起正常的程序執行。
異常是需要中止指令正常執行的任何情形,包括ARM內核產生復位,取指或存儲器訪問失敗,遇到未定義指令,執行了軟件中斷指令,或者出現了個外部中斷等。異常處理就是處理這些異常情況的方法。大多數異常都對應一個軟件的異常處理程序,一個在異常發生時執行的軟件程序。
每種異常都導致內核進入一種特定的模式。每個處理器模式都有一組各自的分組寄存器,處理器模式決定了哪些寄存器是活動的以及對cpsr的完全讀/寫訪問。同時,通過編程改變cpsr,可以進入任何ARM處理器模式。用戶和系統模式,不通過異常進入,只能修改cpsr。
異常和其模式
異常 模式 目的
快速中斷請求 FIQ 快速中斷請求處理
中斷請求 IRQ 中斷請求處理
SWI和復位 SVC 操作系統的受保護模式
預取指中止和數據中止 abort 虛存或存儲器保護處理
未定義指令 undefined 軟件模擬硬件協處理器
中斷是由ARM外設引起的一種特殊的異常。IRQ異常用于通常的操作系統事物處理。FIQ異常一般是為單獨的中斷源保留的。IRQ 可以被 FIQ 所中斷,但 IRQ 不能中斷 FIQ。為了使 FIQ 更快,所以這種模式有更多的影子寄存器。FIQ 不能調用 SWI(軟件中斷)。FIQ 還必須禁用中斷。
每個外圍設備都有一條中斷線連接到向量中斷控制器。外設功能的中斷源,一般有WDT、定時器、UART、I2C、SPI、RTC、A/D等等。可以通過寄存器設置這些中斷的優先級。