第06讲 中断系统_第1页
第06讲 中断系统_第2页
第06讲 中断系统_第3页
第06讲 中断系统_第4页
第06讲 中断系统_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式处理器的结构和编程中断系统中断系统学习要点lARM中断系统中断系统l中断向量表中断向量表lLPC2000中断系统中断系统lVIC中断控制器中断控制器ARM体系的中断系统l只要正常的程序流被暂时中止,处理器就进入异常模只要正常的程序流被暂时中止,处理器就进入异常模式。式。l例如响应一个来自外设的中断。例如响应一个来自外设的中断。l在处理异常之前,在处理异常之前,ARM7TDMI内核保存当前的处理内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的器状态,这样当处理程序结束时可以恢复执行原来的程序。程序。l对于每一个异常事件,都有一个与之相对应的处理程对于每一个异常事件,都有一个

2、与之相对应的处理程序,它们是关联在一起的,并以一张一维表的格式存序,它们是关联在一起的,并以一张一维表的格式存储在存储器的固定单元中。这张指定了各异常中断及储在存储器的固定单元中。这张指定了各异常中断及其处理程序的对应关系的表,称为其处理程序的对应关系的表,称为异常向量表异常向量表。异常向量表地址地址异常类型异常类型进入时的进入时的模式模式进入时进入时I的的状态状态进入时进入时F的的状态状态0 x0000 0000复位复位管理管理禁止禁止禁止禁止0 x0000 0004未定义指令未定义指令未定义未定义IF0 x0000 0008软件中断软件中断管理管理禁止禁止F0 x0000 000C中止(预

3、取)中止(预取)中止中止IF0 x0000 0010中止(数据)中止(数据)中止中止IF0 x0000 0014保留保留保留保留0 x0000 0018IRQ中断中断禁止禁止F0 x0000 001CFIQ快中断快中断禁止禁止禁止禁止注注:表中的:表中的I I和和F F表示不对该位有影响,保留原来的指。表示不对该位有影响,保留原来的指。 异常优先级l当多个异常同时发生时,一个固定的优先级系统决定当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序:它们被处理的顺序:异常类型异常类型优先级优先级复位复位1(最高优先级)(最高优先级)数据中止数据中止2FIQ3IRQ4预取中止预取中止5未

4、定义指令未定义指令6SWI7(最低优先级)(最低优先级)优先级降低程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示进入异常过程1. 程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;2. 用户程序运行时发生IRQ中断,硬件完成以下动作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MODTFI. . .N Z C V置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式将下一条指令的地址存入IRQ模式的LR寄存器将CPSR寄存器内容存入IRQ模式的SPSR寄存器将跳

5、转地址存入PC,实现跳转IRQ0?1. . .? ? ? ?BackAddrJumpAddrJumpSYS1?0. . .?“?”表示对该位不关心在异常处理结束后,异常处理程序完成以下动作:程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示退出异常过程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MODTFI. . .N Z C V将SPSR寄存器的值复制回CPSR寄存器;将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。IRQ0?1. . .? ? ? ?BackAddrJumpAddrreturnSYS1?0.

6、. .?SYS1?0. . .? ? ? ?BackAddr-4Jump“?”表示对该位不关心异常入口/出口汇总异常或入口异常或入口返回指令返回指令之前的状态之前的状态备注备注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占先占先而没有被执行的而没有被执行的指令的地址指令的地址中断中断SUBS PC,R14_irq,#4PC+4PC+4数据中止数据中止SUBS PC,R14_abt,#8PC+8PC+8此处此处PC为产生数为产生数据中止的装载或据中止的装载或保存指令的地址。保存指令的地址。 复位复位无无复位时保存在复位时保存在R14_svc中的值中的值不可预知。不可预知。 注意注意:“MOVS PC,R14_svc”MOVS PC,R14_svc”是指在管理模式执行是指在管理模式执行MOVS PC,R14MOVS PC,R14指令。指令。“MOVS

8、 PC,R14_und”MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”SUBS PC,R14_abt,#4”等指令也是类似的。等指令也是类似的。异常的入口和出口处理l如果异常处理程序已经把返回地址拷贝到堆栈,如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。户寄存器并实现返回。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)是属于异常模式的寄存器,每个异常模式有自己的堆栈指针。这个堆栈指针应必须在系统启动时初始化。 复位异常l当当nRESET信号被拉低时,信号被拉低时,ARM处理器放弃处理器放弃正在执行的指令。正在执行的指令。l当你当你

