




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2.4ARM7處理器中斷異常1. ARM7異常概念2. ARM7中斷(異常)3. 異常進(jìn)入4. ARM7中斷向量表5. 異常退出6. 異常處理其他特性7. 復(fù)位8. 異常處理模板源1. ARM7異常概念只要正常的程序流被暫時(shí)中止,處理器就進(jìn)入異常模式。例如響應(yīng)一個(gè)來自外設(shè)的中斷。在處理異常之前,ARM7內(nèi)核保存當(dāng)前的處理器狀態(tài),這樣當(dāng)處理程序結(jié)束時(shí)可以恢復(fù)執(zhí)行原來的程序。如果同時(shí)發(fā)生兩個(gè)或更多異常,那么將按照固定的優(yōu)先順序來處理異常。2.ARM7中斷(異常)源ARM7異常中斷源共有7個(gè)異常源(中斷入口)(1) 復(fù)位(2) 執(zhí)行未定義(非法)指令異常(3)SWI(4) 取指(存儲(chǔ)器越界,取不到指
2、令,要取指令未裝入 高速緩存,未命中)異常(5) 數(shù)據(jù)異常(數(shù)據(jù)存儲(chǔ)器操作越界,取不到數(shù)據(jù)或要 寫的數(shù)據(jù)存儲(chǔ)器,未裝入高速緩存,未命中)(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模式位強(qiáng)制設(shè)置對(duì)應(yīng)異常模式值A(chǔ)RM7在響應(yīng)中斷異常時(shí),自動(dòng)禁止中斷,防止不受控制
3、的異常嵌套;異常總是在ARM狀態(tài)中進(jìn)行處理,Thumb狀態(tài)發(fā)生異常,會(huì)自動(dòng)切換到ARM狀態(tài)。(4) 強(qiáng)制PC從相關(guān)的異常向量處取指用戶程序,假定當(dāng)前處理器狀態(tài)為Thumb狀態(tài)、允SYS1?0. . .?LR_irqirqR_SSP.圖示進(jìn)入異常過程用戶程序運(yùn)行時(shí)發(fā)生IRQ中斷,硬件完成以下動(dòng)作:IRQ模式系統(tǒng)模式(1) 程序在系統(tǒng)模式下運(yùn)行程序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,實(shí)現(xiàn)跳轉(zhuǎn)“?”表示對(duì)該位不關(guān)心4.ARM7中斷向量表無需文字池,跳轉(zhuǎn)目的地址直接編碼在指令中,PC+相對(duì)偏移序號(hào)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)的附件,編譯器自動(dòng)生成文字池序號(hào)異常處理程序入口地址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;文字池(編譯器自動(dòng)生成)DCD ResetInitDCD Undef_Handler.;處理例程代碼ResetInit IRQ_Handler FIRQ_Handler5.異常退出異常結(jié)束,異常處理程序必須:(1) 將LR中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;(2) 將SPSR的值復(fù)制回CPSR;(3) 清零在入口置位的中斷禁止標(biāo)志。恢復(fù)CPSR的動(dòng)作會(huì)將T、F和I位自動(dòng)恢復(fù)值。常發(fā)生前的SYS1?0. . .?LR_irqirqR_SSP.IRQ0?1. . .?JumpAddr圖示退出異常過程IRQ模式系統(tǒng)模式異常處理結(jié)束,異常處理程序完成以下動(dòng)作:程序
8、AIRQ服務(wù)程序?qū)PSR寄存器的值復(fù)制回CPSR寄存器;程序?qū)R寄存的值減去一個(gè)常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。LR_sysBackAddrLR PCCPSR寄存器組BackAddr-4NZCV. . .IFTMOD?. . .0?1SYSSPSR? . .0?1SYS“?”表示對(duì)該位不關(guān)心return各類ARM7異常返回方式匯總,注意:“MOVS PC,R14_svc”是指在管理模式執(zhí)行MOVS PC,R14指令。“MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等指令也是類似的。上述表格中PC代表當(dāng)前執(zhí)行指令地址,而不是真實(shí)PC計(jì)數(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ù)位時(shí)保存在R14_svc中的值不可預(yù)知。6.異常處理其他特性(1) 快速中斷請(qǐng)求FIQ用于對(duì)突發(fā) 的快速響應(yīng),由外部nFIQ輸入產(chǎn)生;快中斷模式有8個(gè)專用的寄存器,滿足FIQ程序的寄存器需要,不需額外Reg情況下,不必保護(hù)其他上下文Reg,加速了切換效率;FIQ處理程序可以執(zhí)行下面的指令從中斷返回:SUBSPC,R14_fiq,#4在模式中,程序員可以通過置位CPSR中的F位來禁止FIQ異常。(2)中斷請(qǐng)求(IRQ)。(1) IRQ異常由nIRQ輸入端低電平產(chǎn)生的正常中斷;(在具體的芯片中,nIRQ由片內(nèi)外設(shè)拉低,nIRQ是內(nèi)核的一個(gè)信號(hào),對(duì)用戶不可見)(2) IRQ的優(yōu)先級(jí)
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)入時(shí)的模式進(jìn)入時(shí)I的狀態(tài)進(jìn)入時(shí)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) 其他異常源返見回地址計(jì)算匯總表此處PC值發(fā)生異常時(shí),正在執(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ù)位時(shí)保存在R14_svc中的值不可預(yù)知。(5) 異常優(yōu)先級(jí)多個(gè)異常同時(shí)發(fā)生,固定的優(yōu)先級(jí)決定了被處理的順序:注意: 未定義的指令和SWI異常互斥;因?yàn)橥粭l指令不能既是未定義的,又能產(chǎn)生有效的軟件中斷; FIQ使能,并且FIQ和數(shù)據(jù)中止異常同時(shí)發(fā)生,處理順序?yàn)?ARM7首先進(jìn)入數(shù)據(jù)中止處理程序,然后跳轉(zhuǎn)到FIQ向量;在FIQ處理結(jié)束后返回到數(shù)據(jù)中止處理程序; 數(shù)據(jù)中止的優(yōu)先級(jí)高于FIQ, 以確保數(shù)據(jù)轉(zhuǎn)移錯(cuò)誤不會(huì)被漏過.異常類型優(yōu)先級(jí)復(fù)位1(最高優(yōu)先級(jí))優(yōu)先
14、級(jí)降低數(shù)據(jù)中止2FIQ3IRQ4預(yù)取中止5未定義指令6SWI7(最低優(yōu)先級(jí))(6)最大中斷延遲發(fā)生FIQ時(shí),最壞情況是正在執(zhí)行一條裝載所有寄存器的指令“LDM”(它耗時(shí)最長(zhǎng)),同時(shí)發(fā)生了FIQ和數(shù)據(jù)中止異常,在響應(yīng)FIQ中斷之前要先把正在執(zhí)行的指令完成,然后先進(jìn)入數(shù)據(jù)中止異常,再馬上跳轉(zhuǎn)到FIQ異常入口,所以延遲時(shí)間包含:FIQ延遲時(shí)間Tsyncmax +Tldm +Texc +Tfiq=27個(gè)周期在40MHz處理器時(shí)鐘時(shí),最大延遲時(shí)間略少于0.7us。在此時(shí)間結(jié)束后,ARM7執(zhí)行位于0x1C處的指令。IRQ延遲時(shí)間: 與FIQ基本相同,加現(xiàn)場(chǎng)保護(hù)時(shí)間就更長(zhǎng)(7)最小中斷延遲=4個(gè)處理器周期F
15、IQ或IRQ的最小中斷延遲是請(qǐng)求通過同步器的時(shí)間Tsyncmin加上Tfiq,共需4個(gè)處理器周期.7.復(fù)位當(dāng)nRESET信號(hào)被拉低時(shí)(一般外部復(fù)位引腳電平的變化和芯片的其它復(fù)位源會(huì)改變這個(gè)內(nèi)核信號(hào)),ARM7放棄正在執(zhí)行的指令。在復(fù)位后,除PC和CPSR之外的所有寄存器的值都不確定。當(dāng)nRESET信號(hào)再次變?yōu)楦唠娖綍r(shí),ARM處理器執(zhí)行下 列操作:1)強(qiáng)制M4:0變?yōu)閎10011(管理模式);2) 置位CPSR中的I和F位;3) 清零CPSR中的T位;4) 強(qiáng)制PC從地址0x00開始對(duì)下一條指令進(jìn)行取指;5) 返回到ARM狀態(tài)并恢復(fù)執(zhí)行 。如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實(shí)現(xiàn)返回。中斷處理代碼的開始部分和退出部分8.異常處理模板。SUBLR,LR,#4;計(jì)算返回地址STMFDSP!,R0-R3,LR;保存使用到的寄存器. . .LDMFDSP!,R0-R3,PC;中斷返回注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“”符號(hào)表示這是一條特殊形式的指令指令
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告應(yīng)急預(yù)案管理辦法
- 影視版權(quán)登記管理辦法
- 各類資金賬戶管理辦法
- 護(hù)理管理人員管理辦法
- 肝臟中醫(yī)課件
- 室內(nèi)培訓(xùn)課件舞蹈圖片
- 肝癌晚期護(hù)理
- 二七區(qū)全區(qū)統(tǒng)考數(shù)學(xué)試卷
- 芬蘭八年級(jí)的數(shù)學(xué)試卷
- 肚子響中醫(yī)辯證課件
- 2025年銀行反洗錢知識(shí)競(jìng)賽考試卷庫90題
- 算法用戶標(biāo)簽管理制度
- 《選礦廠安全生產(chǎn)標(biāo)準(zhǔn)化評(píng)分辦法》
- 暗夜旅游地光污染治理-洞察及研究
- 護(hù)士職業(yè)損傷防護(hù)課件
- 期末試卷(含答案)2024-2025學(xué)年四年級(jí)下冊(cè)數(shù)學(xué)北師大版
- 《客艙安全與應(yīng)急處置》-課件:火災(zāi)的基礎(chǔ)知識(shí)
- 自然資源執(zhí)法監(jiān)察工作規(guī)范培訓(xùn)課件
- 部編版《語文》三年級(jí)下冊(cè)全冊(cè)教案及反思
- NB∕T 10731-2021 煤礦井下防水密閉墻設(shè)計(jì)施工及驗(yàn)收規(guī)范
- 《干部履歷表》(1999版電子版)
評(píng)論
0/150
提交評(píng)論