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