異常中斷處理ppt課件_第1頁
異常中斷處理ppt課件_第2頁
異常中斷處理ppt課件_第3頁
異常中斷處理ppt課件_第4頁
異常中斷處理ppt課件_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第9章 異常中斷處置o9.1 ARM異常中斷處置概述o控制程序的執(zhí)行流程有3種方式:o正常情況下,程序每執(zhí)行一條指令,程序計(jì)數(shù)器存放器pc將添加4或2字節(jié);o經(jīng)過跳轉(zhuǎn)指令,程序可以跳轉(zhuǎn)到特定的地址標(biāo)號(hào)處執(zhí)行,或者跳轉(zhuǎn)到特定的子程序處執(zhí)行;oB指令oBL指令oBLX指令,BX指令o當(dāng)異常中斷發(fā)生時(shí),系統(tǒng)執(zhí)行完當(dāng)前指令后,將跳轉(zhuǎn)到相應(yīng)的異常中斷處置程序處執(zhí)行。異常中斷名稱含義復(fù)位當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行。未定義指令當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常??墒褂迷摦惓C(jī)制進(jìn)行軟件仿真。軟件中斷(SWI)該異常由執(zhí)行SWI指令產(chǎn)

2、生,可用于用戶模式下的程序調(diào)用特權(quán)操作指令??墒褂迷摦惓C(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。指令預(yù)取中止若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問,存儲(chǔ)器會(huì)向處理器發(fā)出中止信號(hào),但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常。數(shù)據(jù)訪問中止若處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當(dāng)前指令訪問時(shí),產(chǎn)生數(shù)據(jù)中止異常。外部中斷請(qǐng)求(IRQ )當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過該異常請(qǐng)求中斷服務(wù)??焖僦袛嗾?qǐng)求( FIQ )當(dāng)處理器的快速中斷請(qǐng)求引腳有效,且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常。o9.1.1 ARM體系中異常中斷種類o中斷

3、向量表指定了各異常中斷及其處置程序的對(duì)應(yīng)關(guān)系,通常放在內(nèi)存的低地址端。o在ARM體系中,異常中斷向量表的大小為32字節(jié),其中每個(gè)異常中斷占據(jù)4個(gè)字節(jié),保管4個(gè)字節(jié)。o每個(gè)異常中斷對(duì)應(yīng)的中斷向量表中的4個(gè)字節(jié)空間中存放一條跳轉(zhuǎn)指令或者一條向PC存放器中賦值的數(shù)據(jù)訪問指令。o9.1.2 異常中斷向量表及異常中斷優(yōu)先級(jí)o各異常中斷的中斷向量地址及其異常中斷處置優(yōu)先級(jí)表中斷向量地址異常中斷類型異常中斷模式優(yōu)先級(jí)*0 x0復(fù)位特權(quán)模式(SVC)10 x4未定義的指令未定義指令中止模式(Undef)60 x8軟件中斷(SWI)特權(quán)模式(SVC)60 x0c指令預(yù)取中止中止模式50 x10數(shù)據(jù)訪問中止中止模

4、式20 x14保留未使用未使用0 x18外部中斷請(qǐng)求(IRQ)外部中斷(IRQ)模式40 x1c快速中斷請(qǐng)求(FIQ)快速中斷(FIQ)模式3*注:1最高;6最低o9.1.3 異常中斷運(yùn)用的存放器o各異常中斷對(duì)應(yīng)著一定的處置器方式。o運(yùn)用程序通常運(yùn)轉(zhuǎn)在用戶方式下。o各種不同的處置器方式對(duì)應(yīng)于該處置器方式的物理存放器組。異常處置中的存放器運(yùn)用o與異常發(fā)生相關(guān)的方式改動(dòng)意味著所調(diào)用的異常處置程序至少要訪問:o私有的 SP_ (stack pointer ).o私有的 LR_ (link register).o私有的 SPSR_ (saved program status register ).o在

