




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、嵌入式系統(tǒng)教案,武漢創(chuàng)維特信息技術(shù)有限公司,2020/8/28,2,提綱,1,3,2,ARM 異常中斷處理概述,中斷處理程序的安裝,第六章 異常中斷處理,異常的響應(yīng)和退出,各種異常中斷的處理,4,3,ARM異常中斷處理概述,當正常的程序執(zhí)行流程發(fā)生暫時的停止時,稱之為異常,例如處理一個外部的中斷請求。在處理異常之前,當前處理器的狀態(tài)必須保留,這樣當異常處理完成之后,當前程序可以繼續(xù)執(zhí)行。處理器允許多個異常同時發(fā)生,它們將會按固定的優(yōu)先級進行處理。 ARM體系結(jié)構(gòu)中的異常,與8位/16位體系結(jié)構(gòu)的中斷有很大的相似之處,但異常與中斷的概念并不完全等同。,ARM異常中斷處理概述,4,ARM體系結(jié)構(gòu)所
2、支持的異常類型,ARM異常中斷處理概述,5,異常向量表(Exception Vectors),ARM異常中斷處理概述,6,異常優(yōu)先級(Exception Priorities),ARM異常中斷處理概述,7,對異常的響應(yīng),當一個異常出現(xiàn)以后,ARM微處理器會執(zhí)行以下幾步操作 將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時能從正確的位置重新開始執(zhí)行。 將CPSR復制到相應(yīng)的SPSR中。 根據(jù)異常類型,強制設(shè)置CPSR的運行模式位。 強制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。,對異常的響應(yīng),8,異常響應(yīng)偽代碼,處理器處于Thumb狀態(tài),則當異常
3、向量地址加載入PC時,處理器自動切換到ARM狀態(tài)。ARM微處理器對異常的響應(yīng)過程用偽碼可以描述為: R14_ = Return Link SPSR_ = CPSR CPSR4:0 = Exception Mode Number CPSR5 = 0 If = Reset or FIQ then CPSR6 = 1 CPSR7 = 1 PC = Exception Vector Address,對異常的響應(yīng),9,從異常返回,異常處理完畢之后,ARM微處理器會執(zhí)行以下幾步操作從異常返回: 將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。 將SPSR復制回CPSR中。 若在進入異常處理時設(shè)置了中斷禁
4、止位,要在此清除。 可以認為應(yīng)用程序總是從復位異常處理程序開始執(zhí)行的,因此復位異常處理程序不需要返回。,對異常的響應(yīng),10,中斷處理程序的安裝,一般在系統(tǒng)的啟動代碼中安裝異常處理程序。大致可以分為兩種情況: 0地址處存儲器為ROM/FLASH 0地址處存儲器為RAM,中斷處理程序的安裝,11,在ROM/FLASH中安裝中斷處理程序,在ROM/FLASH的異常中斷向量表中,可以使用LDR指令直接向程序計數(shù)器PC中賦值,也可以直接使用跳轉(zhuǎn)指令轉(zhuǎn)到異常中斷處理程序。 使用LDR指令: Vector_entry: LDRPC, Reset_Handle LDRPC, Undef_Handle LDRP
5、C, SWI_Handle,中斷處理程序的安裝,12,在ROM/FLASH中安裝中斷處理程序,LDRPC, Prefetch_Handle LDRPC, Abort_Handle NOP LDRPC, IRQ_Handle LDRPC, FIQ_Handle Vector_table: Reset_Handle: .LONGStart_Boot Undef_Handle: .LONGUndef_Isr ,中斷處理程序的安裝,13,在ROM/FLASH中安裝中斷處理程序,使用跳轉(zhuǎn)指令: Vector_entry: BReset_Handle BUndef_Handle BSWI_Handle B
6、Prefetch_Handle BAbort_Handle NOP BIRQ_Handle BFIQ_Handle,中斷處理程序的安裝,14,RAM中安裝中斷處理程序,當0地址處為RAM時,中斷向量表必須使用數(shù)據(jù)讀取指令直接指向PC中賦值的形式。而且必須把中斷向量從ROM中復制到RAM地址的0地址處。 MOVr8, #0 ADRr9, Vector_Init_Block LDMIAr9!, r0-r7 STMIAr8!, r0-r7,中斷處理程序的安裝,15,在C程序中安裝異常中斷處理程序,中斷向量表使用數(shù)據(jù)處理指令的情況 在中斷向量vector處安裝location處指向的處理程序 unsi
7、gned ist_handler( unsigned location, unsigned *vector) unsigned vec, oldvec; vec = (location (unsigned)vector 0 x08) | 0 xe59ff000; oldvec = *vector; *vector = vec; return oldvec; ,中斷處理程序的安裝,16,在C程序中安裝異常中斷處理程序,中斷向量表使用跳轉(zhuǎn)指令的情況 在中斷向量vector處安裝routine處理程序 unsigned ist_handler( unsigned routine, unsigned
8、*vector) unsigned vec, oldvec; vec = (routine (vector 0 x08)2); vec = 0 xea000000 | vec; oldvec = *vector; *vector = vec; return oldvec; ,中斷處理程序的安裝,17,ABORT(中止),產(chǎn)生中止異常意味著對存儲器的訪問失敗。ARM微處理器在存儲器訪問周期內(nèi)檢查是否發(fā)生中止異常。 中止異常包括兩種類型: 指令預取中止:發(fā)生在指令預取時。 數(shù)據(jù)中止:發(fā)生在數(shù)據(jù)訪問時。,各種異常中斷的處理,18,指令預取異常中斷的處理,系統(tǒng)中不包含MMU時,指令預取中止異常處理程序
9、只是簡單的報告錯誤,然后退出; 在使用MMU的系統(tǒng)中,則發(fā)生錯誤的指令觸發(fā)虛擬地址失效,在該失效處理程序中重新讀取該指令。指令預取異常是在有錯誤的指令被執(zhí)行時才觸發(fā)的。當異常發(fā)生時,Lr_abt寄存器沒有被更新,它指向引起該指令的后面1條指令。 異常的返回地址應(yīng)該是該有問題的指令,即Lr_abt4處。,各種異常中斷的處理,19,數(shù)據(jù)訪問異常中斷的處理,系統(tǒng)中不包含MMU時,數(shù)據(jù)訪問中止異常處理程序只是簡單的報告錯誤,然后退出; 在使用MMU的系統(tǒng)中,數(shù)據(jù)訪問中止異常處理程序要處理該數(shù)據(jù)訪問異常。當異常發(fā)生時,Lr_abt寄存器已經(jīng)被更新,它指向引起該異常的指令的后面2條指令。 異常的返回地址是
10、引起數(shù)據(jù)訪問中止異常中斷的指令,即Lr_abt8處。,各種異常中斷的處理,20,ABORT(中止)處理函數(shù)的退出,當確定了中止的原因后,Abort處理程序均可以執(zhí)行以下指令從中止模式返回,無論是在ARM狀態(tài)還是Thumb狀態(tài): SUBS PC, R14_abt, #4;指令預取中止 SUBS PC, R14_abt, #8;數(shù)據(jù)中止,各種異常中斷的處理,21,FIQ(Fast Interrupt Request),FIQ異常是為了支持數(shù)據(jù)傳輸或者通道處理而設(shè)計的。 若將CPSR的F位置為1,則會禁止FIQ中斷,若將CPSR的F位清零,處理器會在指令執(zhí)行時檢查FIQ的輸入。注意只有在特權(quán)模式下才
11、能改變F位的狀態(tài)。 可由外部通過對處理器上的nFIQ引腳輸入低電平產(chǎn)生FIQ。不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進入FIQ模式,F(xiàn)IQ處理程序均可以執(zhí)行以下指令從FIQ模式返回: SUBS PC,R14_fiq ,#4,各種異常中斷的處理,22,IRQ(Interrupt Request),IRQ異常屬于正常的中斷請求,可通過對處理器的nIRQ引腳輸入低電平產(chǎn)生,IRQ的優(yōu)先級低于FIQ,當程序執(zhí)行進入FIQ異常時,IRQ可能被屏蔽。 若將CPSR的I位置為1,則會禁止IRQ中斷,若將CPSR的I位清零,處理器會在指令執(zhí)行完之前檢查IRQ的輸入。注意只有在特權(quán)模式下才能改變I位的狀態(tài)。
12、不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進入IRQ模式,IRQ處理程序均可以執(zhí)行以下指令從IRQ模式返回: SUBS PC , R14_irq , #4,各種異常中斷的處理,23,IRQ/FIQ處理程序示例,STMFDsp!, r0-r12, lr 調(diào)用IRQ/FIQ處理程序 LDMFDsp!, r0-r12, lr SUBSpc, lr, #4,各種異常中斷的處理,24,Undefined Instruction(未定義指令),當ARM處理器遇到不能處理的指令時,會產(chǎn)生未定義指令異常。采用這種機制,可以通過軟件仿真擴展ARM或Thumb指令集。 處理器執(zhí)行以下程序返回,無論是在ARM狀態(tài)還是
13、Thumb狀態(tài): MOVS PC, R14_und 以上指令恢復PC(從R14_und)和CPSR(從SPSR_und)的值,并返回到未定義指令后的下一條指令。,各種異常中斷的處理,25,SWI(軟件中斷),軟件中斷指令(SWI)用于進入管理模式,常用于請求執(zhí)行特定的管理功能。軟件中斷處理程序執(zhí)行以下指令可以從SWI模式返回,無論是在ARM狀態(tài)還是Thumb狀態(tài): MOVS PC , R14_svc 以上指令恢復PC(從R14_svc)和CPSR(從SPSR_svc)的值,并返回到SWI的下一條指令。,各種異常中斷的處理,26,SWI一級處理程序,STMFDsp!, r0-r12, lr LDR r0, lr, #-4 BICr0, r0, #0 xFF000000 在此調(diào)用二級處理程序 LDMFDsp!, r0-r12, lr,各種異常中斷的處理,27,SWI二級處理程序,CMPr0, #maxSWI LDRLSpc, pc, r0, LSL #2 B SWIOutofRange S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文學作品中性別符號的符號學解讀與權(quán)力關(guān)系研究
- 公司在逃人員管理辦法
- 根據(jù)銀企對賬管理辦法
- 河源冷庫庫存管理辦法
- 江蘇苗木休眠管理辦法
- 硬筆書法教學設(shè)計與實施指南
- 季節(jié)性施工的技術(shù)難點及應(yīng)對策略
- 制定管理辦法提升管理
- 生產(chǎn)安全事故報告和調(diào)查處理條例規(guī)定事故
- 新疆暖氣收費管理辦法
- 營運車輛入股協(xié)議書
- 高中數(shù)學專項提升計劃
- 2025年國家公務(wù)員考錄《申論》真題及參考答案(行政執(zhí)法卷)
- 企業(yè)數(shù)字化轉(zhuǎn)型與員工績效的關(guān)聯(lián)性分析報告
- 水工程概論課件
- 小學管理考試題及答案
- 研學活動協(xié)議書合同協(xié)議
- 2025杭州市富陽區(qū)輔警考試試卷真題
- 延長石油招聘筆試題庫2025
- 2025年粵東西北教師全員輪訓心得體會2篇
- 獸醫(yī)學基礎(chǔ)試題及答案
評論
0/150
提交評論