10、RESET信号再次变为高电平时,信号再次变为高电平时,ARM处处理器执行以下操作:理器执行以下操作:l强制强制M4:0=10011,系统进入管理模式;,系统进入管理模式;l将将CPSR的的I和和F置位,禁止中断和快速中断;置位,禁止中断和快速中断;l将将CPSR的的T清零,处理器出入清零,处理器出入ARM状态;状态;l强制强制PC清零;清零;l系统返回系统返回ARM状态并回复执行。状态并回复执行。中断请求l中断请求(中断请求(IRQ)异常是一个由)异常是一个由nIRQ输入端输入端的低电平所产生的正常中断。的低电平所产生的正常中断。lIRQ的优先级低于的优先级低于FIQ。任何时候在一个特权。任何

11、时候在一个特权模式下,都可通过置位模式下,都可通过置位CPSR中的中的I 位来禁止位来禁止IRQ。 l不管异常入口是来自不管异常入口是来自ARM状态还是状态还是Thumb状状态,态,FIQ处理程序都会通过执行下面的指令从处理程序都会通过执行下面的指令从中断返回:中断返回:lSUBS PC,R14_fiq,#4异常向量地址地址异常类型异常类型进入时的进入时的模式模式进入时进入时I的的状态状态进入时进入时F的的状态状态0 x0000 0000复位复位管理管理禁止禁止禁止禁止0 x0000 0004未定义指令未定义指令未定义未定义IF0 x0000 0008软件中断软件中断管理管理禁止禁止F0 x0

12、000 000C中止(预取)中止(预取)中止中止IF0 x0000 0010中止(数据)中止(数据)中止中止IF0 x0000 0014保留保留保留保留0 x0000 0018IRQ中断中断禁止禁止F0 x0000 001CFIQ快中断快中断禁止禁止禁止禁止注注:表中的:表中的I I和和F F表示不对该位有影响,保留原来的指。表示不对该位有影响,保留原来的指。 该位置被Boot装载程序用作有效用户程序的检测标志。通过定义此保留值,使向量表所有数据32位累加和为0,芯片复位后才能脱机运行用户程序。启动代码中的异常向量表的构建l一般在一般在32位位ARM应用系统中,大多数采用应用系统中,大多数采用

13、C语语言进行软件编程。但是在运行应用代码前需要言进行软件编程。但是在运行应用代码前需要进行系统初始化。进行系统初始化。l常用一个汇编文件作启动代码,它可以实现:常用一个汇编文件作启动代码,它可以实现:l异常向量表定义异常向量表定义l堆栈初始化堆栈初始化l系统变量初始化系统变量初始化l中断系统初始化中断系统初始化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字节为异常入口 后32字节为跳转地址 异常向量表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异常向量表例如:发生未定义异常时1.程序计数器(PC)指向0 x00000004;2.执行当前的指令,将Undefined地址值装入PC,实现至未定义异常处理程序的跳转。装入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异常向量表注意:异常向量表中程序跳转使用LDR指令,而没有使用B指令。原因:1.LDR指令可以全地址范围跳转,而B指令只能在前后32MB范围内跳

17、转;2.芯片具有Remap功能。当向量表位于内部RAM或外部存储器中,用B指令不能跳转到正确的位置。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字节为异常入口 后32字节为跳转地址 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跳转地址数据不在累加范围内 通过调整该保留字,使累加和为0向量中断控制器(VIC)lARM7TDMI内核具有两个中断输入,分别为内核具有两个中断输入,分别为IRQ中断中断和和FIQ中断。中断。l但是芯片内部有许多中断源,最多可以有但是芯片内部有许多中断源,最

