ARM教學(xué)系統(tǒng)-06 異常中斷處理_第1頁
ARM教學(xué)系統(tǒng)-06 異常中斷處理_第2頁
ARM教學(xué)系統(tǒng)-06 異常中斷處理_第3頁
ARM教學(xué)系統(tǒng)-06 異常中斷處理_第4頁
ARM教學(xué)系統(tǒng)-06 異常中斷處理_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1提綱132ARM異常中斷處理概述中斷處理程序的安裝第六章異常中斷處理異常的響應(yīng)和退出各種異常中斷的處理42ARM異常中斷處理概述當(dāng)正常的程序執(zhí)行流程發(fā)生暫時的停止時,稱之為異常,例如處理一個外部的中斷請求。在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行。處理器允許多個異常同時發(fā)生,它們將會按固定的優(yōu)先級進(jìn)行處理。ARM體系結(jié)構(gòu)中的異常,與8位/16位體系結(jié)構(gòu)的中斷有很大的相似之處,但異常與中斷的概念并不完全等同。

ARM異常中斷處理概述3ARM體系結(jié)構(gòu)所支持的異常類型

異常類型具體含義復(fù)位復(fù)位電平有效時,產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位處理程序處執(zhí)行。未定義指令遇到不能處理的指令時,產(chǎn)生未定義指令異常。軟件中斷執(zhí)行SWI指令產(chǎn)生,用于用戶模式下的程序調(diào)用特權(quán)操作指令。指令預(yù)取中止處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問,產(chǎn)生指令預(yù)取中止異常。數(shù)據(jù)中止處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當(dāng)前指令訪問時,產(chǎn)生數(shù)據(jù)中止異常。IRQ外部中斷請求有效,且CPSR中的I位為0時,產(chǎn)生IRQ異常。FIQ快速中斷請求引腳有效,且CPSR中的F位為0時,產(chǎn)生FIQ異常。ARM異常中斷處理概述4異常向量表(ExceptionVectors)

地址異常進(jìn)入模式0x0000,0000復(fù)位管理模式0x0000,0004未定義指令未定義模式0x0000,0008軟件中斷管理模式0x0000,000C中止(預(yù)取指令)中止模式0x0000,0010中止(數(shù)據(jù))中止模式0x0000,0014保留保留0x0000,0018IRQIRQ0x0000,001CFIQFIQARM異常中斷處理概述5異常優(yōu)先級(ExceptionPriorities)

優(yōu)先級異常1(最高)復(fù)位2數(shù)據(jù)中止3FIQ4IRQ5預(yù)取指令中止6(最低)未定義指令、SWIARM異常中斷處理概述6對異常的響應(yīng)

對異常的響應(yīng)當(dāng)一個異常出現(xiàn)以后,ARM微處理器會執(zhí)行以下幾步操作將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時能從正確的位置重新開始執(zhí)行。將CPSR復(fù)制到相應(yīng)的SPSR(各異常中斷有自己的物理寄存器中)。根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。將寄存器R14_<Exception_Mode>設(shè)置成返回地址。強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。

7異常響應(yīng)偽代碼處理器處于Thumb狀態(tài),則當(dāng)異常向量地址加載入PC時,處理器自動切換到ARM狀態(tài)。ARM微處理器對異常的響應(yīng)過程用偽碼可以描述為:對異常的響應(yīng)R14_<Exception_Mode>=ReturnLinkSPSR_<Exception_Mode>=CPSRCPSR[4:0]=ExceptionModeNumberCPSR[5]=0;ARM狀態(tài)If<Exception_Mode>==ResetorFIQthenCPSR[6]=1 ;禁止FIQ中斷

CPSR[7]=1;禁止IRQ中斷

PC=ExceptionVectorAddress8從異常返回

