第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),請進行舉報或認領

文檔簡介

1、嵌入式處理器的結(jié)構(gòu)和編程中斷系統(tǒng)中斷系統(tǒng)學習要點lARM中斷系統(tǒng)中斷系統(tǒng)l中斷向量表中斷向量表lLPC2000中斷系統(tǒng)中斷系統(tǒng)lVIC中斷控制器中斷控制器ARM體系的中斷系統(tǒng)l只要正常的程序流被暫時中止,處理器就進入異常模只要正常的程序流被暫時中止,處理器就進入異常模式。式。l例如響應一個來自外設的中斷。例如響應一個來自外設的中斷。l在處理異常之前,在處理異常之前,ARM7TDMI內(nèi)核保存當前的處理內(nèi)核保存當前的處理器狀態(tài),這樣當處理程序結(jié)束時可以恢復執(zhí)行原來的器狀態(tài),這樣當處理程序結(jié)束時可以恢復執(zhí)行原來的程序。程序。l對于每一個異常事件,都有一個與之相對應的處理程對于每一個異常事件,都有一個

2、與之相對應的處理程序,它們是關聯(lián)在一起的,并以一張一維表的格式存序,它們是關聯(lián)在一起的,并以一張一維表的格式存儲在存儲器的固定單元中。這張指定了各異常中斷及儲在存儲器的固定單元中。這張指定了各異常中斷及其處理程序的對應關系的表,稱為其處理程序的對應關系的表,稱為異常向量表異常向量表。異常向量表地址地址異常類型異常類型進入時的進入時的模式模式進入時進入時I的的狀態(tài)狀態(tài)進入時進入時F的的狀態(tài)狀態(tài)0 x0000 0000復位復位管理管理禁止禁止禁止禁止0 x0000 0004未定義指令未定義指令未定義未定義IF0 x0000 0008軟件中斷軟件中斷管理管理禁止禁止F0 x0000 000C中止(預

3、?。┲兄梗A?。┲兄怪兄笽F0 x0000 0010中止(數(shù)據(jù))中止(數(shù)據(jù))中止中止IF0 x0000 0014保留保留保留保留0 x0000 0018IRQ中斷中斷禁止禁止F0 x0000 001CFIQ快中斷快中斷禁止禁止禁止禁止注注:表中的:表中的I I和和F F表示不對該位有影響,保留原來的指。表示不對該位有影響,保留原來的指。 異常優(yōu)先級l當多個異常同時發(fā)生時,一個固定的優(yōu)先級系統(tǒng)決定當多個異常同時發(fā)生時,一個固定的優(yōu)先級系統(tǒng)決定它們被處理的順序:它們被處理的順序:異常類型異常類型優(yōu)先級優(yōu)先級復位復位1(最高優(yōu)先級)(最高優(yōu)先級)數(shù)據(jù)中止數(shù)據(jù)中止2FIQ3IRQ4預取中止預取中止5未

4、定義指令未定義指令6SWI7(最低優(yōu)先級)(最低優(yōu)先級)優(yōu)先級降低程序AIRQ服務程序系統(tǒng)模式IRQ模式程序寄存器組圖示進入異常過程1. 程序在系統(tǒng)模式下運行用戶程序,假定當前處理器狀態(tài)為Thumb狀態(tài)、允許IRQ中斷;2. 用戶程序運行時發(fā)生IRQ中斷,硬件完成以下動作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MODTFI. . .N Z C V置位I位(禁止IRQ中斷)清零T位(進入ARM狀態(tài))設置MOD位,切換處理器模式至IRQ模式將下一條指令的地址存入IRQ模式的LR寄存器將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器將跳

5、轉(zhuǎn)地址存入PC,實現(xiàn)跳轉(zhuǎn)IRQ0?1. . .? ? ? ?BackAddrJumpAddrJumpSYS1?0. . .?“?”表示對該位不關心在異常處理結(jié)束后,異常處理程序完成以下動作:程序AIRQ服務程序系統(tǒng)模式IRQ模式程序寄存器組圖示退出異常過程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MODTFI. . .N Z C V將SPSR寄存器的值復制回CPSR寄存器;將LR寄存的值減去一個常量后復制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。IRQ0?1. . .? ? ? ?BackAddrJumpAddrreturnSYS1?0.

6、. .?SYS1?0. . .? ? ? ?BackAddr-4Jump“?”表示對該位不關心異常入口/出口匯總異?;蛉肟诋惓;蛉肟诜祷刂噶罘祷刂噶钪暗臓顟B(tài)之前的狀態(tài)備注備注ARM R14_xThumb R14_xBLMOV PC,R14PC+4PC+2 此處此處PC為為BL,SWI,為定義的,為定義的指令取指或預取指令取指或預取指中止指令的地指中止指令的地址址SWIMOVS PC,R14_svcPC+4PC+2未定義的指令未定義的指令MOVS PC,R14_undPC+4PC+2預取指中止預取指中止SUBS PC,R14_abt,#4PC+4PC+4快中斷快中斷SUBS PC,R14_fi

7、q,#4PC+4PC+4此處此處PC為由于為由于FIQ或或IRQ占先占先而沒有被執(zhí)行的而沒有被執(zhí)行的指令的地址指令的地址中斷中斷SUBS PC,R14_irq,#4PC+4PC+4數(shù)據(jù)中止數(shù)據(jù)中止SUBS PC,R14_abt,#8PC+8PC+8此處此處PC為產(chǎn)生數(shù)為產(chǎn)生數(shù)據(jù)中止的裝載或據(jù)中止的裝載或保存指令的地址。保存指令的地址。 復位復位無無復位時保存在復位時保存在R14_svc中的值中的值不可預知。不可預知。 注意注意:“MOVS PC,R14_svc”MOVS PC,R14_svc”是指在管理模式執(zhí)行是指在管理模式執(zhí)行MOVS PC,R14MOVS PC,R14指令。指令?!癕OVS

8、 PC,R14_und”MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”SUBS PC,R14_abt,#4”等指令也是類似的。等指令也是類似的。異常的入口和出口處理l如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復用那么可以使用一條多寄存器傳送指令來恢復用戶寄存器并實現(xiàn)返回。戶寄存器并實現(xiàn)返回。SUB LR,LR,#4;計算返回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器. . .LDMFD SP!,R0-R3,PC ;中斷返回中斷處理代碼的開始部分和退出部分中斷處理代碼的開始

9、部分和退出部分異常的入口和出口處理SUB LR,LR,#4;計算返回地址STMFD SP!,R0-R3,LR;保存使用到的寄存器. . .LDMFD SP!,R0-R3,PC ;中斷返回注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“”符號表示這是一條特殊形式的指令。這條指令在從存儲器中裝載PC的同時(PC是最后恢復的),CPSR也得到恢復。這里使用的堆棧指針SP(R13)是屬于異常模式的寄存器,每個異常模式有自己的堆棧指針。這個堆棧指針應必須在系統(tǒng)啟動時初始化。 復位異常l當當nRESET信號被拉低時,信號被拉低時,ARM處理器放棄處理器放棄正在執(zhí)行的指令。正在執(zhí)行的指令。l當你當你

10、RESET信號再次變?yōu)楦唠娖綍r,信號再次變?yōu)楦唠娖綍r,ARM處處理器執(zhí)行以下操作:理器執(zhí)行以下操作:l強制強制M4:0=10011,系統(tǒng)進入管理模式;,系統(tǒng)進入管理模式;l將將CPSR的的I和和F置位,禁止中斷和快速中斷;置位,禁止中斷和快速中斷;l將將CPSR的的T清零,處理器出入清零,處理器出入ARM狀態(tài);狀態(tài);l強制強制PC清零;清零;l系統(tǒng)返回系統(tǒng)返回ARM狀態(tài)并回復執(zhí)行。狀態(tài)并回復執(zhí)行。中斷請求l中斷請求(中斷請求(IRQ)異常是一個由)異常是一個由nIRQ輸入端輸入端的低電平所產(chǎn)生的正常中斷。的低電平所產(chǎn)生的正常中斷。lIRQ的優(yōu)先級低于的優(yōu)先級低于FIQ。任何時候在一個特權(quán)。任何