5、 FIQ異常處置中, 另有5個(gè)私有的通用存放器 (r8_fiq to r12_fiq).o其它的存放器是一切方式公用的.o異常處置程序必需確保其他的存放器在退出前恢復(fù)到原來的形狀o這可以經(jīng)過將任何正在運(yùn)用的存放器的內(nèi)容保管在堆棧中,并在前往前恢復(fù)來實(shí)現(xiàn)o任何所需存放器的初始化要由運(yùn)用程序的起始代碼來完成,參閱: “Embedded Software Developmento 處理器模式描述用戶模式(usr)正常程序執(zhí)行的模式快速中斷模式(fiq)用于高速數(shù)據(jù)傳輸或通道處理外部中斷模式(irq)用于通用的中斷處理特權(quán)模式(svc)供操作系統(tǒng)使用的保護(hù)模式(復(fù)位或軟中斷)中止模式(abt)當(dāng)數(shù)據(jù)或

6、指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。未定義指令中止模式(und)當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持通過軟件仿真硬件的協(xié)處理器。 系統(tǒng)模式(sys) 用于運(yùn)行具有特權(quán)級(jí)的操作系統(tǒng)任務(wù)。ARM中的處置器方式Vector TableVector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devicesFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140

7、 x100 x0C0 x080 x040 x00o當(dāng)異常產(chǎn)生時(shí), ARM core:o拷貝 CPSR 到 SPSR_o設(shè)置適當(dāng)?shù)?CPSR 位: o改動(dòng)處置器形狀進(jìn)入 ARM 形狀o改動(dòng)處置器方式進(jìn)入相應(yīng)的異常方式o設(shè)置中斷制止位制止相應(yīng)中斷 (假設(shè)需求)o保管前往地址到 LR_o設(shè)置 PC 位相應(yīng)的異常向量o前往時(shí), 異常處置需求:o從 SPSR_恢復(fù)CPSRo從LR_恢復(fù)PC oNote:這些操作只能在 ARM 態(tài)執(zhí)行.o2.9 進(jìn)入和退出異常中斷的過程 oARM微處置器對(duì)異常的呼應(yīng)過程用偽碼可以描畫為:oR14_ = Return LinkoSPSR_ = CPSRoCPSR4:0 =

8、Exception Mode NumberoCPSR5 = 0 ;當(dāng)運(yùn)轉(zhuǎn)于ARM任務(wù)形狀時(shí)oIf = Reset or FIQ thenoCPSR6 = 1 ;當(dāng)呼應(yīng)FIQ異常時(shí),制止新的FIQ異常 oCPSR7 = 1 ;制止新的IRQ異常oPC = Exception Vector Address o各種中斷呼應(yīng)的偽代碼參見教材P.265-268o9.2.2 從異常中斷處置程序中前往o從異常中斷處置程序中前往包括以下兩個(gè)根本操作: o1、恢復(fù)被中斷的程序的處置器形狀,即將SPSR_mode存放器內(nèi)容復(fù)制到當(dāng)前程序形狀存放器CPSR中。o2、前往到發(fā)生異常中斷的指令的下一條指令執(zhí)行,即將lr

9、_mode存放器的內(nèi)容復(fù)制到程序計(jì)數(shù)器PC中。o復(fù)位異常中斷處置程序不需求前往,整個(gè)運(yùn)用系統(tǒng)是從復(fù)位異常中斷處置程序開場(chǎng)執(zhí)行的。SUBS PC,R14_fiq ,#4或 MOV PC , R14_svc異常前往指令o從SWI 和 Undef異常前往oMOVS pc,lro從FIQ, IRQ 和 預(yù)取異常(Prefect Abort)前往oSUBS pc,lr,#4oo從數(shù)據(jù)異常( Data Abort)前往oSUBS pc,lr,#8o假設(shè) LR之前被壓棧的話運(yùn)用LDM “ oLDMFD sp!,pco異常前往:o運(yùn)用一數(shù)據(jù)處置指令:o相應(yīng)的指令取決于什么樣的異常o在特權(quán)方式不僅僅更新PC,而

10、且 拷貝SPSR 到 CPSR設(shè)置CPSR, “S bitPC做為目的存放器向量表指令Literal pool containing address of Undef HandlerIRQ handler within 32MBytes Branch instruction rangeSWI Exception handler placed on applicable address boundaryFIQ handler follows vector table Undef handler outside 32MBytes branch instruction range 32 Mbytes

