ARM及嵌入式開(kāi)發(fā)近年越來(lái)越熱,特別是android與linux在手機(jī)、平板等許多消費(fèi)類電子及工業(yè)設(shè)備中越來(lái)越成熟的應(yīng)用。同學(xué)們?cè)?a href="http://m.jkendeljohnson.com/" target="_blank">嵌入式培訓(xùn)學(xué)習(xí)過(guò)程中會(huì)遇到很多問(wèn)題,其中一個(gè)就是——ARM的異常中斷響應(yīng)過(guò)程是怎樣的?
當(dāng)發(fā)生異常時(shí),除了復(fù)位異常立即中止當(dāng)前指令外,處理器盡量完成當(dāng)前指令,然后脫離當(dāng)前的指令處理序列去處理異常。嵌入式培訓(xùn)總結(jié)ARM異常處理器對(duì)異常中斷響應(yīng)過(guò)程是這樣子的:
① 將CPSR的內(nèi)存保存到將要執(zhí)行的異常中斷對(duì)應(yīng)的SPSR中,以實(shí)現(xiàn)對(duì)處理器當(dāng)前狀態(tài)、中斷屏蔽及各條件標(biāo)志位的保存。各異常中斷模式都有自己相應(yīng)的物理SPSR寄存器。
② 設(shè)置當(dāng)前狀態(tài)寄存器CPSR中的相應(yīng)位。
設(shè)置CPSR模式控制位CPSR[4:0],,是處理器進(jìn)入相應(yīng)的執(zhí)行模式;
設(shè)置中斷標(biāo)志位(CPSR[6]=1),禁止IRQ中斷;
當(dāng)進(jìn)入Reset或FIQ模式時(shí),還要設(shè)置中斷標(biāo)志位(CPSR[7]=1),禁止FIQ中斷。
③ 將引起異常指令的下一條指令的地址保存到新的異常工作模式的R14即R14_mode中,使異常處理程序執(zhí)行完后能正確返回原程序。
④ 給程序計(jì)數(shù)器強(qiáng)制賦值,是程序從ARM體系中的異常工作模式表中給出的相應(yīng)的矢量地址開(kāi)始執(zhí)行中斷處理程序。一般來(lái)說(shuō),矢量地址處將包含一條指向相應(yīng)程序的轉(zhuǎn)移指令,從而可跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行異常中斷處理程序。
ARM處理器對(duì)異常的響應(yīng)過(guò)程可用偽代碼描述:
R14_<exception_mode>=return link
SPSR_<exception_mode>=CPSR
CPSR[4:0]=exception mode number
CPSR[5]=0
CPSR[6]=1
If<exception-mode>=Reset or FIQ then
CPSR[7]=1
PC=exception vector address
上面每個(gè)異常模式對(duì)應(yīng)有2個(gè)寄存器R13_<mode>、 R14_<mode>,分別保存相應(yīng)模式下的堆棧指針、返回地址。堆棧指針可用來(lái)定義一個(gè)存儲(chǔ)區(qū)域保存其他用戶寄存器,這樣異常處理程序就可使用這些寄存器。
FIQ模式還有額外的專用寄存器R8_fiq~R12_fiq,使用這些寄存器可加快快速中斷的處理速度。
ARM嵌入式培訓(xùn)機(jī)構(gòu)哪個(gè)好?粵嵌嵌入式培訓(xùn)開(kāi)設(shè)了適合零基礎(chǔ)學(xué)員的階梯式課程安排,不僅有適合零基礎(chǔ)的學(xué)習(xí)的基礎(chǔ)班,更有適合有基礎(chǔ)的就業(yè)班,歡迎你來(lái)學(xué)習(xí)。