基于ARM處理器中斷處理的編程實現
當異常中斷發生時,系統執行完當前指令后,將跳轉到相應的異常中斷處理程序處執行。當異常中斷處理程序執行完成后,程序返回到發生中斷的指令的下一條指令處執行。在進入異常中斷處理程序時,要保存被中斷的程序的執行現場。從異常中斷處理程序退出時,要恢復被中斷的程序的執行現場。ARM體系中通常在存儲地址的低端固化了一個32字節的硬件中斷向量表,用來指定各異常中斷及其處理程序的對應關系。當一個異常出現以后,ARM微處理器會執行以下幾步操作:
1)保存處理器當前狀態、中斷屏蔽位以及各條件標志位;
2)設置當前程序狀態寄存器CPSR中相應的位;
3)將寄存器lr_mode設置成返回地址;
4)將程序計數器(PC)值設置成該異常中斷的中斷向量地址,從而跳轉到相應的異常中斷處理程序處執行。
在接收到中斷請求以后, ARM處理器內核會自動執行以上四步,程序計數器PC總是跳轉到相應的固定地址。從異常中斷處理程序中返回包括下面兩個基本操作:
1)恢復被屏蔽的程序的處理器狀態;
2)返回到發生異常中斷的指令的下一條指令處繼續執行。
當異常中斷發生時,程序計數器PC所指的位置對于各種不同的異常中斷是不同的,同樣,返回地址對于各種不同的異常中斷也是不同的。例外的是,復位異常中斷處理程序不需要返回,因為整個應用系統是從復位異常中斷處理程序開始執行的。
支持中斷跳轉的解析程序
解析程序的概念和作用
如前所述,ARM處理器響應中斷的時候,總是從固定的地址開始的,而在高級語言環境下開發中斷服務程序時,無法控制固定地址開始的跳轉流程。為了使得上層應用程序與硬件中斷跳轉聯系起來,需要編寫一段中間的服務程序來進行連接。這樣的服務程序常被稱作中斷解析程序。
每個異常中斷對應一個4字節的空間,正好放置一條跳轉指令或者向PC寄存器賦值的數據訪問指令。理論上可以通過這兩種指令直接使得程序跳轉到對應的中斷處理程序中去。但實際上由于函數地址值為未知和其它一些問題,并不這么做。這里給出一種常用的中斷跳轉流程:
評論