11、2個(gè)的中斷源!o因此需求一個(gè)中斷控制器(通常是地址映射的)來控制中斷是怎樣傳送給ARM的。o在許多系統(tǒng)中,一些中斷的優(yōu)先級(jí)比其它中斷的優(yōu)先級(jí)高,他們要搶先任何正在處置的低優(yōu)先級(jí)中斷。oNote: 通常中斷處置程序總是應(yīng)該包含去除中斷源的代碼。地址映射地址映射中斷控制器中斷控制器nIRQnFIQARMMultiplePeripheralinterruptsourcesARM讀控制器存放器并找到IRQ/FIQ中斷源ARM寫外設(shè)存放器清相應(yīng)中斷源FIQ vs IRQoFIQ 和 IRQ 提供了非常根本的優(yōu)先級(jí)級(jí)別。o在下邊兩種情況下,F(xiàn)IQs有高于IRQs的優(yōu)先級(jí):o當(dāng)多個(gè)中斷產(chǎn)生時(shí),F(xiàn)IQ高于IR

12、Q.o處置 FIQ時(shí)制止 IRQs.oIRQs 將不會(huì)被呼應(yīng)直到 FIQ處置完成.oFIQs 的設(shè)計(jì)使中斷處置盡能夠的快.oFIQ 向量位于中斷向量表的最末.o為了使中斷處置程序可從中斷向量處延續(xù)執(zhí)行oFIQ 方式有5個(gè)額外的私有存放器 (r8-r12)o中斷處置必需維護(hù)其運(yùn)用的非私有存放器o可以有多個(gè)FIQ中斷源,但是思索到系統(tǒng)性能應(yīng)防止嵌套。C言語簡(jiǎn)單中斷處置程序o在C中可以在函數(shù)定義時(shí)運(yùn)用關(guān)鍵詞 “_irq來寫一個(gè)簡(jiǎn)單的中斷處置程序. o這將導(dǎo)致: o函數(shù)一切用到的存放器被維護(hù) o假設(shè)能夠, 任何遠(yuǎn)程調(diào)用所運(yùn)用的其他存放器也被維護(hù)o函數(shù)退出運(yùn)用正確的前往指令(修正 pc = lr-4 并

13、從 spsr恢復(fù)cpsr)o_irq 僅僅可在 armcc中運(yùn)用.o可是被_irq 函數(shù)調(diào)用的子程序可以用 tcc編譯.o確保 IRQ的堆棧指針曾經(jīng)設(shè)置 !C 中斷處置例如_irq void IRQHandler (void) volatile unsigned int *source = (unsigned int *)0 x80000000; if (*source = 1)/ which interrupt was itint_handler_1();/ process the interrupt / insert checks for other interrupt sources h

14、ere *(source+1) = 0;/ clear the interruptOutput without _irq Output with _irq STMFD sp!,r4,lr STMFD sp!,r0-r4,r12,lrMOV r4,#0 x80000000 MOV r4,#0 x80000000LDR r0,r4,#0 LDR r0,r4,#0CMP r0,#1 CMP r0,#1BLEQ int_handler_1 BLEQ int_handler_1MOV r0,#0 MOV r0,#0 dfg STR r0,r4,#4 STR r0,r4,#4LDMFD sp!,r4,pc

15、 LDMFD sp!,r0-r4,r12,lr SUBS pc,lr,#4C 中斷處置例如_irq void IRQHandler (void)volatile unsigned int *source = (unsigned int *)0 x80000000; if (*source = 1) / which interrupt was it?int_handler_1(); / process the interrupt / insert checks for other interrupt sources here *(source+1) = 0;/ clear the interru

16、ptn Output without _irq Output with _irqSTMFD sp!,r4,lrMOV r4,#0 x80000000LDR r0,r4,#0CMP r0,#1LEQ int_handler_1MOV r0,#0STR r0,r4,#4LDMFD sp!,r4,pcSTMFD sp!,r0-r4,r12,lrMOV r4,#0 x80000000LDR r0,r4,#0CMP r0,#1BLEQ int_handler_1MOV r0,#0STR r0,r4,#4LDMFD sp!,r0-r4,r12,lrSUBS pc,lr,#4中斷重新使能的問題o當(dāng)另外一個(gè)中

