02 arm7 體系結(jié)構(gòu)3學(xué)時2 4 2 arm7中斷與異常_第1頁
02 arm7 體系結(jié)構(gòu)3學(xué)時2 4 2 arm7中斷與異常_第2頁
02 arm7 體系結(jié)構(gòu)3學(xué)時2 4 2 arm7中斷與異常_第3頁
02 arm7 體系結(jié)構(gòu)3學(xué)時2 4 2 arm7中斷與異常_第4頁
02 arm7 體系結(jié)構(gòu)3學(xué)時2 4 2 arm7中斷與異常_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2.4ARM7處理器中斷異常1. ARM7異常概念2. ARM7中斷(異常)3. 異常進(jìn)入4. ARM7中斷向量表5. 異常退出6. 異常處理其他特性7. 復(fù)位8. 異常處理模板源1. ARM7異常概念只要正常的程序流被暫時中止,處理器就進(jìn)入異常模式。例如響應(yīng)一個來自外設(shè)的中斷。在處理異常之前,ARM7內(nèi)核保存當(dāng)前的處理器狀態(tài),這樣當(dāng)處理程序結(jié)束時可以恢復(fù)執(zhí)行原來的程序。如果同時發(fā)生兩個或更多異常,那么將按照固定的優(yōu)先順序來處理異常。2.ARM7中斷(異常)源ARM7異常中斷源共有7個異常源(中斷入口)(1) 復(fù)位(2) 執(zhí)行未定義(非法)指令異常(3)SWI(4) 取指(存儲器越界,取不到指

2、令,要取指令未裝入 高速緩存,未命中)異常(5) 數(shù)據(jù)異常(數(shù)據(jù)存儲器操作越界,取不到數(shù)據(jù)或要 寫的數(shù)據(jù)存儲器,未裝入高速緩存,未命中)(6) 保留未用(7) IRQ外設(shè)(8) FIRQ外設(shè)中斷中斷3.異常進(jìn)入異常發(fā)生后,ARM7內(nèi)核作以下處理:(1) 在LR中保存下一條指令的地址當(dāng)ARM狀態(tài)發(fā)生異常,ARM7將當(dāng)前指令地址加4或加8復(fù)制到LR中;當(dāng)Thumb狀態(tài)發(fā)生異常,ARM7將當(dāng)前指令地址加4或加8 復(fù)制到LR中; 異常處理器程序不必確定中斷前的狀態(tài)。(2) 將CPSR復(fù)制到適當(dāng)?shù)腟PSR中(3) 將CPSR模式位強制設(shè)置對應(yīng)異常模式值A(chǔ)RM7在響應(yīng)中斷異常時,自動禁止中斷,防止不受控制

3、的異常嵌套;異??偸窃贏RM狀態(tài)中進(jìn)行處理,Thumb狀態(tài)發(fā)生異常,會自動切換到ARM狀態(tài)。(4) 強制PC從相關(guān)的異常向量處取指用戶程序,假定當(dāng)前處理器狀態(tài)為Thumb狀態(tài)、允SYS1?0. . .?LR_irqirqR_SSP.圖示進(jìn)入異常過程用戶程序運行時發(fā)生IRQ中斷,硬件完成以下動作:IRQ模式系統(tǒng)模式(1) 程序在系統(tǒng)模式下運行程序AIRQ服務(wù)程序 將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器許IRQ中斷;程序 置位I位(禁止IRQ中斷) 清零T位(進(jìn)入ARM狀態(tài)) 設(shè)置MOD位,切換處理器模式至IRQ模式LR_sysBackAddrLR PCCPSR寄存器組JumpAddr

4、 將下一條指令的地址存入IRQ模式的LR寄存器NZCV. . .IFTMOD?. . .1?0IRQSPSR? . .0?1SYS 將跳轉(zhuǎn)地址存入PC,實現(xiàn)跳轉(zhuǎn)“?”表示對該位不關(guān)心4.ARM7中斷向量表無需文字池,跳轉(zhuǎn)目的地址直接編碼在指令中,PC+相對偏移序號ROM異常處理程序入口地址ROM中的異常處理跳轉(zhuǎn)表10x0000_0000B ResetInit 20x0000_0004B Undef_Handler 30x0000_0008B SWI_Handler 40x0000_000CB Prefetch_Handler 50x0000-0010B DataAbort_Handler60x

