第06講 中斷系統(tǒng)_第1頁
第06講 中斷系統(tǒng)_第2頁
第06講 中斷系統(tǒng)_第3頁
第06講 中斷系統(tǒng)_第4頁
第06講 中斷系統(tǒng)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

嵌入式處理器的結(jié)構(gòu)和編程中斷系統(tǒng)學(xué)習(xí)要點ARM中斷系統(tǒng)中斷向量表LPC2000中斷系統(tǒng)VIC中斷控制器ARM體系的中斷系統(tǒng)只要正常的程序流被暫時中止,處理器就進入異常模式。例如響應(yīng)一個來自外設(shè)的中斷。在處理異常之前,ARM7TDMI內(nèi)核保存當(dāng)前的處理器狀態(tài),這樣當(dāng)處理程序結(jié)束時可以恢復(fù)執(zhí)行原來的程序。對于每一個異常事件,都有一個與之相對應(yīng)的處理程序,它們是關(guān)聯(lián)在一起的,并以一張一維表的格式存儲在存儲器的固定單元中。這張指定了各異常中斷及其處理程序的對應(yīng)關(guān)系的表,稱為異常向量表。異常向量表地址異常類型進入時的模式進入時I的狀態(tài)進入時F的狀態(tài)0x00000000復(fù)位管理禁止禁止0x00000004未定義指令未定義IF0x00000008軟件中斷管理禁止F0x0000000C中止(預(yù)取)中止IF0x00000010中止(數(shù)據(jù))中止IF0x00000014保留保留——0x00000018IRQ中斷禁止F0x0000001CFIQ快中斷禁止禁止注:表中的I和F表示不對該位有影響,保留原來的指。異常優(yōu)先級當(dāng)多個異常同時發(fā)生時,一個固定的優(yōu)先級系統(tǒng)決定它們被處理的順序:異常類型優(yōu)先級復(fù)位1(最高優(yōu)先級)數(shù)據(jù)中止2FIQ3IRQ4預(yù)取中止5未定義指令6SWI7(最低優(yōu)先級)優(yōu)先級降低程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示進入異常過程1.程序在系統(tǒng)模式下運行用戶程序,假定當(dāng)前處理器狀態(tài)為Thumb狀態(tài)、允許IRQ中斷;2.用戶程序運行時發(fā)生IRQ中斷,硬件完成以下動作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中斷)清零T位(進入ARM狀態(tài))設(shè)置MOD位,切換處理器模式至IRQ模式將下一條指令的地址存入IRQ模式的LR寄存器將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器將跳轉(zhuǎn)地址存入PC,實現(xiàn)跳轉(zhuǎn)IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示對該位不關(guān)心在異常處理結(jié)束后,異常處理程序完成以下動作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示退出異常過程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV將SPSR寄存器的值復(fù)制回CPSR寄存器;將LR寄存的值減去一個常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示對該位不關(guān)心異常入口/出口匯總異常或入口返回指令之前的狀態(tài)備注ARMR14_xThumbR14_xBLMOVPC,R14PC+4PC+2此處PC為BL,SWI,為定義的指令取指或預(yù)取指中止指令的地址SWIMOVSPC,R14_svcPC+4PC+2未定義的指令MOVSPC,R14_undPC+4PC+2預(yù)取指中止SUBSPC,R14_abt,#4PC+4PC+4快中斷SUBSPC,R14_fiq,#4PC+4PC+4此處PC為由于FIQ或IRQ占先而沒有被執(zhí)行的指令的地址中斷SUBSPC,R14_irq,#4PC+4PC+4數(shù)據(jù)中止SUBSPC,R14_abt,#8PC+8PC+8此處PC為產(chǎn)生數(shù)據(jù)中止的裝載或保存指令的地址。

復(fù)位無——復(fù)位時保存在R14_svc中的值不可預(yù)知。

