ARM異常中斷處理概述
1.中斷的概念
什麼是中斷,我們從一個生活中的例子引入。你正在家中看書,突然電話鈴響了,你放下書本,去接電話,和來電話的人交談,然後放下電話,回來繼續看你的書。這就是生活中的“中斷”的現象,就是正常的工作過程被外部的事件打斷了。
在處理器中,所謂中斷,是一個過程,即CPU在正常執行程式的過程中,遇到外部/內部的緊急事件需要處理,暫時中斷(中止)當前程式的執行,而轉去為事件服務,待服務完畢,再返回到暫停處(斷點)繼續執行原來的程式。為事件服務的程式稱為中斷服務程式或中斷處理程式。嚴格地說,上面的描述是針對硬體事件引起的中斷而言的。用軟體方法也可以引起中斷,即事先在程式中安排特殊的指令,CPU執行到該類指令時,轉去執行相應的一段預先安排好的程式,然後再返回來執行原來的程式,這可稱為軟中斷。把軟中斷考慮進去,可給中斷再下一個定義:中斷是一個過程,是CPU在執行當前程式的過程中因硬體或軟體的原因插入了另一段程式執行的過程。因硬體原因引起的中斷過程的出現是不可預測的,即隨機的,而軟中斷是事先安排的。
2.中斷源的概念
仔細研究一下生活中的中斷,對於理解中斷的概念也很有好處。什麼可以引起中斷,生活中很多事件可以引起中斷:
有人按門鈴了,電話鈴響了,你的鬧鐘響了,你燒的水開了……諸如此類的事件。我們把可以引起中斷的訊號源稱為中斷源。
3.中斷優先順序的概念
設想一下,我們正在看書,電話鈴響了,同時又有人按了門鈴,你該先做什麼呢?如果你正在等一個很重要的電話,一般不會去理會門鈴;反之,如果你正在等一位重要的客人,則可能就不會去理會電話了。如果不是這兩者(既不等電話,也不等人上門),你可能會按你通常的習慣去處理。總之,這裡存在一個優先順序的問題,在處理器中也是如此,也有優先順序的問題。即同時有多箇中斷源遞交中斷申請時的中斷控制器對中斷源的響應優先級別。需要注意的是,優先順序的問題不僅僅發生在兩個中斷同時產生的情況,也發生在一箇中斷已產生,又有一箇中斷產生的情況。比如,你正接電話,有人按門鈴的情況,或你正開門與人交談,又有電話響了的情況。這時也需要根據中斷源的優先順序來決定下一動作。
ARM處理器中有7種類型的異常,按優先順序從高到低的排列如下:復位異常(Reset)、資料異常(Data Abort)、快速中斷異常(FIQ)、外部中斷異常(IRQ)、預取異常(Prefetch Abort)、軟中斷異常(SWI)和未定義指令異常(Undefined interrupt)。
注意:
在ARM處理器中,異常(Exception)和中斷(Interrupt)有些差別,異常主要是從處理器被動接受異常的角度出發,而中斷帶有向處理器主動申請的色彩。在本書中,對“異常”和“中斷”不做嚴格區分,兩者都是指請求處理器打斷正常的程式執行流程,進入特定程式迴圈的一種機制。