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