注意:“MOVSPC,R14_svc”是指在管理模式執(zhí)行MOVSPC,R14指令?!癕OVSPC,R14_und”、“SUBSPC,R14_abt,#4”等指令也是類似的。異常的入口和出口處理如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實現(xiàn)返回。SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回中斷處理代碼的開始部分和退出部分中斷處理代碼的開始部分和退出部分異常的入口和出口處理SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“^”符號表示這是一條特殊形式的指令。這條指令在從存儲器中裝載PC的同時(PC是最后恢復(fù)的),CPSR也得到恢復(fù)。這里使用的堆棧指針SP(R13)是屬于異常模式的寄存器,每個異常模式有自己的堆棧指針。這個堆棧指針應(yīng)必須在系統(tǒng)啟動時初始化。復(fù)位異常當(dāng)nRESET信號被拉低時,ARM處理器放棄正在執(zhí)行的指令。當(dāng)你RESET信號再次變?yōu)楦唠娖綍r,ARM處理器執(zhí)行以下操作:強制M[4:0]=10011,系統(tǒng)進入管理模式;將CPSR的I和F置位,禁止中斷和快速中斷;將CPSR的T清零,處理器出入ARM狀態(tài);強制PC清零;系統(tǒng)返回ARM狀態(tài)并回復(fù)執(zhí)行。中斷請求中斷請求(IRQ)異常是一個由nIRQ輸入端的低電平所產(chǎn)生的正常中斷。IRQ的優(yōu)先級低于FIQ。任何時候在一個特權(quán)模式下,都可通過置位CPSR中的I位來禁止IRQ。不管異常入口是來自ARM狀態(tài)還是Thumb狀態(tài),F(xiàn)IQ處理程序都會通過執(zhí)行下面的指令從中斷返回:SUBSPC,R14_fiq,#4異常向量地址異常類型進入時的模式進入時I的狀態(tài)進入時F的狀態(tài)0x00000000復(fù)位管理禁止禁止0x00000004未定義指令未定義IF0x00000008軟件中斷管理禁止F0x0000000C中止(預(yù)?。┲兄笽F0x00000010中止(數(shù)據(jù))中止IF0x00000014保留保留——0x00000018IRQ中斷禁止F0x0000001CFIQ快中斷禁止禁止注:表中的I和F表示不對該位有影響,保留原來的指。該位置被Boot裝載程序用作有效用戶程序的檢測標(biāo)志。通過定義此保留值,使向量表所有數(shù)據(jù)32位累加和為0,芯片復(fù)位后才能脫機運行用戶程序。啟動代碼中的異常向量表的構(gòu)建一般在32位ARM應(yīng)用系統(tǒng)中,大多數(shù)采用C語言進行軟件編程。但是在運行應(yīng)用代碼前需要進行系統(tǒng)初始化。常用一個匯編文件作啟動代碼,它可以實現(xiàn):異常向量表定義堆棧初始化系統(tǒng)變量初始化中斷系統(tǒng)初始化I/O初始化地址重映射等操作。位于啟動代碼中的異常向量表CODE32AREAvectors,CODE,READONLYENTRYResetLDRPC,ResetAddrLDRPC,UndefinedAddr...DCD0xb9205f80LDRPC,[PC,#-0xff0]LDRPC,FIQ_AddrResetAddrDCDResetInitUndefinedAddrDCDUndefined...NouseDCD0IRQ_AddrDCD0FIQ_AddrDCDFIQ_Handler前32字節(jié)為異常入口后32字節(jié)為跳轉(zhuǎn)地址異常向量表位于啟動代碼中的異常向量表CODE32AREAvectors,CODE,READONLYENTRYResetLDRPC,ResetAddrLDRPC,UndefinedAddr...DCD0xb9205f80LDRPC,[PC,#-0xff0]LDRPC,FIQ_AddrResetAddrDCDResetInitUndefinedAddrDCDUndefined...NouseDCD0IRQ_AddrDCD0FIQ_AddrDCDFIQ_Handler異常向量表例如:發(fā)生未定義異常時1.程序計數(shù)器(PC)指向0x00000004;2.執(zhí)行當(dāng)前的指令,將Undefined地址值裝入PC,實現(xiàn)至未定義異常處理程序的跳轉(zhuǎn)。裝入位于啟動代碼中的異常向量表CODE32AREAvectors,CODE,READONLYENTRYResetLDRPC,ResetAddrLDRPC,UndefinedAddr...DCD0xb9205f80LDRPC,[PC,#-0xff0]LDRPC,FIQ_AddrResetAddrDCDResetInitUndefinedAddrDCDUndefined...NouseDCD0IRQ_AddrDCD0FIQ_AddrDCDFIQ_Handler異常向量表注意:異常向量表中程序跳轉(zhuǎn)使用LDR指令,而沒有使用B指令。原因:1.LDR指令可以全地址范圍跳轉(zhuǎn),而B指令只能在前后32MB范圍內(nèi)跳轉(zhuǎn);2.芯片具有Remap功能。當(dāng)向量表位于內(nèi)部RAM或外部存儲器中,用B指令不能跳轉(zhuǎn)到正確的位置。BResetAddr有效用戶代碼的判別Reset[0xe59ff018]ldrpc,ResetAddr[0xe59ff018]ldrpc,UndefinedAddr...[0xb9205f80]dcd0xb9205f80[0xe51ffff0]ldrpc,0x7ffff030[0xe59ff018]ldrpc,FIQ_AddrResetAddr[0x8000008c]dcd0x8000008cUndefinedAddr[0x80000040]dcd0x80000040...Nouse[0x00000000]dcd0x00000000IRQ_Addr[0x00000000]dcd0x00000000FIQ_Addr[0x8000004c]dcd0x8000004c異常向量表反匯編代碼前32字節(jié)為異常入口后32字節(jié)為跳轉(zhuǎn)地址有效用戶代碼的判別Reset[0xe59ff018]ldrpc,ResetAddr[0xe59ff018]ldrpc,UndefinedAddr...[0xb9205f80]dcd0xb9205f80[0xe51ffff0]ldrpc,0x7ffff030[0xe59ff018]ldrpc,FIQ_AddrResetAddr[0x8000008c]dcd0x8000008cUndefinedAddr[0x80000040]dcd0x80000040...Nouse[0x00000000]dcd0x00000000IRQ_Addr[0x00000000]dcd0x00000000FIQ_Addr[0x8000004c]dcd0x8000004c異常向量表反匯編代碼指令的機器碼指令有效用戶代碼的判別Reset[0xe59ff018]ldrpc,ResetAddr[0xe59ff018]ldrpc,UndefinedAddr...[0xb9205f80]dcd0xb9205f80[0xe51ffff0]ldrpc,0x7ffff030[0xe59ff018]ldrpc,FIQ_AddrResetAddr[0x8000008c]dcd0x8000008cUndefinedAddr[0x80000040]dcd0x80000040...Nouse[0x00000000]dcd0x00000000IRQ_Addr[0x00000000]dcd0x00000000FIQ_Addr[0x8000004c]dcd0x8000004c異常向量表反匯編代碼8條指令的機器碼累加和為0,表示用戶代碼有效Reset[0xe59ff018]ldrpc,ResetAddr[0xe59ff018]ldrpc,UndefinedAddr...[0xb9205f80]dcd0xb9205f80[0xe51ffff0]ldrpc,0x7ffff030[0xe59ff018]ldrpc,FIQ_AddrResetAddr[0x8000008c]dcd0x8000008cUndefinedAddr[0x80000040]dcd0x80000040...Nouse[0x00000000]dcd0x00000000IRQ_Addr[0x00000000]dcd0x00000000FIQ_Addr[0x8000004c]dcd0x8000004c異常向量表反匯編代碼8條指令的機器碼累加和為0,表示用戶代碼有效有效用戶代碼的判別[0x00000000][0xe59ff018][0xe59ff018]...[0xb9205f80][0xe51ffff0][0xe59ff018]跳轉(zhuǎn)地址數(shù)據(jù)不在累加范圍內(nèi)通過調(diào)整該保留字,使累加和為0向量中斷控制器(VIC)ARM7TDMI內(nèi)核具有兩個中斷輸入,分別為IRQ中斷和FIQ中斷。但是芯片內(nèi)部有許多中斷源,最多可以有32個中斷輸入請求。向量中斷控制器的作用就是允許哪些中斷源可以產(chǎn)生中斷、可以產(chǎn)生哪類中斷、產(chǎn)生中斷后執(zhí)行哪段服務(wù)程序。ARM7TDMI-SIRQFIQVIC中斷請求輸入0中斷請求輸入31...中斷源列表模塊可產(chǎn)生中斷的標(biāo)志VIC通道號WDT看門狗中斷(WDINT)0—保留給軟件中斷1ARM內(nèi)核EmbeddedICE,DbgCommRx2ARM內(nèi)核EmbeddedICE,DbgCommTx3定時器0匹配0~3(MR0,MR1,MR2,MR3)捕獲0~3(CR0,CR1,CR2,CR3)4定時器1匹配0~3(MR0,MR1,MR2,MR3)捕獲0~3(CR0,CR1,CR2,CR3)5UART0Rx線狀態(tài)(RLS),發(fā)送保持寄存器空(THRE)Rx數(shù)據(jù)可用(RDA),字符超時指示(CTI)6中斷源列表模塊可產(chǎn)生中斷的標(biāo)志VIC通道號UART1Rx線狀態(tài)(RLS),發(fā)送保持寄存器空(THRE)Rx數(shù)據(jù)可用(RDA),字符超時指示(CTI)7PWM0匹配0~6(MR0,MR1,MR2,MR3,MR4,MR5,MR6)8I2CSI(狀態(tài)改變)9SPI0SPI中斷標(biāo)志(SPIF),模式錯誤(MODF)10SPI1SPI中斷標(biāo)志(SPIF),模式錯誤(MODF)11PLLPLL鎖定(PLOCK)12RTC計數(shù)器增加(RTCCIF),報警(RTCALF)13中斷源列表模塊可產(chǎn)生中斷的標(biāo)志VIC通道號系統(tǒng)控制外部中斷0(EINT0)14系統(tǒng)控制外部中斷1(EINT1)15系統(tǒng)控制外部中斷2(EINT2)16系統(tǒng)控制外部中斷3(EINT3)17A/DA/D轉(zhuǎn)換器18保留保留19~31允許中斷源產(chǎn)生中斷芯片內(nèi)部許多部件都可以作為中斷源。比如通過串口發(fā)送一段數(shù)據(jù),可以選擇在一批發(fā)送結(jié)束后產(chǎn)生中斷,然后在中斷服務(wù)程序中發(fā)送下一批數(shù)據(jù)。允許中斷源產(chǎn)生中斷由寄存器VICIntEnable和VICIntEnClr控制。前者使能中斷,后者禁止中斷。選擇中斷類型——中斷或快速中斷,通過寄存器VICIntSelect控制。以上三種寄存器時中斷控制器的控制寄存器。VICIntEnable和VICIntEnClr中斷使能清零寄存器(VICIntEnClr):位31…1817…210功能保留A/D轉(zhuǎn)換器外部中斷3ARM內(nèi)核—WDT與中斷使能寄存器的功能相反,向某位寫入1時,禁止對應(yīng)的中斷源產(chǎn)生中斷。中斷使能寄存器(VICIntEnable):位31…1817…210功能保留A/D轉(zhuǎn)換器外部中斷3ARM內(nèi)核—WDT寄存器中每一位控制著一個中斷源,各中斷源的位置與中斷源列表所示相同。向某位寫入1時,允許對應(yīng)的中斷源產(chǎn)生中斷。VICIntSelectARM7TDMI內(nèi)核具有FIQ和IRQ兩個中斷輸入,所有中斷源產(chǎn)生的中斷都可以選擇產(chǎn)生其中一種中斷。這通過中斷選擇寄存器完成。中斷選擇寄存器(VICIntSelect):位31…1817…210功能保留A/D轉(zhuǎn)換器外部中斷3ARM內(nèi)核—WDT寄存器中每一位控制著一個中斷源,各中斷源的位置與中斷源列表所示相同。向某位寫入1時,對應(yīng)中斷源產(chǎn)生的中斷為FIQ中斷,否則為IRQ中斷。中斷類型中斷輸入請求可以在VIC中被設(shè)置為以下三類:FIQ中斷:具有最高優(yōu)先級;向量IRQ中斷:具有中等優(yōu)先級;IRQ和FIQ是相對應(yīng)的,F(xiàn)IQ優(yōu)先級更高,速度更快,實現(xiàn)過程卻是相似的。非向量IRQ中斷:具有最低優(yōu)先級;19個中斷輸入VIC將32個中斷輸入進行分配13個未使用FIQ中斷向量IRQ中斷非向量IRQ中斷中斷源0中斷源1……中斷源18向量中斷的參數(shù)設(shè)置VIC最多支持16個向量IRQ中斷,這些中斷被分為16個優(yōu)先級,并且為每個優(yōu)先級指定一個服務(wù)程序入口地址。排隊過程:“座次法”在發(fā)生向量IRQ中斷后,相應(yīng)優(yōu)先級的服務(wù)程序入口地址被裝入向量地址寄存器VICVectAddr中,通過一條ARM指令即可跳轉(zhuǎn)到相應(yīng)的服務(wù)程序入口處,所以向量IRQ中斷具有較快的中斷響應(yīng)?!白畏ā?12……1920各個中斷源編號,好像它們的身份ID中斷源好像辦理業(yè)務(wù)的用戶業(yè)務(wù)受理大廳的等候座位,已經(jīng)排好了優(yōu)先次序。VIPNo1:VICVectCntl0VIPNo2:VICVectCntl1……VIPNo15:VICVectCntl14VIPNo16:VICVectCntl15202身份ID20:業(yè)務(wù)大廳No1VIP身份ID2:業(yè)務(wù)大廳No15VIP——20號中斷源優(yōu)先級高于2號中斷源VICVectCntl和VICVectAddr介紹VICVectCntl0~15和VICVectAddr0~15兩類寄存器與向量IRQ中斷設(shè)置有關(guān)。前者為中斷源分配向量IRQ中斷的優(yōu)先級;后者為該中斷優(yōu)先級設(shè)置服務(wù)程序入口地址。寄存器名稱最后的數(shù)字同時也代表該寄存器控制的向量IRQ中斷的優(yōu)先級,數(shù)值越小優(yōu)先級越高。注意:如果將同一個中斷源分配給多個使能的向量IRQ中斷,那么該中斷源發(fā)生中斷時,會使用最高優(yōu)先級(最低編號)的寄存器設(shè)置。VICVectCntl和VICVectAddr向量地址寄存器(VICVectAddr0~15):該寄存器中存放對應(yīng)優(yōu)先級向量IRQ中斷服務(wù)程序的入口地址。位[31:0]功能中斷服務(wù)程序入口地址向量控制寄存器(VICVectCntl0~15):VICVectCntlx[4:0]:分配給此優(yōu)先級的中斷源序號;VICVectCntlx[5]:為1,使能當(dāng)前優(yōu)先級的中斷,否則為禁止。位765[4:0]功能--EN中斷源序號非向量IRQ中斷任何中斷源都可以設(shè)置為非向量IRQ中斷。它與向量IRQ中斷的區(qū)別在于前者不能為每個非向量IRQ中斷源設(shè)置服務(wù)程序地址,而是所有的非向量IRQ中斷都共用一個相同的服務(wù)程序入口地址。當(dāng)有多個中斷源被設(shè)置為非向量IRQ中斷時,需要在用戶程序中識別中斷源,并分別作出處理。所以非向量IRQ中斷響應(yīng)延時相對較長。VICDefVectAddr向量地址寄存器(VICDefVectAddr):VICDefVectAddr寄存器存放非向量中斷服務(wù)程序的入口地址,當(dāng)發(fā)生非向量中斷時該寄存器中保存的地址存入VICVectAddr寄存器。位[31:0]功能中斷服務(wù)程序入口地址產(chǎn)生中斷后的服務(wù)程序地址在發(fā)生向量IRQ中斷后,VIC能將對應(yīng)中斷的服務(wù)程序地址存入VICVectAddr寄存器中。如果為非向量中斷,將把VICDefVectAddr寄存器的值存入該寄存器。因為ARM7異常向量表中只有一項座位外部中斷IRQ。在異常向量表的IRQ異常入口處放置一條指令,將VICVectAddr寄存器的內(nèi)容裝入程序計數(shù)器(PC),就可以跳轉(zhuǎn)到當(dāng)前中斷的服務(wù)函數(shù)。這樣的設(shè)計可以減小中斷響應(yīng)延時。向量地址寄存器(VICVectAddr):位[31:0]功能中斷服務(wù)程序入口地址中斷狀態(tài)寄存器如果使用了多個非向量IRQ中斷或多個FIQ中斷,那么在發(fā)生中斷后要在程序中查找中斷源。通過IRQ狀態(tài)寄存器和FIQ狀態(tài)寄存器可以了解到這些中斷源的中斷請求狀態(tài)。任何在VIC中使能的中斷都會把中斷請求反映在“所有中斷狀態(tài)寄存器(VICRawIntr)”中。IRQ狀態(tài)寄存器(VICIRQStatus):位[31:0]功能當(dāng)某位為1時表示對應(yīng)位的中斷源產(chǎn)生IRQ中斷請求。中斷狀態(tài)寄存器介紹所有中斷狀態(tài)寄存器(VICRawIntr):位[31:0]功能當(dāng)某位為1時表示對應(yīng)位的中斷源產(chǎn)生中斷請求。FIQ狀態(tài)寄存器(VICFIQStatus):位[31:0]功能當(dāng)某位為1時表示對應(yīng)位的中斷源產(chǎn)生FIQ中斷請求。軟件中斷寄存器在一些特殊場合或者調(diào)試時,可能需要使用軟件強制產(chǎn)生某個中斷請求。軟件中斷寄存器(VICSoftInt):位[31:0]功能當(dāng)某位為1時,將產(chǎn)生與該位相對應(yīng)的中斷請求。軟件中斷清零寄存器(VICSoftIntClear):位[31:0]功能當(dāng)某位為1時,將清零VICSoftInt寄存器中對應(yīng)位保護使能寄存器在某些場合可能需要禁止在用戶模式下訪問VIC寄存器,以提高軟件的安全等級。軟件中斷寄存器(VICSoftInt):位[31:1]0功能—當(dāng)該位為1時,只能在特權(quán)模式下訪問VIC寄存器。IRQ中斷的設(shè)計實例設(shè)置外部中斷0產(chǎn)生向量IRQ中斷后執(zhí)行中斷服務(wù)程序“IRQ_Eint0()”。...PINSEL1=(PINSEL1&0xFFFFFFFC)|0x01;VICIntSelect=0x00000000;VICVectCntl0=(0x20|14);VICVectAddr0=(int)IRQ_Eint0;EXTINT=0x01;VICIntEnable=(1<<14);...C代碼:1.設(shè)置引腳連接模塊,將P0.16設(shè)置為外部中斷功能;步驟:2.設(shè)置所有中斷為IRQ中斷;3.將外部中斷0(在中斷源列表中序號14)設(shè)置到優(yōu)先級0中,并使能IRQ中斷;4.將外部中斷0的中斷服務(wù)程序?qū)懭雽?yīng)優(yōu)先級的地址寄存器中;5.清除外部中斷0的標(biāo)志后使能外部中斷0;(1)(2)(3)(4)(5)(5)0x000000000xFFFFFFFF用戶程序中斷服務(wù)程序異常向量表1.正在執(zhí)行用戶程序;①2.外部中斷0發(fā)生中斷;②3.VIC硬件將中斷服務(wù)程序地址裝入VICVectAddr寄存器;④4.程序跳轉(zhuǎn)至異常向量表中IRQ入口0x0018處;5.執(zhí)行指令跳轉(zhuǎn)至VICVectAddr寄存器中的中斷服務(wù)地址;⑤⑥6.中斷服務(wù)程序執(zhí)行完畢,返回被中斷的用戶程序繼續(xù)執(zhí)行被中斷的代碼。圖示IRQ中斷的發(fā)生過程③IRQ_Eint0???VICVectAddr0VICVectAddrIRQ_Eint0⑤LDRPC,[PC,#-0xff0]0x000000000xFFFFFFFF用戶程序中斷服務(wù)程序異常向量表①②④⑤⑥圖示IRQ中斷的發(fā)生過程③IRQ_Eint0???VICVectAddr0VICVectAddrIRQ_Eint0⑤LDRPC,[PC,#-0xff0]注意:任何IRQ中斷產(chǎn)生之后,微控制器跳轉(zhuǎn)到地址0x18執(zhí)行代碼,該地址處的指令為:LDRPC,[PC,#-0xff0]在執(zhí)行該指令時,

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論