5、0000_0014DCD 0xb9205f80 70x0000_0018B IRQ_Handelr 80x0000_001cB FIRQ_Handler 0x0000_0020ARM7 中斷向量表在離指令不遠(yuǎn)的附件,編譯器自動生成文字池序號異常處理程序入口地址ROM異常處理跳轉(zhuǎn)表10x0000_0000LDR PC, =ResetInit 20x0000_0004LDR PC, =Undef_Handler30x0000_0008LDR PC, =SWI_Handler 40x0000_000CLDR PC, =Prefetch_Handler50x0000-0010LDR PC, =Data

6、Abort_Handler 60x0000_0014DCD 0xb9205f80 70x0000_0018LDR PC, =IRQ_Handler80x0000_001cLDR PC, =FIRQ_Handler 0x0000_0020;中斷向量表;. Entry code32LDR LDR LDR LDR LDR DCD LDR LDRPC, =ResetInitPC, =Undef_Handler PC, =SWI_Handler PC, Prefetch_HandlerPC, DataAbort_Handler 0xb9205f80PC, =IRQ_Handler PC, =FIRQ_H

7、andler;文字池(編譯器自動生成)DCD ResetInitDCD Undef_Handler.;處理例程代碼ResetInit IRQ_Handler FIRQ_Handler5.異常退出異常結(jié)束,異常處理程序必須:(1) 將LR中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;(2) 將SPSR的值復(fù)制回CPSR;(3) 清零在入口置位的中斷禁止標(biāo)志?;謴?fù)CPSR的動作會將T、F和I位自動恢復(fù)值。常發(fā)生前的SYS1?0. . .?LR_irqirqR_SSP.IRQ0?1. . .?JumpAddr圖示退出異常過程IRQ模式系統(tǒng)模式異常處理結(jié)束,異常處理程序完成以下動作:程序

8、AIRQ服務(wù)程序?qū)PSR寄存器的值復(fù)制回CPSR寄存器;程序?qū)R寄存的值減去一個常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。LR_sysBackAddrLR PCCPSR寄存器組BackAddr-4NZCV. . .IFTMOD?. . .0?1SYSSPSR? . .0?1SYS“?”表示對該位不關(guān)心return各類ARM7異常返回方式匯總,注意:“MOVS PC,R14_svc”是指在管理模式執(zhí)行MOVS PC,R14指令?!癕OVS PC,R14_und”、“SUBS PC,R14_abt,#4”等指令也是類似的。上述表格中PC代表當(dāng)前執(zhí)行指令地址,而不是真實PC計數(shù)器值異常或入

9、口(中斷源)返回指令壓入RL的返回地址備注ARM R14_xThumb R14_xBLMOVPC,R14PC+4PC+2此處PC為BL SWI等指令取指或預(yù)取指中止指令的地址SWIMOVS PC,R14_svcPC+4PC+2未定義的指令MOVS PC,R14_undPC+4PC+2預(yù)取指中止SUBSPC,R14_abt,#4PC+8PC+4快中斷SUBSPC,R14_fiq,#4PC+8PC+4此處PC為由于FIQ或IRQ沒有被執(zhí)行的指令的地址中斷SUBSPC,R14_irq,#4PC+8PC+4數(shù)據(jù)中止SUBSPC,R14_abt,#8PC+12PC+8此處PC為產(chǎn)生數(shù)據(jù)中止的裝載或保存指

10、令的地址。復(fù)位無復(fù)位時保存在R14_svc中的值不可預(yù)知。6.異常處理其他特性(1) 快速中斷請求FIQ用于對突發(fā) 的快速響應(yīng),由外部nFIQ輸入產(chǎn)生;快中斷模式有8個專用的寄存器,滿足FIQ程序的寄存器需要,不需額外Reg情況下,不必保護(hù)其他上下文Reg,加速了切換效率;FIQ處理程序可以執(zhí)行下面的指令從中斷返回:SUBSPC,R14_fiq,#4在模式中,程序員可以通過置位CPSR中的F位來禁止FIQ異常。(2)中斷請求(IRQ)。(1) IRQ異常由nIRQ輸入端低電平產(chǎn)生的正常中斷;(在具體的芯片中,nIRQ由片內(nèi)外設(shè)拉低,nIRQ是內(nèi)核的一個信號,對用戶不可見)(2) IRQ的優(yōu)先級

11、低于FIQ;(3) IRQ與用戶/系統(tǒng)模式共用一組積存器;(4) 在模式下,可通過置位CPSR中的I 位禁止IRQ;(5) FIQ處理程序可通過執(zhí)行下面的指令返回:SUBSPC,R14_irq,#4(3)異常進(jìn)入退出CPSR狀態(tài)注:表中的I和F, 表示該位不受影響,保留原來的狀態(tài)地址異常類型進(jìn)入時的模式進(jìn)入時I的狀態(tài)進(jìn)入時F的狀態(tài)0x0000 0000復(fù)位管理禁止禁止0x0000 0004未定義指令未定義IF0x0000 0008軟件中斷管理禁止F0x0000 000C中止(預(yù)?。┲兄笽F0x0000 0010中止(數(shù)據(jù))中止IF0x0000 0014保留保留0x0000 0018IRQ中斷禁