異常處理完畢之后,ARM微處理器會執(zhí)行以下幾步操作從異常返回:將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。將SPSR復(fù)制回CPSR中。若在進(jìn)入異常處理時設(shè)置了中斷禁止位,要在此清除。 可以認(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行的,因此復(fù)位異常處理程序不需要返回。

對異常的響應(yīng)9中斷處理程序的安裝一般在系統(tǒng)的啟動代碼中安裝異常處理程序。大致可以分為兩種情況:0地址處存儲器為ROM/FLASH0地址處存儲器為RAM中斷處理程序的安裝10在ROM/FLASH中安裝中斷處理程序在ROM/FLASH的異常中斷向量表中,可以使用LDR指令直接向程序計數(shù)器PC中賦值,也可以直接使用跳轉(zhuǎn)指令轉(zhuǎn)到異常中斷處理程序。使用LDR指令:Vector_entry: LDR PC,=Reset_Handler LDR PC,=Undef_Handler LDR PC,=SWI_Handler 中斷處理程序的安裝11在ROM/FLASH中安裝中斷處理程序 LDR PC,=Prefetch_Handler LDR PC,=Abort_HandlerNOP LDR PC,=IRQ_Handler LDR PC,=FIQ_HandlerVector_tabler:Reset_Handler:.LONG Start_BootUndef_Handler:.LONG Undef_Isr……中斷處理程序的安裝12在ROM/FLASH中安裝中斷處理程序使用跳轉(zhuǎn)指令(只能在32MB范圍內(nèi)跳轉(zhuǎn)):Vector_entry: B Reset_Handler B Undef_Handler B SWI_Handler B Prefetch_Handler B Abort_HandlerNOP B IRQ_Handler B FIQ_Handler中斷處理程序的安裝13RAM中安裝中斷處理程序當(dāng)0地址處為RAM時,中斷向量表必須使用數(shù)據(jù)讀取指令直接指向PC中賦值的形式。而且必須使用下面的代碼把中斷向量從ROM中復(fù)制到RAM地址的0地址處的存儲空間中。

MOV r8,#0;r8指向RAM的0地址

ADR r9,Vector_Init_Block;r9指向ROM的中斷向量表;復(fù)制中斷向量表(8word)

LDMIA r9!,{r0-r7} STMIA r8!,{r0-r7}

中斷處理程序的安裝14ABORT(中止)

產(chǎn)生中止異常意味著對存儲器的訪問失敗。ARM微處理器在存儲器訪問周期內(nèi)檢查是否發(fā)生中止異常。中止異常包括兩種類型:指令預(yù)取中止:發(fā)生在指令預(yù)取時。數(shù)據(jù)中止:發(fā)生在數(shù)據(jù)訪問時。各種異常中斷的處理15指令預(yù)取異常中斷的處理系統(tǒng)中不包含MMU時,指令預(yù)取中止異常處理程序只是簡單的報告錯誤,然后退出;在使用MMU的系統(tǒng)中,則發(fā)生錯誤的指令觸發(fā)虛擬地址失效,在該失效處理程序中重新讀取該指令。指令預(yù)取異常是在有錯誤的指令被執(zhí)行時才觸發(fā)的。當(dāng)異常發(fā)生時,LR_abt寄存器沒有被更新,它指向引起該指令的后面1條指令。異常的返回地址應(yīng)該是該有問題的指令,即LR_abt-4處。各種異常中斷的處理16數(shù)據(jù)訪問異常中斷的處理系統(tǒng)中不包含MMU時,數(shù)據(jù)訪問中止異常處理程序只是簡單的報告錯誤,然后退出;在使用MMU的系統(tǒng)中,數(shù)據(jù)訪問中止異常處理程序要處理該數(shù)據(jù)訪問異常。當(dāng)異常發(fā)生時,LR_abt寄存器已經(jīng)被更新,它指向引起該異常的指令的后面2條指令。異常的返回地址是引起數(shù)據(jù)訪問中止異常中斷的指令,即LR_abt-8處。各種異常中斷的處理17ABORT(中止)處理函數(shù)的退出當(dāng)確定了中止的原因后,Abort處理程序均可以執(zhí)行以下指令從中止模式返回,無論是在ARM狀態(tài)還是Thumb狀態(tài):

SUBSPC,R14_abt,#4 ;指令預(yù)取中止

SUBSPC,R14_abt,#8 ;數(shù)據(jù)中止各種異常中斷的處理18FIQ(FastInterruptRequest)FIQ異常是為了支持高速數(shù)據(jù)傳輸或者通道處理而設(shè)計的。若將CPSR的F位置為1,則會禁止FIQ中斷,若將CPSR的F位清零,處理器會在指令執(zhí)行時檢查FIQ的輸入。注意只有在特權(quán)模式下才能改變F位的狀態(tài)。

可由外部通過對處理器上的nFIQ引腳輸入低電平產(chǎn)生FIQ。不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進(jìn)入FIQ模式,F(xiàn)IQ處理程序均可以執(zhí)行以下指令從FIQ模式返回:

SUBSPC,R14_fiq,#4各種異常中斷的處理19IRQ(InterruptRequest)

IRQ異常屬于正常的中斷請求,通過對處理器的nIRQ引腳輸入低電平產(chǎn)生,IRQ的優(yōu)先級低于FIQ,當(dāng)程序執(zhí)行進(jìn)入FIQ異常時,IRQ可能被屏蔽。若將CPSR的I位置為1,則會禁止IRQ中斷,若將CPSR的I位清零,處理器會在指令執(zhí)行完之前檢查IRQ的輸入。注意只有在特權(quán)模式下才能改變I位的狀態(tài)。不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進(jìn)入IRQ模式,IRQ處理程序均可以執(zhí)行以下指令從IRQ模式返回:

SUBSPC,R14_irq,#4各種異常中斷的處理20IRQ/FIQ處理程序示例STMFD sp!, {r0-r12,lr}//進(jìn)棧調(diào)用IRQ/FIQ處理程序LDMFD sp!, {r0-r12,lr}//出棧SUBS pc, lr,#4各種異常中斷的處理21UndefinedInstruction(未定義指令)當(dāng)ARM處理器遇到不能處理的指令時,會產(chǎn)生未定義指令異常。采用這種機(jī)制,可以通過軟件仿真擴(kuò)展ARM或Thumb指令集。處理器執(zhí)行以下程序返回,無論是在ARM狀態(tài)還是Thumb狀態(tài):

MOVSPC,R14_und以上指令恢復(fù)PC(從R14_und)和CPSR(從SPSR_und)的值,并返回到未定義指令后的下一條指令。各種異常中斷的處理22SWI(軟件中斷)

軟件中斷指令(SWI)用于進(jìn)入管理模式,常用于請求執(zhí)行特定的管理功能。軟件中斷處理程序執(zhí)行以下指令可以從SWI模式返回,無論是在ARM狀態(tài)還是Thumb狀態(tài):

MOVSPC,R14_svc

以上指令恢復(fù)PC(從R14_svc)和CPSR(從SPSR_svc)的值,并返回到SWI的下一條指令。各種異常中斷的處理23SWI一級處理程序 AREAToplevelSwi,CODE,READONLY EXPORTSWI_HandlerSWI_Handler:

STMFDsp!, {r0-r12,lr};保存寄存器

LDRr0, [lr,#-4];計算該SWI指令的地址,并把它讀取到寄存器R0中。

BIC r0, r0, #0xFF000000;將SWI指令中的24位立即數(shù)存放到R0寄存器中 ;在此調(diào)用二級處理程序

LDMFD sp!,{r0-r12,pc}^;返回,SPSR_mode自動恢復(fù)到CPSR中

END各種異常中斷的處理24SWI二級處理程序 CMP r0,#maxSWI LDRLS pc,[pc,r0,LSL#2] B SWIOutofRangeSWIJmpTable: DCB SWInum0 DCB SWInum1 DCB SWInum2 ……SWInum0:

……;立即數(shù)為0對應(yīng)的SWI中斷處理程序

BEndofSWISWInum1:

……;立即數(shù)為1對應(yīng)的SWI中斷處理程序

BEndofSWI……各種異常中斷的處理25異常進(jìn)入/退出小節(jié)

返回指令以前的狀態(tài)注意ARMR14_xThumbR14_xBLMOVPC,R14PC+4PC+21SWIMOVSPC,R14_svcPC+4PC+21UDEFMOVSPC,R14_undPC+4PC+21FIQSUBSPC,R14_fiq,#4PC+4PC+42IRQSUBSP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論