17、斷搶先當(dāng)前中斷時(shí),假設(shè)程序員運(yùn)用下邊特殊的步驟來防止系統(tǒng)形狀喪失 ,中斷是可以嵌套:o保管IRQ形狀下的LR LR_irq o保管IRQ形狀下的SPSRSPSR_IRQo當(dāng)中斷可重入時(shí),在中斷處置程序中運(yùn)用“BL必需特別小心:o假設(shè)第二個(gè)中斷產(chǎn)生,BL調(diào)用的前往地址 (LR_irq) 能夠被沖掉,子程序?qū)㈠e(cuò)誤的前往 導(dǎo)致無限循環(huán)!o處理方法是在運(yùn)用“BL之前改動(dòng)方式來防止 LR_irq 被沖掉o通常運(yùn)用“System方式 ( 這時(shí) BL 運(yùn)用 LR_usr)o在處置程序終了,必需:o切換回 IRQ 方式 o制止中斷 (來防止在恢復(fù)SPSR_irq 到一個(gè)暫時(shí)的存放器中后它被沖掉).o_irq

18、不能用來寫可重入中斷處置程序o必需采用采用下頁中匯編代碼段來替代。C 可重入中斷例如IRQHandler SUBlr, lr, #4 STMFDsp!, lr MRSr14, SPSR STMFDsp!, r12, r14 MOVr12, #IntBase LDRr12, r12, #IntSource MRSr14, CPSR BICr14, r14, #0 x9F ORRr14, r14, #0 x1F MSRCPSR_c, r14 STMFDsp!, r0-r3, lr MOVr0,r12 BLC_irq_handler LDMFDsp!, r0-r3, lr MRSr12, CPSR

19、BICr12, r12, 0 x1F ORRr12, r12, 0 x92 MSRCPSR_c, r12 LDMFDsp!, r12, r14 MSRSPSR_csxf, r14 LDMFDsp!, PC切換到 IRQ 方式同時(shí)制止 IRQ.LR_irq , SPSR_irq 和任務(wù)存放器 (r12) 壓棧維護(hù)來防止下一次中斷發(fā)生使它們被沖掉保管R0-3, LR_user 到 user 棧中, 然后調(diào)用 C 子程序,中斷源(R0)作為一個(gè)參數(shù)傳入 C 處置函數(shù)?;謴?fù)LR_irq , SPSR_irq 和任務(wù)存放器 (r12) ,然后退出中斷處置運(yùn)用修正后的LR讀 / 清中斷控制器中斷源切換到

20、System 方式同時(shí)使能 IRQ復(fù)位(reset)oReset 處置程序執(zhí)行的動(dòng)作取決于不同的系統(tǒng). 例如它可以:o設(shè)置異常向量o初始化存儲(chǔ)器系統(tǒng) (e.g. MMU/PU)o初始化一切需求的方式的堆棧和存放器 o初始化一切 C 所需的變量o初始化一切I/O設(shè)備o使能中斷o改動(dòng)處置器方式或/和形狀o調(diào)用主運(yùn)用程序o詳細(xì)資料請(qǐng)參考 “Embedded Software Development 模塊.未定義指令o以下情況將引起未定義指令異常:oARM 試圖執(zhí)行一真正的未定義指令oARM 遇到一協(xié)處置器指令,可是系統(tǒng)中的協(xié)處置器硬件并不存在oARM 遇到一協(xié)處置器指令,系統(tǒng)中協(xié)處置器硬件也存在,可

