ARM的異常中斷機制

2021-08-27 01:29:22 字數 1655 閱讀 2715

在我們平時使用計算機時我們敲擊鍵盤,計算機會對我做出響應。這是什麼原因呢?處理器又是如何響應外圍請求的呢?其實這都是通過處理器的中斷機制實現的。arm又是怎樣的中斷機制?讓我們一起**吧!

在arm處理器裡主要是通過3中情況在控制程式執行的:

1.流水方式執行程式,pc的值是下一條指令的位址,即每執行一條指令pc都加乙個字的偏移。

2.通過跳轉指令來控制程式執行。

b 跳轉到指定的指令處執行。

bl 跳轉執行,儲存子程式位址並返回。

bx 跳轉執行並切換到thumb狀態。

blx 三種方式組合。

3.通過異常中斷機制控制程式執行。

當異常中斷發生時,系統執行完當前指令後,將跳轉到相應的異常中斷處理程式處執行。在進入異常中斷處理程式執行完時,程式返回到發生到產生中斷指令的下一條指令處執行。在進入異常中斷處理程式時,要儲存被中斷的程式的執行現場,從異常中斷處理程式退出時,要恢復被中斷的程式的執行現場。

在實際情況中arm處理器在控制程式執行時往往是以上3種方式結合執行的。

arm有以下幾種異常中斷種類:

異常中斷名稱

含義reset

復位中斷,

當處理器復位引腳有效時,如系統產生復位中斷則跳轉至復位中斷異常處理程式處執行。

有兩種情況:

系統加電,

系統復位

undefined instruction

當arm處理器認為當前指令未定義時,產生未定義的指令異常中斷。

software interrupt

軟中斷,這是有使用者定義的中斷指令。可用於使用者模式下的程式呼叫的特權操作指令,在rtos中可以通過該機制實現系統功能呼叫。

prefech abort

指令預取中止,預讀指令位址不存在或不能訪問則產生該中斷。

data abotr

資料訪問中止,資料訪問指令位址不存在或不能訪問則產生該中斷。

irq外部中斷請求,當處理器外部引腳有效時,且cpsr的暫存器i被清除時,產生該中斷,並呼叫中斷服務子程式。

fiq快速中斷請求,當處理器快速外部引腳有效時,且cpsr的暫存器f被清除時,產生該中斷,並呼叫中斷服務子程式。

呵呵,讓我們來看看arm的異常中斷響應過程吧!

1.儲存處理器當前狀態、中斷遮蔽位及各條件標誌位。怎樣儲存呢?

arm的6種模式下都有自己的spsr,它就是通過把當前的cpsr儲存到將要執行異常中斷的spsr_mode實現的。

2.設定當前的cpsr的相應的標誌位。

設定m、i、f等控制位。

3.將lr_mode設成返回位址。

4.將pc指向中斷向量表的位址,跳轉到對應的中斷服務程式處執行。

5.恢復被中斷處理的處理器狀態。(將spsr_mode複製到cpsr)

6.返回到發生異常中斷的下一條指令處執行。(即pc = lr_mode)

用偽**描述如下:

lr_mode = pc

spsr_mode = cpsr

cpsr[4:0] = exception mode

if == reset or fiq then

cpsr[6] = 1

cpsr[7] = 1

pc = exception mode vector address

cpsr = spsr_mode

pc = lr_mode

ARM 異常中斷處理

在arm體系中,程式執行的流程有三種 要了解arm處理異常中斷的流程原理,就要先熟悉一下arm的工作模式與暫存器。如圖,arm有七種工作模式,大多數程式是工作在使用者模式usr下的,其他六種工作模式屬於特權模式,特權模式的存在是為了處理中斷 異常,或者訪問被保護的系統資源。不同模式之間的轉換可以通過...

arm中斷保護和恢復 ARM異常中斷返回的幾種情況

重要基礎知識 r15 pc 總是指向 正在取指 的指令,而不是指向 正在執行 的指令或正在 解碼 的指令。一般來說,人們習慣性約定將 正在執行的指令作為參考點 稱之為當前第一條指令,因此 pc總是指向第三條指令。當 arm 狀態時,每條指令為 4 位元組長,所以 pc 始終指向該指令位址加 8 位元...

arm中斷保護和恢復 ARM異常中斷的原因及處理措

當arm異常中斷發生時,系統執行完當前指令後,將跳轉到相應的異常中斷處理程式處執行。當異常中斷處理程式執行完成後,程式返回到發生中斷指令的下條指令處執 行。在進入異常中斷處理程式時,要儲存被中斷程式的執行現場,從異常中斷處理程式退出時,要恢復被中斷程式的執行現場。1 引起異常的原因 對於arm核,可...