11、時候在一個特權(quán)模式下,都可通過置位模式下,都可通過置位CPSR中的中的I 位來禁止位來禁止IRQ。 l不管異常入口是來自不管異常入口是來自ARM狀態(tài)還是狀態(tài)還是Thumb狀狀態(tài),態(tài),F(xiàn)IQ處理程序都會通過執(zhí)行下面的指令從處理程序都會通過執(zhí)行下面的指令從中斷返回:中斷返回:lSUBS PC,R14_fiq,#4異常向量地址地址異常類型異常類型進入時的進入時的模式模式進入時進入時I的的狀態(tài)狀態(tài)進入時進入時F的的狀態(tài)狀態(tài)0 x0000 0000復位復位管理管理禁止禁止禁止禁止0 x0000 0004未定義指令未定義指令未定義未定義IF0 x0000 0008軟件中斷軟件中斷管理管理禁止禁止F0 x0

12、000 000C中止(預?。┲兄梗A?。┲兄怪兄笽F0 x0000 0010中止(數(shù)據(jù))中止(數(shù)據(jù))中止中止IF0 x0000 0014保留保留保留保留0 x0000 0018IRQ中斷中斷禁止禁止F0 x0000 001CFIQ快中斷快中斷禁止禁止禁止禁止注注:表中的:表中的I I和和F F表示不對該位有影響,保留原來的指。表示不對該位有影響,保留原來的指。 該位置被Boot裝載程序用作有效用戶程序的檢測標志。通過定義此保留值,使向量表所有數(shù)據(jù)32位累加和為0,芯片復位后才能脫機運行用戶程序。啟動代碼中的異常向量表的構(gòu)建l一般在一般在32位位ARM應用系統(tǒng)中,大多數(shù)采用應用系統(tǒng)中,大多數(shù)采用

13、C語語言進行軟件編程。但是在運行應用代碼前需要言進行軟件編程。但是在運行應用代碼前需要進行系統(tǒng)初始化。進行系統(tǒng)初始化。l常用一個匯編文件作啟動代碼,它可以實現(xiàn):常用一個匯編文件作啟動代碼,它可以實現(xiàn):l異常向量表定義異常向量表定義l堆棧初始化堆棧初始化l系統(tǒng)變量初始化系統(tǒng)變量初始化l中斷系統(tǒng)初始化中斷系統(tǒng)初始化lI/O初始化初始化l地址重映射等操作。地址重映射等操作。l位于啟動代碼中的異常向量表位于啟動代碼中的異常向量表 CODE32 AREA vectors,CODE,READONLY ENTRYReset LDR PC, ResetAddr LDR PC, UndefinedAddr .

14、. . DCD 0 xb9205f80 LDR PC, PC, #-0 xff0 LDR PC, FIQ_AddrResetAddr DCD ResetInitUndefinedAddr DCD Undefined. . .Nouse DCD 0IRQ_Addr DCD 0FIQ_Addr DCD FIQ_Handler 前32字節(jié)為異常入口 后32字節(jié)為跳轉(zhuǎn)地址 異常向量表l位于啟動代碼中的異常向量表位于啟動代碼中的異常向量表 CODE32 AREA vectors,CODE,READONLY ENTRYReset LDR PC, ResetAddr LDR PC, UndefinedAdd

15、r . . . DCD 0 xb9205f80 LDR PC, PC, #-0 xff0 LDR PC, FIQ_AddrResetAddr DCD ResetInitUndefinedAddr DCD Undefined. . .Nouse DCD 0IRQ_Addr DCD 0FIQ_Addr DCD FIQ_Handler異常向量表例如:發(fā)生未定義異常時1.程序計數(shù)器(PC)指向0 x00000004;2.執(zhí)行當前的指令,將Undefined地址值裝入PC,實現(xiàn)至未定義異常處理程序的跳轉(zhuǎn)。裝入l位于啟動代碼中的異常向量表位于啟動代碼中的異常向量表 CODE32 AREA vectors,

16、CODE,READONLY ENTRYReset LDR PC, ResetAddr LDR PC, UndefinedAddr . . . DCD 0 xb9205f80 LDR PC, PC, #-0 xff0 LDR PC, FIQ_AddrResetAddr DCD ResetInitUndefinedAddr DCD Undefined. . .Nouse DCD 0IRQ_Addr DCD 0FIQ_Addr DCD FIQ_Handler異常向量表注意:異常向量表中程序跳轉(zhuǎn)使用LDR指令,而沒有使用B指令。原因:1.LDR指令可以全地址范圍跳轉(zhuǎn),而B指令只能在前后32MB范圍內(nèi)跳

17、轉(zhuǎn);2.芯片具有Remap功能。當向量表位于內(nèi)部RAM或外部存儲器中,用B指令不能跳轉(zhuǎn)到正確的位置。B ResetAddrl有效用戶代碼的判別有效用戶代碼的判別Reset0 xe59ff018 ldr pc,ResetAddr0 xe59ff018 ldr pc,UndefinedAddr. . .0 xb9205f80 dcd 0 xb9205f800 xe51ffff0 ldr pc,0 x7ffff0300 xe59ff018 ldr pc,FIQ_AddrResetAddr0 x8000008c dcd 0 x8000008cUndefinedAddr0 x80000040 dcd 0

18、 x80000040. . .Nouse0 x00000000 dcd 0 x00000000IRQ_Addr0 x00000000 dcd 0 x00000000FIQ_Addr0 x8000004c dcd 0 x8000004c異常向量表反匯編代碼 前32字節(jié)為異常入口 后32字節(jié)為跳轉(zhuǎn)地址 l有效用戶代碼的判別有效用戶代碼的判別Reset0 xe59ff018 ldr pc,ResetAddr0 xe59ff018 ldr pc,UndefinedAddr. . .0 xb9205f80 dcd 0 xb9205f800 xe51ffff0 ldr pc,0 x7ffff0300 xe

19、59ff018 ldr pc,FIQ_AddrResetAddr0 x8000008c dcd 0 x8000008cUndefinedAddr0 x80000040 dcd 0 x80000040. . .Nouse0 x00000000 dcd 0 x00000000IRQ_Addr0 x00000000 dcd 0 x00000000FIQ_Addr0 x8000004c dcd 0 x8000004c異常向量表反匯編代碼指令的機器碼指令l有效用戶代碼的判別有效用戶代碼的判別Reset0 xe59ff018 ldr pc,ResetAddr0 xe59ff018 ldr pc,Undef

20、inedAddr. . .0 xb9205f80 dcd 0 xb9205f800 xe51ffff0 ldr pc,0 x7ffff0300 xe59ff018 ldr pc,FIQ_AddrResetAddr0 x8000008c dcd 0 x8000008cUndefinedAddr0 x80000040 dcd 0 x80000040. . .Nouse0 x00000000 dcd 0 x00000000IRQ_Addr0 x00000000 dcd 0 x00000000FIQ_Addr0 x8000004c dcd 0 x8000004c異常向量表反匯編代碼8條指令的機器碼累加

21、和為0,表示用戶代碼有效Reset0 xe59ff018 ldr pc,ResetAddr0 xe59ff018 ldr pc,UndefinedAddr. . .0 xb9205f80 dcd 0 xb9205f800 xe51ffff0 ldr pc,0 x7ffff0300 xe59ff018 ldr pc,FIQ_AddrResetAddr0 x8000008c dcd 0 x8000008cUndefinedAddr0 x80000040 dcd 0 x80000040. . .Nouse0 x00000000 dcd 0 x00000000IRQ_Addr0 x00000000 d

22、cd 0 x00000000FIQ_Addr0 x8000004c dcd 0 x8000004c異常向量表反匯編代碼8條指令的機器碼累加和為0,表示用戶代碼有效l有效用戶代碼的判別有效用戶代碼的判別0 x000000000 xe59ff0180 xe59ff018. . .0 xb9205f800 xe51ffff00 xe59ff018跳轉(zhuǎn)地址數(shù)據(jù)不在累加范圍內(nèi) 通過調(diào)整該保留字,使累加和為0向量中斷控制器(VIC)lARM7TDMI內(nèi)核具有兩個中斷輸入,分別為內(nèi)核具有兩個中斷輸入,分別為IRQ中斷中斷和和FIQ中斷。中斷。l但是芯片內(nèi)部有許多中斷源,最多可以有但是芯片內(nèi)部有許多中斷源,最

23、多可以有32個中斷輸個中斷輸入請求。入請求。l向量中斷控制器的作用就是允許哪些中斷源可以產(chǎn)生向量中斷控制器的作用就是允許哪些中斷源可以產(chǎn)生中斷、可以產(chǎn)生哪類中斷、產(chǎn)生中斷后執(zhí)行哪段服務中斷、可以產(chǎn)生哪類中斷、產(chǎn)生中斷后執(zhí)行哪段服務程序。程序。ARM7TDMI-SIRQFIQVIC中斷請求輸入中斷請求輸入0中斷請求輸入中斷請求輸入31. . .中斷源列表模塊模塊可產(chǎn)生中斷的標志可產(chǎn)生中斷的標志VIC通道號通道號WDT看門狗中斷(看門狗中斷(WDINT)0保留給軟件中斷保留給軟件中斷1ARM內(nèi)核內(nèi)核EmbeddedICE,DbgCommRx2ARM內(nèi)核內(nèi)核EmbeddedICE,DbgCommTx

24、3定時器定時器0匹配匹配03(MR0,MR1,MR2,MR3)捕獲捕獲03(CR0,CR1,CR2,CR3)4定時器定時器1匹配匹配03(MR0,MR1,MR2,MR3)捕獲捕獲03(CR0,CR1,CR2,CR3)5UART0Rx線狀態(tài)(線狀態(tài)(RLS),發(fā)送保持寄存器空),發(fā)送保持寄存器空(THRE)Rx數(shù)據(jù)可用(數(shù)據(jù)可用(RDA),字符超時指示(),字符超時指示(CTI)6中斷源列表模塊模塊可產(chǎn)生中斷的標志可產(chǎn)生中斷的標志VIC通道號通道號UART1Rx線狀態(tài)(線狀態(tài)(RLS),發(fā)送保持寄存器空(),發(fā)送保持寄存器空(THRE)Rx數(shù)據(jù)可用(數(shù)據(jù)可用(RDA),字符超時指示(),字符超時

25、指示(CTI)7PWM0匹配匹配06(MR0,MR1,MR2,MR3,MR4,MR5,MR6)8I2CSI(狀態(tài)改變)(狀態(tài)改變)9SPI0SPI中斷標志(中斷標志(SPIF),模式錯誤(),模式錯誤(MODF)10SPI1SPI中斷標志(中斷標志(SPIF),模式錯誤(),模式錯誤(MODF)11PLLPLL鎖定(鎖定(PLOCK)12RTC計數(shù)器增加(計數(shù)器增加(RTCCIF),報警(),報警(RTCALF)13中斷源列表模塊模塊可產(chǎn)生中斷的標志可產(chǎn)生中斷的標志VIC通道號通道號系統(tǒng)控制系統(tǒng)控制外部中斷外部中斷0(EINT0)14系統(tǒng)控制系統(tǒng)控制外部中斷外部中斷1(EINT1)15系統(tǒng)控制

26、系統(tǒng)控制外部中斷外部中斷2(EINT2)16系統(tǒng)控制系統(tǒng)控制外部中斷外部中斷3(EINT3)17A/DA/D轉(zhuǎn)換器轉(zhuǎn)換器18保留保留保留保留1931允許中斷源產(chǎn)生中斷l(xiāng)芯片內(nèi)部許多部件都可以作為中斷源。芯片內(nèi)部許多部件都可以作為中斷源。l比如通過串口發(fā)送一段數(shù)據(jù),可以選擇在一批發(fā)送比如通過串口發(fā)送一段數(shù)據(jù),可以選擇在一批發(fā)送結(jié)束后產(chǎn)生中斷,然后在中斷服務程序中發(fā)送下一結(jié)束后產(chǎn)生中斷,然后在中斷服務程序中發(fā)送下一批數(shù)據(jù)。批數(shù)據(jù)。l允許中斷源產(chǎn)生中斷由寄存器允許中斷源產(chǎn)生中斷由寄存器VICIntEnable和和VICIntEnClr控制??刂啤前者使能中斷,后者禁止中斷。前者使能中斷,后者禁止中

27、斷。l選擇中斷類型選擇中斷類型中斷或快速中斷,通過寄存中斷或快速中斷,通過寄存器器VICIntSelect控制??刂啤以上三種寄存器時中斷控制器的控制寄存器。以上三種寄存器時中斷控制器的控制寄存器。VICIntEnable和VICIntEnClr中斷使能清零寄存器中斷使能清零寄存器(VICIntEnClr)(VICIntEnClr):位位311817210功能功能保留保留A/D轉(zhuǎn)換器轉(zhuǎn)換器外部中斷外部中斷3ARM內(nèi)核內(nèi)核WDT 與中斷使能寄存器的功能相反,向某位寫入與中斷使能寄存器的功能相反,向某位寫入1 1時,禁止對應時,禁止對應的中斷源產(chǎn)生中斷。的中斷源產(chǎn)生中斷。中斷使能寄存器中斷使能寄

28、存器(VICIntEnable)(VICIntEnable):位位311817210功能功能保留保留A/D轉(zhuǎn)換器轉(zhuǎn)換器外部中斷外部中斷3ARM內(nèi)核內(nèi)核WDT 寄存器中每一位控制著一個中斷源,各中斷源的位置與中斷寄存器中每一位控制著一個中斷源,各中斷源的位置與中斷源列表所示相同。向某位寫入源列表所示相同。向某位寫入1 1時,允許對應的中斷源產(chǎn)生中斷。時,允許對應的中斷源產(chǎn)生中斷。VICIntSelect ARM7TDMI ARM7TDMI內(nèi)核具有內(nèi)核具有FIQFIQ和和IRQIRQ兩個中斷輸入,所有中斷源兩個中斷輸入,所有中斷源產(chǎn)生的中斷都可以選擇產(chǎn)生其中一種中斷。這通過中斷選擇寄產(chǎn)生的中斷都可

29、以選擇產(chǎn)生其中一種中斷。這通過中斷選擇寄存器完成。存器完成。中斷選擇寄存器中斷選擇寄存器(VICIntSelect)(VICIntSelect):位位311817210功能功能保留保留A/D轉(zhuǎn)換器轉(zhuǎn)換器外部中斷外部中斷3ARM內(nèi)核內(nèi)核WDT 寄存器中每一位控制著一個中斷源,各中斷源的位置與中寄存器中每一位控制著一個中斷源,各中斷源的位置與中斷源列表所示相同。向某位寫入斷源列表所示相同。向某位寫入1 1時,對應中斷源產(chǎn)生的中斷時,對應中斷源產(chǎn)生的中斷為為FIQFIQ中斷,否則為中斷,否則為IRQIRQ中斷。中斷。中斷類型l中斷輸入請求可以在中斷輸入請求可以在VIC中被設置為以下三類:中被設置為以

30、下三類:lFIQ中斷:具有最高優(yōu)先級;中斷:具有最高優(yōu)先級;l向量向量IRQ中斷:具有中等優(yōu)先級;中斷:具有中等優(yōu)先級;lIRQ和FIQ是相對應的,F(xiàn)IQ優(yōu)先級更高,速度更快,實現(xiàn)過程卻是相似的。l非向量非向量IRQ中斷:具有最低優(yōu)先級;中斷:具有最低優(yōu)先級;1919個個中斷輸入中斷輸入VICVIC將將3232個個中斷輸入中斷輸入進行分配進行分配1313個未使用個未使用FIQFIQ中斷中斷向量向量IRQIRQ中斷中斷非向量非向量IRQIRQ中斷中斷中斷源中斷源0中斷源中斷源1中斷源中斷源18向量中斷的參數(shù)設置lVIC最多支持最多支持16個向量個向量IRQ中斷,這些中斷被中斷,這些中斷被分為分為

31、16個優(yōu)先級,并且為每個優(yōu)先級指定一個個優(yōu)先級,并且為每個優(yōu)先級指定一個服務程序入口地址。服務程序入口地址。l排隊過程:排隊過程:“座次法座次法”l在發(fā)生向量在發(fā)生向量IRQ中斷后,相應優(yōu)先級的服務程中斷后,相應優(yōu)先級的服務程序入口地址被裝入向量地址寄存器序入口地址被裝入向量地址寄存器VICVectAddr中,通過一條中,通過一條ARM指令即可跳指令即可跳轉(zhuǎn)到相應的服務程序入口處,所以向量轉(zhuǎn)到相應的服務程序入口處,所以向量IRQ中中斷具有較快的中斷響應。斷具有較快的中斷響應?!白畏ā?121920各個中斷源編號,各個中斷源編號,好像它們的身份好像它們的身份IDID中斷源好像辦中斷源好像辦理業(yè)

32、務的用戶理業(yè)務的用戶業(yè)務受理大廳業(yè)務受理大廳的等候座位,的等候座位,已經(jīng)排好了優(yōu)已經(jīng)排好了優(yōu)先次序。先次序。VIP No1:VICVectCntl0VIP No2:VICVectCntl1VIP No15:VICVectCntl14VIP No16:VICVectCntl15202身份身份ID20ID20:業(yè)務大廳:業(yè)務大廳No1 VIPNo1 VIP身份身份ID2ID2:業(yè)務大廳:業(yè)務大廳No15 VIPNo15 VIP2020號中斷源優(yōu)先級高于號中斷源優(yōu)先級高于2 2號中斷源號中斷源VICVectCntl和VICVectAddr介紹lVICVectCntl015和和VICVectAddr0

33、15兩類兩類寄存器與向量寄存器與向量IRQ中斷設置有關。中斷設置有關。l前者為中斷源分配向量前者為中斷源分配向量IRQ中斷的優(yōu)先級;中斷的優(yōu)先級;l后者為該中斷優(yōu)先級設置服務程序入口地址。后者為該中斷優(yōu)先級設置服務程序入口地址。l寄存器名稱最后的數(shù)字同時也代表該寄存器控制的寄存器名稱最后的數(shù)字同時也代表該寄存器控制的向量向量IRQ中斷的優(yōu)先級,數(shù)值越小優(yōu)先級越高。中斷的優(yōu)先級,數(shù)值越小優(yōu)先級越高。l注意:如果將同一個中斷源分配給多個使能的向量IRQ中斷,那么該中斷源發(fā)生中斷時,會使用最高優(yōu)先級(最低編號)的寄存器設置。VICVectCntl和VICVectAddr向量地址寄存器向量地址寄存器(

34、VICVectAddr0(VICVectAddr015)15):該寄存器中存放對應優(yōu)先級向量該寄存器中存放對應優(yōu)先級向量IRQIRQ中斷服務程序的入口地址。中斷服務程序的入口地址。位位31:0功能功能中斷服務程序入口地址中斷服務程序入口地址向量控制寄存器向量控制寄存器(VICVectCntl0(VICVectCntl015)15):VICVectCntlx4:0VICVectCntlx4:0:分配給此優(yōu)先級的中斷源序號;:分配給此優(yōu)先級的中斷源序號;VICVectCntlx5VICVectCntlx5:為:為1 1,使能當前優(yōu)先級的中斷,否則為禁止。,使能當前優(yōu)先級的中斷,否則為禁止。位位76

35、54:0功能功能EN中斷源序號中斷源序號非向量IRQ中斷l(xiāng)任何中斷源都可以設置為非向量任何中斷源都可以設置為非向量IRQ中斷。中斷。l它與向量它與向量IRQ中斷的區(qū)別在于前者不能為每個中斷的區(qū)別在于前者不能為每個非向量非向量IRQ中斷源設置服務程序地址,而是所中斷源設置服務程序地址,而是所有的非向量有的非向量IRQ中斷都共用一個相同的服務程中斷都共用一個相同的服務程序入口地址。序入口地址。l當有多個中斷源被設置為非向量當有多個中斷源被設置為非向量IRQ中斷時,中斷時,需要在用戶程序中識別中斷源,并分別作出處需要在用戶程序中識別中斷源,并分別作出處理。所以非向量理。所以非向量IRQ中斷響應延時相

36、對較長。中斷響應延時相對較長。VICDefVectAddr向量地址寄存器向量地址寄存器(VICDefVectAddr)(VICDefVectAddr):VICDefVectAddrVICDefVectAddr寄存器存放非向量中斷服務程序的入口地址,當寄存器存放非向量中斷服務程序的入口地址,當發(fā)生非向量中斷時該寄存器中保存的地址存入發(fā)生非向量中斷時該寄存器中保存的地址存入VICVectAddrVICVectAddr寄存寄存器。器。位位31:0功能功能中斷服務程序入口地址中斷服務程序入口地址產(chǎn)生中斷后的服務程序地址l在發(fā)生向量在發(fā)生向量IRQ中斷后,中斷后,VIC能將對應中斷的服務程能將對應中斷的

37、服務程序地址存入序地址存入VICVectAddr寄存器中。如果為非向量中寄存器中。如果為非向量中斷,將把斷,將把VICDefVectAddr寄存器的值存入該寄存器。寄存器的值存入該寄存器。l因為因為ARM7異常向量表中只有一項座位外部中斷異常向量表中只有一項座位外部中斷IRQ。l在異常向量表的在異常向量表的IRQ異常入口處放置一條指令,將異常入口處放置一條指令,將VICVectAddr寄存器的內(nèi)容裝入程序計數(shù)器(寄存器的內(nèi)容裝入程序計數(shù)器(PC),),就可以跳轉(zhuǎn)到當前中斷的服務函數(shù)。就可以跳轉(zhuǎn)到當前中斷的服務函數(shù)。 這樣的設計可這樣的設計可以減小中斷響應延時。以減小中斷響應延時。向量地址寄存器

38、向量地址寄存器(VICVectAddr)(VICVectAddr):位位31:0功能功能中斷服務程序入口地址中斷服務程序入口地址中斷狀態(tài)寄存器l如果使用了多個非向量如果使用了多個非向量IRQ中斷或多個中斷或多個FIQ中中斷,那么在發(fā)生中斷后要在程序中查找中斷源。斷,那么在發(fā)生中斷后要在程序中查找中斷源。通過通過IRQ狀態(tài)寄存器和狀態(tài)寄存器和FIQ狀態(tài)寄存器可以了狀態(tài)寄存器可以了解到這些中斷源的中斷請求狀態(tài)。解到這些中斷源的中斷請求狀態(tài)。l任何在任何在VIC中使能的中斷都會把中斷請求反映中使能的中斷都會把中斷請求反映在在“所有中斷狀態(tài)寄存器(所有中斷狀態(tài)寄存器(VICRawIntr)”中。中。I

39、RQIRQ狀態(tài)寄存器狀態(tài)寄存器(VICIRQStatus)(VICIRQStatus):位位31:0功能功能當某位為當某位為1時表示對應位的中斷源產(chǎn)生時表示對應位的中斷源產(chǎn)生IRQ中斷請求。中斷請求。中斷狀態(tài)寄存器介紹所有中斷狀態(tài)寄存器所有中斷狀態(tài)寄存器(VICRawIntr)(VICRawIntr):位位31:0功能功能當某位為當某位為1時表示對應位的中斷源產(chǎn)生中斷請求。時表示對應位的中斷源產(chǎn)生中斷請求。FIQFIQ狀態(tài)寄存器狀態(tài)寄存器(VICFIQStatus)(VICFIQStatus):位位31:0功能功能當某位為當某位為1時表示對應位的中斷源產(chǎn)生時表示對應位的中斷源產(chǎn)生FIQ中斷請求

40、。中斷請求。軟件中斷寄存器l在一些特殊場合或者調(diào)試時,可能需要使用軟在一些特殊場合或者調(diào)試時,可能需要使用軟件強制產(chǎn)生某個中斷請求。件強制產(chǎn)生某個中斷請求。軟件中斷寄存器軟件中斷寄存器(VICSoftInt)(VICSoftInt):位位31:0功能功能當某位為當某位為1時,將產(chǎn)生與該位相對應的中斷請求。時,將產(chǎn)生與該位相對應的中斷請求。軟件中斷清零寄存器軟件中斷清零寄存器(VICSoftIntClear)(VICSoftIntClear):位位31:0功能功能當某位為當某位為1時,將清零時,將清零VICSoftInt寄存器中對應位寄存器中對應位保護使能寄存器l在某些場合可能需要禁止在用戶模式

41、下訪問在某些場合可能需要禁止在用戶模式下訪問VIC寄存器,以提高軟件的安全等級。寄存器,以提高軟件的安全等級。軟件中斷寄存器軟件中斷寄存器(VICSoftInt)(VICSoftInt):位位31:10功能功能當該位為當該位為1時,只能在特權(quán)模式下訪問時,只能在特權(quán)模式下訪問VIC寄存寄存器。器。lIRQ中斷的設計實例中斷的設計實例 設置外部中斷0產(chǎn)生向量IRQ中斷后執(zhí)行中斷服務程序“IRQ_Eint0( )”。.PINSEL1 = (PINSEL1&0 xFFFFFFFC)|0 x01; VICIntSelect = 0 x00000000; VICVectCntl0 = (0 x2

42、0 | 14); VICVectAddr0 = (int)IRQ_Eint0; EXTINT = 0 x01; VICIntEnable = (1 14); .C代碼:1.設置引腳連接模塊,將P0.16設置為外部中斷功能;步驟:2.設置所有中斷為IRQ中斷;3.將外部中斷0(在中斷源列表中序號14)設置到優(yōu)先級0中,并使能IRQ中斷;4.將外部中斷0的中斷服務程序?qū)懭雽獌?yōu)先級的地址寄存器中;5.清除外部中斷0的標志后使能外部中斷0;(1)(2)(3)(4)(5)(5)0 x0000 00000 xFFFF FFFF用戶程序中斷服務程序異常向量表1.正在執(zhí)行用戶程序;2.外部中斷0發(fā)生中斷;3.VIC硬件將中斷服務程序地址裝入VICVectAddr寄存器;4.程序跳轉(zhuǎn)至異常向量表中IRQ入口0 x0018處;5.執(zhí)行指令跳轉(zhuǎn)至VICVectAddr寄存器中的中斷服務地址;6.中斷服務程序執(zhí)行完畢,返回被中斷的用戶程序繼續(xù)執(zhí)行被中斷的代碼。l圖示圖示IRQ中斷的發(fā)生過程中斷的發(fā)生過程IRQ_Eint0?VICVectAddr0VI

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論