12、止F0x0000 001CFIQ快中斷禁止禁止(4) 其他異常源返見回地址計算匯總表此處PC值發(fā)生異常時,正在執(zhí)行指令地址異?;蛉肟?中斷源)返回指令壓入RL的值備注ARMR14_xThumb R14_xBLMOVPC,R14PC+4PC+2此處PC為BL,SWI等指令取指或預(yù)取指中止指令的地址SWIMOVS PC,R14_svcPC+4PC+2未定義的指令MOVS PC,R14_undPC+4PC+2預(yù)取指中止SUBSPC,R14_abt,#4PC+8PC+4快中斷SUBSPC,R14_fiq,#4PC+8PC+4此處PC為由于FIQ或IRQ沒有被執(zhí)行的指令的地址中斷SUBSPC,R14_i

13、rq,#4PC+8PC+4數(shù)據(jù)中止SUBSPC,R14_abt,#8PC+12PC+8此處PC為產(chǎn)生數(shù)據(jù)中止的裝載或保存指令的地址。復(fù)位無復(fù)位時保存在R14_svc中的值不可預(yù)知。(5) 異常優(yōu)先級多個異常同時發(fā)生,固定的優(yōu)先級決定了被處理的順序:注意: 未定義的指令和SWI異?;コ?因為同一條指令不能既是未定義的,又能產(chǎn)生有效的軟件中斷; FIQ使能,并且FIQ和數(shù)據(jù)中止異常同時發(fā)生,處理順序為:ARM7首先進(jìn)入數(shù)據(jù)中止處理程序,然后跳轉(zhuǎn)到FIQ向量;在FIQ處理結(jié)束后返回到數(shù)據(jù)中止處理程序; 數(shù)據(jù)中止的優(yōu)先級高于FIQ, 以確保數(shù)據(jù)轉(zhuǎn)移錯誤不會被漏過.異常類型優(yōu)先級復(fù)位1(最高優(yōu)先級)優(yōu)先

14、級降低數(shù)據(jù)中止2FIQ3IRQ4預(yù)取中止5未定義指令6SWI7(最低優(yōu)先級)(6)最大中斷延遲發(fā)生FIQ時,最壞情況是正在執(zhí)行一條裝載所有寄存器的指令“LDM”(它耗時最長),同時發(fā)生了FIQ和數(shù)據(jù)中止異常,在響應(yīng)FIQ中斷之前要先把正在執(zhí)行的指令完成,然后先進(jìn)入數(shù)據(jù)中止異常,再馬上跳轉(zhuǎn)到FIQ異常入口,所以延遲時間包含:FIQ延遲時間Tsyncmax +Tldm +Texc +Tfiq=27個周期在40MHz處理器時鐘時,最大延遲時間略少于0.7us。在此時間結(jié)束后,ARM7執(zhí)行位于0x1C處的指令。IRQ延遲時間: 與FIQ基本相同,加現(xiàn)場保護(hù)時間就更長(7)最小中斷延遲=4個處理器周期F

15、IQ或IRQ的最小中斷延遲是請求通過同步器的時間Tsyncmin加上Tfiq,共需4個處理器周期.7.復(fù)位當(dāng)nRESET信號被拉低時(一般外部復(fù)位引腳電平的變化和芯片的其它復(fù)位源會改變這個內(nèi)核信號),ARM7放棄正在執(zhí)行的指令。在復(fù)位后,除PC和CPSR之外的所有寄存器的值都不確定。當(dāng)nRESET信號再次變?yōu)楦唠娖綍r,ARM處理器執(zhí)行下 列操作:1)強制M4:0變?yōu)閎10011(管理模式);2) 置位CPSR中的I和F位;3) 清零CPSR中的T位;4) 強制PC從地址0x00開始對下一條指令進(jìn)行取指;5) 返回到ARM狀態(tài)并恢復(fù)執(zhí)行 。如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實現(xiàn)返回。中斷處理代碼的開始部分和退出部分8.異常處理模板。SUBLR,LR,#4;計算返回地址STMFDSP!,R0-R3,LR;保存使用到的寄存器. . .LDMFDSP!,R0-R3,PC;中斷返回注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“”符號表示這是一條特殊形式的指令指令

溫馨提示

  • 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

提交評論