23、多可以有32个中断输个中断输入请求。入请求。l向量中断控制器的作用就是允许哪些中断源可以产生向量中断控制器的作用就是允许哪些中断源可以产生中断、可以产生哪类中断、产生中断后执行哪段服务中断、可以产生哪类中断、产生中断后执行哪段服务程序。程序。ARM7TDMI-SIRQFIQVIC中断请求输入中断请求输入0中断请求输入中断请求输入31. . .中断源列表模块模块可产生中断的标志可产生中断的标志VIC通道号通道号WDT看门狗中断(看门狗中断(WDINT)0保留给软件中断保留给软件中断1ARM内核内核EmbeddedICE,DbgCommRx2ARM内核内核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线状态(线状态(RLS),发送保持寄存器空),发送保持寄存器空(THRE)Rx数据可用(数据可用(RDA),字符超时指示(),字符超时指示(CTI)6中断源列表模块模块可产生中断的标志可产生中断的标志VIC通道号通道号UART1Rx线状态(线状态(RLS),发送保持寄存器空(),发送保持寄存器空(THRE)Rx数据可用(数据可用(RDA),字符超时指示(),字符超时

25、指示(CTI)7PWM0匹配匹配06(MR0,MR1,MR2,MR3,MR4,MR5,MR6)8I2CSI(状态改变)(状态改变)9SPI0SPI中断标志(中断标志(SPIF),模式错误(),模式错误(MODF)10SPI1SPI中断标志(中断标志(SPIF),模式错误(),模式错误(MODF)11PLLPLL锁定(锁定(PLOCK)12RTC计数器增加(计数器增加(RTCCIF),报警(),报警(RTCALF)13中断源列表模块模块可产生中断的标志可产生中断的标志VIC通道号通道号系统控制系统控制外部中断外部中断0(EINT0)14系统控制系统控制外部中断外部中断1(EINT1)15系统控制

26、系统控制外部中断外部中断2(EINT2)16系统控制系统控制外部中断外部中断3(EINT3)17A/DA/D转换器转换器18保留保留保留保留1931允许中断源产生中断l芯片内部许多部件都可以作为中断源。芯片内部许多部件都可以作为中断源。l比如通过串口发送一段数据,可以选择在一批发送比如通过串口发送一段数据,可以选择在一批发送结束后产生中断,然后在中断服务程序中发送下一结束后产生中断,然后在中断服务程序中发送下一批数据。批数据。l允许中断源产生中断由寄存器允许中断源产生中断由寄存器VICIntEnable和和VICIntEnClr控制。控制。l前者使能中断,后者禁止中断。前者使能中断,后者禁止中

27、断。l选择中断类型选择中断类型中断或快速中断,通过寄存中断或快速中断,通过寄存器器VICIntSelect控制。控制。l以上三种寄存器时中断控制器的控制寄存器。以上三种寄存器时中断控制器的控制寄存器。VICIntEnable和VICIntEnClr中断使能清零寄存器中断使能清零寄存器(VICIntEnClr)(VICIntEnClr):位位311817210功能功能保留保留A/D转换器转换器外部中断外部中断3ARM内核内核WDT 与中断使能寄存器的功能相反,向某位写入与中断使能寄存器的功能相反,向某位写入1 1时,禁止对应时,禁止对应的中断源产生中断。的中断源产生中断。中断使能寄存器中断使能寄

28、存器(VICIntEnable)(VICIntEnable):位位311817210功能功能保留保留A/D转换器转换器外部中断外部中断3ARM内核内核WDT 寄存器中每一位控制着一个中断源,各中断源的位置与中断寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入源列表所示相同。向某位写入1 1时,允许对应的中断源产生中断。时,允许对应的中断源产生中断。VICIntSelect ARM7TDMI ARM7TDMI内核具有内核具有FIQFIQ和和IRQIRQ两个中断输入,所有中断源两个中断输入,所有中断源产生的中断都可以选择产生其中一种中断。这通过中断选择寄产生的中断都可

29、以选择产生其中一种中断。这通过中断选择寄存器完成。存器完成。中断选择寄存器中断选择寄存器(VICIntSelect)(VICIntSelect):位位311817210功能功能保留保留A/D转换器转换器外部中断外部中断3ARM内核内核WDT 寄存器中每一位控制着一个中断源,各中断源的位置与中寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入断源列表所示相同。向某位写入1 1时,对应中断源产生的中断时,对应中断源产生的中断为为FIQFIQ中断,否则为中断,否则为IRQIRQ中断。中断。中断类型l中断输入请求可以在中断输入请求可以在VIC中被设置为以下三类:中被设置为以

30、下三类:lFIQ中断:具有最高优先级;中断:具有最高优先级;l向量向量IRQ中断:具有中等优先级;中断:具有中等优先级;lIRQ和FIQ是相对应的,FIQ优先级更高,速度更快,实现过程却是相似的。l非向量非向量IRQ中断:具有最低优先级;中断:具有最低优先级;1919个个中断输入中断输入VICVIC将将3232个个中断输入中断输入进行分配进行分配1313个未使用个未使用FIQFIQ中断中断向量向量IRQIRQ中断中断非向量非向量IRQIRQ中断中断中断源中断源0中断源中断源1中断源中断源18向量中断的参数设置lVIC最多支持最多支持16个向量个向量IRQ中断,这些中断被中断,这些中断被分为分为

31、16个优先级,并且为每个优先级指定一个个优先级,并且为每个优先级指定一个服务程序入口地址。服务程序入口地址。l排队过程:排队过程:“座次法座次法”l在发生向量在发生向量IRQ中断后,相应优先级的服务程中断后,相应优先级的服务程序入口地址被装入向量地址寄存器序入口地址被装入向量地址寄存器VICVectAddr中,通过一条中,通过一条ARM指令即可跳指令即可跳转到相应的服务程序入口处,所以向量转到相应的服务程序入口处,所以向量IRQ中中断具有较快的中断响应。断具有较快的中断响应。“座次法”0121920各个中断源编号,各个中断源编号,好像它们的身份好像它们的身份IDID中断源好像办中断源好像办理业

32、务的用户理业务的用户业务受理大厅业务受理大厅的等候座位,的等候座位,已经排好了优已经排好了优先次序。先次序。VIP No1:VICVectCntl0VIP No2:VICVectCntl1VIP No15:VICVectCntl14VIP No16:VICVectCntl15202身份身份ID20ID20:业务大厅:业务大厅No1 VIPNo1 VIP身份身份ID2ID2:业务大厅:业务大厅No15 VIPNo15 VIP2020号中断源优先级高于号中断源优先级高于2 2号中断源号中断源VICVectCntl和VICVectAddr介绍lVICVectCntl015和和VICVectAddr0

33、15两类两类寄存器与向量寄存器与向量IRQ中断设置有关。中断设置有关。l前者为中断源分配向量前者为中断源分配向量IRQ中断的优先级;中断的优先级;l后者为该中断优先级设置服务程序入口地址。后者为该中断优先级设置服务程序入口地址。l寄存器名称最后的数字同时也代表该寄存器控制的寄存器名称最后的数字同时也代表该寄存器控制的向量向量IRQ中断的优先级,数值越小优先级越高。中断的优先级,数值越小优先级越高。l注意:如果将同一个中断源分配给多个使能的向量IRQ中断,那么该中断源发生中断时,会使用最高优先级(最低编号)的寄存器设置。VICVectCntl和VICVectAddr向量地址寄存器向量地址寄存器(

34、VICVectAddr0(VICVectAddr015)15):该寄存器中存放对应优先级向量该寄存器中存放对应优先级向量IRQIRQ中断服务程序的入口地址。中断服务程序的入口地址。位位31:0功能功能中断服务程序入口地址中断服务程序入口地址向量控制寄存器向量控制寄存器(VICVectCntl0(VICVectCntl015)15):VICVectCntlx4:0VICVectCntlx4:0:分配给此优先级的中断源序号;:分配给此优先级的中断源序号;VICVectCntlx5VICVectCntlx5:为:为1 1,使能当前优先级的中断,否则为禁止。,使能当前优先级的中断,否则为禁止。位位76

35、54:0功能功能EN中断源序号中断源序号非向量IRQ中断l任何中断源都可以设置为非向量任何中断源都可以设置为非向量IRQ中断。中断。l它与向量它与向量IRQ中断的区别在于前者不能为每个中断的区别在于前者不能为每个非向量非向量IRQ中断源设置服务程序地址,而是所中断源设置服务程序地址,而是所有的非向量有的非向量IRQ中断都共用一个相同的服务程中断都共用一个相同的服务程序入口地址。序入口地址。l当有多个中断源被设置为非向量当有多个中断源被设置为非向量IRQ中断时,中断时,需要在用户程序中识别中断源,并分别作出处需要在用户程序中识别中断源,并分别作出处理。所以非向量理。所以非向量IRQ中断响应延时相

36、对较长。中断响应延时相对较长。VICDefVectAddr向量地址寄存器向量地址寄存器(VICDefVectAddr)(VICDefVectAddr):VICDefVectAddrVICDefVectAddr寄存器存放非向量中断服务程序的入口地址,当寄存器存放非向量中断服务程序的入口地址,当发生非向量中断时该寄存器中保存的地址存入发生非向量中断时该寄存器中保存的地址存入VICVectAddrVICVectAddr寄存寄存器。器。位位31:0功能功能中断服务程序入口地址中断服务程序入口地址产生中断后的服务程序地址l在发生向量在发生向量IRQ中断后,中断后,VIC能将对应中断的服务程能将对应中断的

37、服务程序地址存入序地址存入VICVectAddr寄存器中。如果为非向量中寄存器中。如果为非向量中断,将把断,将把VICDefVectAddr寄存器的值存入该寄存器。寄存器的值存入该寄存器。l因为因为ARM7异常向量表中只有一项座位外部中断异常向量表中只有一项座位外部中断IRQ。l在异常向量表的在异常向量表的IRQ异常入口处放置一条指令,将异常入口处放置一条指令,将VICVectAddr寄存器的内容装入程序计数器(寄存器的内容装入程序计数器(PC),),就可以跳转到当前中断的服务函数。就可以跳转到当前中断的服务函数。 这样的设计可这样的设计可以减小中断响应延时。以减小中断响应延时。向量地址寄存器

38、向量地址寄存器(VICVectAddr)(VICVectAddr):位位31:0功能功能中断服务程序入口地址中断服务程序入口地址中断状态寄存器l如果使用了多个非向量如果使用了多个非向量IRQ中断或多个中断或多个FIQ中中断,那么在发生中断后要在程序中查找中断源。断,那么在发生中断后要在程序中查找中断源。通过通过IRQ状态寄存器和状态寄存器和FIQ状态寄存器可以了状态寄存器可以了解到这些中断源的中断请求状态。解到这些中断源的中断请求状态。l任何在任何在VIC中使能的中断都会把中断请求反映中使能的中断都会把中断请求反映在在“所有中断状态寄存器(所有中断状态寄存器(VICRawIntr)”中。中。I

39、RQIRQ状态寄存器状态寄存器(VICIRQStatus)(VICIRQStatus):位位31:0功能功能当某位为当某位为1时表示对应位的中断源产生时表示对应位的中断源产生IRQ中断请求。中断请求。中断状态寄存器介绍所有中断状态寄存器所有中断状态寄存器(VICRawIntr)(VICRawIntr):位位31:0功能功能当某位为当某位为1时表示对应位的中断源产生中断请求。时表示对应位的中断源产生中断请求。FIQFIQ状态寄存器状态寄存器(VICFIQStatus)(VICFIQStatus):位位31:0功能功能当某位为当某位为1时表示对应位的中断源产生时表示对应位的中断源产生FIQ中断请求

40、。中断请求。软件中断寄存器l在一些特殊场合或者调试时,可能需要使用软在一些特殊场合或者调试时,可能需要使用软件强制产生某个中断请求。件强制产生某个中断请求。软件中断寄存器软件中断寄存器(VICSoftInt)(VICSoftInt):位位31:0功能功能当某位为当某位为1时,将产生与该位相对应的中断请求。时,将产生与该位相对应的中断请求。软件中断清零寄存器软件中断清零寄存器(VICSoftIntClear)(VICSoftIntClear):位位31:0功能功能当某位为当某位为1时,将清零时,将清零VICSoftInt寄存器中对应位寄存器中对应位保护使能寄存器l在某些场合可能需要禁止在用户模式

41、下访问在某些场合可能需要禁止在用户模式下访问VIC寄存器,以提高软件的安全等级。寄存器,以提高软件的安全等级。软件中断寄存器软件中断寄存器(VICSoftInt)(VICSoftInt):位位31:10功能功能当该位为当该位为1时,只能在特权模式下访问时,只能在特权模式下访问VIC寄存寄存器。器。lIRQ中断的设计实例中断的设计实例 设置外部中断0产生向量IRQ中断后执行中断服务程序“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)设置到优先级0中,并使能IRQ中断;4.将外部中断0的中断服务程序写入对应优先级的地址寄存器中;5.清除外部中断0的标志后使能外部中断0;(1)(2)(3)(4)(5)(5)0 x0000 00000 xFFFF FFFF用户程序中断服务程序异常向量表1.正在执行用户程序;2.外部中断0发生中断;3.VIC硬件将中断服务程序地址装入VICVectAddr寄存器;4.程序跳转至异常向量表中IRQ入口0 x0018处;5.执行指令跳转至VICVectAddr寄存器中的中断服务地址;6.中断服务程序执行完毕,返回被中断的用户程序继续执行被中断的代码。l图示图示IRQ中断的发生过程中断的发生过程IRQ_Eint0?VICVectAddr0VI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论