21、是ARM 不是在超級(jí)用戶方式(privileged mode)o例如:操作協(xié)處置器15(cp15) - ARM cache 控制器o處理方法:o在處置程序中執(zhí)行軟協(xié)處置器仿真o制止在非超級(jí)用戶方式下操作o報(bào)告錯(cuò)誤并退出預(yù)取異常o不論異常是發(fā)生在 ARM 還是Thumb 形狀下,導(dǎo)致預(yù)取異常的指令地址在 lr-4 處.o處置方法取決于存儲(chǔ)器管理戰(zhàn)略o有存儲(chǔ)器管理的系統(tǒng) (e.g. demand paged virtual memory)o修正問題 (e.g. enable correct memory page)o前往并重新執(zhí)行預(yù)取異常的指令( SUBS pc,lr,#4 )o沒有存儲(chǔ)器管理的系

22、統(tǒng)o通常表示一個(gè)致命的錯(cuò)誤o報(bào)告錯(cuò)誤 (假設(shè)能夠) 然后退出數(shù)據(jù)異常o導(dǎo)致異常的指令的地址在 lr-8 處.o處置方法取決于存儲(chǔ)器管理戰(zhàn)略o有存儲(chǔ)器管理的系統(tǒng)(e.g. demand-paged virtual memory)o假設(shè)運(yùn)用了 MMU ,數(shù)據(jù)異常的地址在 MMU 的 “Fault Address 存放器中o修正問題(e.g. enable correct page of memory)o前往并重新執(zhí)行數(shù)據(jù)異常的指令oSUBS pc,lr,#8o沒有存儲(chǔ)器管理的系統(tǒng)o通常表示一個(gè)致命的錯(cuò)誤o報(bào)告錯(cuò)誤 (假設(shè)能夠) 然后退出The Abort Modelo許多ARM 存儲(chǔ)器存取指令將更

23、新基址存放器 :oe.g. LDR r0,r1,#8!;“! 將更新 R1o假設(shè)異常是數(shù)據(jù)異常, 對(duì)基址存放器的影響取決于運(yùn)用的是哪種 ARM core.o“Base Restored Abort ModeloStrongARM, ARM9 and ARM10 系列支持o基址存放器由ARM core 自動(dòng)恢復(fù).o“Base Updated Abort ModeloARM7TDMI 系列支持o在異常指令重新執(zhí)行之前基址存放器必需由處置程序進(jìn)展恢復(fù)o兩種方式的例子程序包含在 ADS examples 目錄下。異常前往地址oARM 形狀:o在異常產(chǎn)生的時(shí)候內(nèi)核設(shè)置 LR_mode = PC - 4.

24、o處置程序需求調(diào)整 LR_mode (取決于是哪一個(gè)異常發(fā)生了),以便前往到正確的地址oThumb 形狀:o處置器根據(jù)發(fā)生的異常自動(dòng)修正存在 LR_mode 中的地址o不論異常產(chǎn)生時(shí)的形狀如何,處置器確保處置程序的ARM 前往指令能前往到正確的地址(和正確的形狀)從SWIs和未定義指令前往o異常是由指令本身引起的,因此內(nèi)核在計(jì)算 LR 時(shí)的 PC 值并沒有被更新.o ARM Thumbo SWIpc-8 pc-4 ;Exception taken hereo xxx pc-4 pc-2 ;lr = next instructiono yyy pc pco因此前往指令為:oMOVS pc,lro

25、Note : 表示異常前往后將執(zhí)行的那條指令從FIQs和IRQs前往o異常在當(dāng)前指令執(zhí)行完成后才被呼應(yīng).因此內(nèi)核在計(jì)算 LR 時(shí)的 PC 值已被更新.o o ARM Thumbo www pc - 12 pc 6 Interrupt occurred during execution o xxx pc - 8 pc - 4o yyy pc 4 pc 2 ARM lr = next instructiono zzz pc pc Thumb lr = two instructions aheado因此前往指令為:oSUBS pc,lr,#4oNote : 表示異常前往后將執(zhí)行的那條指令從預(yù)取異常前

26、往o當(dāng)指令到達(dá)執(zhí)行階段時(shí)異常才產(chǎn)生,因此內(nèi)核在計(jì)算 LR 時(shí)的 PC 值已被更新.o需求重新執(zhí)行導(dǎo)致異常的指令o ARM Thumbo www pc - 8 pc - 4 Prefetch Abort occurred hereo xxx pc - 4 pc - 2 ARM lr = next instructiono yyy pc pc Thumb lr = two instructions aheado因此前往指令為:oSUBS pc,lr,#4oNote : 表示異常前往后將執(zhí)行的那條指令從數(shù)據(jù)異常前往o異常發(fā)生 ( 和計(jì)算 LR ) 在 PC 被更新之后.o需求重新執(zhí)行導(dǎo)致異常的指令oARM Thumbo www pc - 12pc - 6 Da

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論