在我們平時使用計算機時我們敲擊鍵盤,計算機會對我做出響應(yīng)。這是什么原因呢?處理器又是如何響應(yīng)外圍請求的呢?其實這都是通過處理器的中斷機制實現(xiàn)的。ARM又是怎樣的中斷機制?讓我們一起探討吧!
在ARM處理器里主要是通過3中情況在控制程序執(zhí)行的:
1.流水方式執(zhí)行程序,PC的值是下一條指令的地址,即每執(zhí)行一條指令PC都加一個字的偏移。
2.通過跳轉(zhuǎn)指令來控制程序執(zhí)行。
B 跳轉(zhuǎn)到指定的指令處執(zhí)行。
BL 跳轉(zhuǎn)執(zhí)行,保存子程序地址并返回。
BX 跳轉(zhuǎn)執(zhí)行并切換到Thumb狀態(tài)。
BLX 三種方式組合。
3.通過異常中斷機制控制程序執(zhí)行。
當異常中斷發(fā)生時,系統(tǒng)執(zhí)行完當前指令后,將跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。在進入異常中斷處理程序執(zhí)行完時,程序返回到發(fā)生到產(chǎn)生中斷指令的下一條指令處執(zhí)行。在進入異常中斷處理程序時,要保存被中斷的程序的執(zhí)行現(xiàn)場,從異常中斷處理程序退出時,要恢復(fù)被中斷的程序的執(zhí)行現(xiàn)場。
在實際情況中ARM處理器在控制程序執(zhí)行時往往是以上3種方式結(jié)合執(zhí)行的。
ARM有以下幾種異常中斷種類:
呵呵,讓我們來看看ARM的異常中斷響應(yīng)過程吧!
1.保存處理器當前狀態(tài)、中斷屏蔽位及各條件標志位。怎樣保存呢?
ARM的6種模式下都有自己的SPSR,它就是通過把當前的CPSR保存到將要執(zhí)行異常中斷的SPSR_mode實現(xiàn)的。
2.設(shè)置當前的CPSR的相應(yīng)的標志位。
設(shè)置M、I、F等控制位。
3.將lr_mode設(shè)成返回地址。
4.將PC指向中斷向量表的地址,跳轉(zhuǎn)到對應(yīng)的中斷服務(wù)程序處執(zhí)行。
5.恢復(fù)被中斷處理的處理器狀態(tài)。(將SPSR_mode復(fù)制到CPSR)
6.返回到發(fā)生異常中斷的下一條指令處執(zhí)行。(即PC = lr_mode)
用偽代碼描述如下:
lr_mode = pc
spsr_mode = cpsr
cpsr[4:0] = exception mode
if
cpsr[6] = 1
cpsr[7] = 1
pc = exception mode vector address
cpsr = spsr_mode
pc = lr_mode