ARM异常中断处理及编程_第1页
ARM异常中断处理及编程_第2页
ARM异常中断处理及编程_第3页
ARM异常中断处理及编程_第4页
ARM异常中断处理及编程_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、7.1 ARM异常中断处理概述1、中断:2、中断源:3、中断优先级:异常和中断的差别:7.2 ARM体系体系异常种类异常种类 ARM ARM体系结构中,存在体系结构中,存在7 7种异常处理。当种异常处理。当异常发生时,处理器会把异常发生时,处理器会把PCPC设置为一个特定的设置为一个特定的存储器地址。这一地址放在被称为存储器地址。这一地址放在被称为向量表向量表(vector tablevector table)的特定地址范围内。向量)的特定地址范围内。向量表的入口是一些跳转指令,跳转到专门处理某表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。个异常或中断的子程序。 异 常 类 型

2、处理器模式执行低地址执行高地址复位异常(Reset)特权模式0 x000000000 xFFFF0000未定义指令异常(Undefined interrupt)未定义指令中止模式0 x000000040 xFFFF0004软中断异常(Software Abort)特权模式0 x000000080 xFFFF0008预取异常(Prefetch Abort)数据访问中止模式0 x0000000C0 xFFFF000C数据异常(Data Abort)数据访问中止模式0 x000000100 xFFFF0010外部中断请求(IRQ)外部中断请求模式0 x000000180 xFFFF0018快速中断请

3、求(FIQ)快速中断请求模式0 x0000001C0 xFFFF001C 当处理器的复位引脚有效时,系统产生复当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程位异常中断,程序跳转到复位异常中断处理程序处执行。复位异常中断通常用在下面两种情序处执行。复位异常中断通常用在下面两种情况下:况下: (1 1)系统上电;)系统上电; (2 2)系统复位。)系统复位。1 1复位异常复位异常u复位复位复位完成下列操作:复位完成下列操作:R14_svc = UNPREDICTABLE valueSPSR_svc = UNPREDICTABLE valueCPSR4:0 = 0b10

4、011/*进入管理模式进入管理模式*/CPSR5 = 0/*在在ARM状态执行状态执行*/CPSR6 = 1 /*禁止快速中断禁止快速中断*/CPSR7 = 1 /*禁止正常中断禁止正常中断*/If high vectors configured thenPC=0 xFFFF0000elsePC=0 x00000000 复位不需要返回。复位不需要返回。 当当ARMARM处理器执行协处理器指令时,它处理器执行协处理器指令时,它必须等待一个外部协处理器应答后,才能真正必须等待一个外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,则发生执行这条指令。若协处理器没有响应,则发生未定义指令异

5、常。未定义指令异常。2 2未定义指令异常未定义指令异常u未定义指令异常未定义指令异常未定义指令异常出现时,执行下列操作:未定义指令异常出现时,执行下列操作:R14_und = address of next instruction after the undefined instructionSPSR_und = CPSRCPSR4:0 = 0b11011/*进入未定义模式进入未定义模式*/CPSR5 = 0/*在在ARM状态执行状态执行*/*CPSR6 不变不变*/CPSR7 = 1 /*禁止正常中断禁止正常中断*/If high vectors configured thenPC=0 xF

6、FFF0004elsePC=0 x00000004 返回:返回:MOVS PC,LR设置设置 “S” bit,PC做为目的寄存器,做为目的寄存器,在特权模式不仅仅更新在特权模式不仅仅更新PC,而且拷贝,而且拷贝SPSR 到到 CPSR。 软中断(软中断(SWISWI)异常发生时,处理器进入)异常发生时,处理器进入特权模式,执行一些特权模式下的操作系统功特权模式,执行一些特权模式下的操作系统功能。能。3 3软中断软中断u软件中断(软件中断(SWI)管理异常管理异常管理异常异常出现时,执行下列操作:管理异常异常出现时,执行下列操作:R14_svc = address of next instruc

7、tion after the SWI instructionSPSR_svc = CPSRCPSR4:0 = 0b10011/*进入管理模式进入管理模式*/CPSR5 = 0/*在在ARM状态执行状态执行*/*CPSR6 不变不变*/CPSR7 = 1 /*禁止正常中断禁止正常中断*/If high vectors configured thenPC=0 xFFFF0008elsePC=0 x00000008 返回:返回:MOVS PC, LR 预取指令异常是由系统存储器报告的。预取指令异常是由系统存储器报告的。当处理器试图去取一条被标记为预取无效的指当处理器试图去取一条被标记为预取无效的指令

8、时,发生预取指令异常。令时,发生预取指令异常。 如果系统中不包含如果系统中不包含MMUMMU时,指令预取异时,指令预取异常中断处理程序只是简单地报告错误并退出。常中断处理程序只是简单地报告错误并退出。若包含若包含MMUMMU,引起异常的指令的物理地址被存,引起异常的指令的物理地址被存储到内存中。储到内存中。4 4预取指令异常预取指令异常u预取异常预取异常预取异常出现时,执行下列操作:预取异常出现时,执行下列操作:R14_svc = address of the aborted instruction + 4SPSR_und = CPSRCPSR4:0 = 0b10111/*进入指令预取中止模式

9、进入指令预取中止模式*/CPSR5 = 0/*在在ARM状态执行状态执行*/*CPSR6 不变不变*/CPSR7 = 1 /*禁止正常中断禁止正常中断*/If high vectors configured thenPC=0 xFFFF000CelsePC=0 x0000000C 返回:返回:SUBS PC, LR,#4 数据访问中止异常是由存储器发出数据中数据访问中止异常是由存储器发出数据中止信号,它由存储器访问指令止信号,它由存储器访问指令Load/StoreLoad/Store产产生。当数据访问指令的目标地址不存在或者该生。当数据访问指令的目标地址不存在或者该地址不允许当前指令访问时,处

10、理器产生数据地址不允许当前指令访问时,处理器产生数据访问中止异常。访问中止异常。5 5数据访问中止异常数据访问中止异常u数据中止异常数据中止异常预取中止异常出现时,执行下列操作:预取中止异常出现时,执行下列操作:R14_abt = address of the aborted instruction + 8SPSR_abt = CPSRCPSR4:0 = 0b10111/*进入中止模式进入中止模式*/CPSR5 = 0/*在在ARM状态执行状态执行*/*CPSR6 不变不变*/CPSR7 = 1 /*禁止正常中断禁止正常中断*/If high vectors configured thenPC

11、=0 xFFFF0010elsePC=0 x00000010 返回:返回:SUBS PC, LR,#8 当处理器的外部中断请求(当处理器的外部中断请求(IRQIRQ)引脚有)引脚有效,而且效,而且CPSRCPSR寄存器的寄存器的I I控制位被清除时,处控制位被清除时,处理器产生外部中断理器产生外部中断IRQIRQ异常。系统中各外部设异常。系统中各外部设备通常通过该异常中断请求处理器服务。备通常通过该异常中断请求处理器服务。6 6外部中断请求外部中断请求u中断请求(中断请求(IRQ)异常异常通过处理器上的通过处理器上的IRQ输入引脚,由外部产生输入引脚,由外部产生IRQ异常。异常。IRQ异常的优

12、先级比异常的优先级比FIQ异常低。当进异常低。当进入入FIQ处理时,会屏蔽掉处理时,会屏蔽掉IRQ异常。异常。若若CPSR的的I位为位为1,则禁止,则禁止IRQ异常。异常。若若I位为位为0,则,则ARM在指令执行完之后检查在指令执行完之后检查IRQ输入。输入。 IRQ异常出现时,执行下列操作:异常出现时,执行下列操作:R14_irq = address of next instruction to be executed + 4SPSR_irq = CPSRCPSR4:0 = 0b10010/*进入进入IRQ模式模式*/CPSR5 = 0/*在在ARM状态执行状态执行*/*CPSR6 不变不变

13、*/CPSR7 = 1 /*禁止正常中断禁止正常中断*/If high vectors configured thenPC=0 xFFFF0018elsePC=0 x00000018 返回:返回:SUBS PC, LR,#4 当处理器的快速中断请求(当处理器的快速中断请求(FIQFIQ)引脚有)引脚有效且效且CPSRCPSR寄存器的寄存器的F F控制位被清除时,处理器控制位被清除时,处理器产生快速中断请求产生快速中断请求FIQFIQ异常。异常。7 7快速中断请求快速中断请求ARM微处理器的异常状态(10)u快速中断请求(快速中断请求(FIQ)异常异常通过处理器上的通过处理器上的FIQ输入引脚,

14、由外部产生输入引脚,由外部产生FIQ异常。异常。 若若CPSR的的F位为位为1,则禁止,则禁止FIQ异常。异常。若若F位为位为0,则,则ARM在指令执行完之后检在指令执行完之后检查查FIQ输入输入。 FIQ异常出现时,执行下列操作:异常出现时,执行下列操作:R14_fiq = address of next instruction to be executed + 4SPSR_fiq = CPSRCPSR4:0 = 0b10001/*进入进入FIQ模式模式*/CPSR5 = 0/*在在ARM状态执行状态执行*/CPSR6 = 1 /*禁止快速中断禁止快速中断*/CPSR7 = 1 /*禁止正常

15、中断禁止正常中断*/If high vectors configured thenPC=0 xFFFF001CelsePC=0 x0000001C 返回:返回:SUBS PC, LR,#47.3 异常的优先级异常的优先级优 先 级异 常最高 1复位异常 2数据中止 3快速中断请求 4外部中断请求 5预取指令异常 6软中断最低 7未定义指令7.4 ARM处理器模式和异常表7-37.5 ARM异常响应和处理程序返回中断响应的概念步骤:1、保护断点2、寻找中断入口3、执行中断处理程序4、中断返回ARM异常响应流程异常响应流程 当异常发生时,处理器自动切换到当异常发生时,处理器自动切换到ARMARM状

16、状态,所以在异常处理函数中要判断在异常发生态,所以在异常处理函数中要判断在异常发生前处理器是前处理器是ARMARM状态还是状态还是ThumbThumb状态。这可以状态。这可以通过检测通过检测SPSRSPSR的的T T位来判断。位来判断。1 1判断处理器状态判断处理器状态 通常情况下,只有在通常情况下,只有在SWISWI处理函数中才需处理函数中才需要知道异常发生前处理器的状态。所以在要知道异常发生前处理器的状态。所以在ThumbThumb状态下,调用状态下,调用SWISWI软中断异常必须注意软中断异常必须注意以下两点。以下两点。 (1 1)发生异常的指令地址为)发生异常的指令地址为(lr(lr2

17、)2),而不是而不是(lr(lr4)4)。 (2 2)ThumbThumb状态下的指令是状态下的指令是1616位的,在位的,在判断中断向量信号时使用半字加载指令判断中断向量信号时使用半字加载指令LDRHLDRH。 前面介绍向量表时提到,每一个异常发生前面介绍向量表时提到,每一个异常发生时总是从异常向量表开始跳转。最简单的一种时总是从异常向量表开始跳转。最简单的一种情况是向量表里面的每一条指令直接跳向对应情况是向量表里面的每一条指令直接跳向对应的异常处理函数。其中快速中断处理函数的异常处理函数。其中快速中断处理函数FIQ_handler()FIQ_handler()可以直接从地址可以直接从地址0

18、 x1C0 x1C处开始,处开始,省下一条跳转指令,如图省下一条跳转指令,如图2-72-7所示。所示。 (1 1)MOV PCMOV PC,imme_valueimme_value (2 2)LDR PCLDR PC,PC+offsetPC+offset2 2向量表向量表 当一个异常处理返回时,一共有当一个异常处理返回时,一共有3 3件事情件事情需要处理:通用寄存器的恢复、状态寄存器的需要处理:通用寄存器的恢复、状态寄存器的恢复及恢复及PCPC指针的恢复。通用寄存器的恢复采用指针的恢复。通用寄存器的恢复采用一般的堆栈操作指令即可,下面重点介绍状态一般的堆栈操作指令即可,下面重点介绍状态寄存器的

19、恢复及寄存器的恢复及PCPC指针的恢复。指针的恢复。 PC PC和和CPSRCPSR的恢复可以通过一条指令来实的恢复可以通过一条指令来实现,下面是现,下面是3 3个例子。个例子。 (1 1)MOVS PCMOVS PC,LRLR (2 2)SUBS PCSUBS PC,LRLR,4 4 (3 3)LDMFD SP!LDMFD SP!,PCPC1 1恢复被中断程序的处理器状态恢复被中断程序的处理器状态 异常返回时,另一个非常重要的问题就是异常返回时,另一个非常重要的问题就是返回地址的确定。返回地址的确定。 2 2异常的返回地址异常的返回地址(1 1)软中断异常)软中断异常(2 2)IRQIRQ或

20、或FIQFIQ异常异常(3 3)Data AbortData Abort数据中止异常数据中止异常异 常地 址用 途复位复位没有定义LR数据中止LR8指向导致数据中止异常的指令FIQLR4指向发生异常时正在执行的指令IRQLR4指向发生异常时正在执行的指令预取指令中止LR4指向导致预取指令异常的那条指令SWILR执行SWI指令的下一条指令未定义指令LR指向未定义指令的下一条指令7.6 ARM应用系统中异常中断处理程应用系统中异常中断处理程序的安装序的安装 使用汇编语言安装异常处理程序使用汇编语言安装异常处理程序使用C语言编写安装处理程序1、向量表中使用跳转指令的情况步骤:2、在向量表中使用加载P

21、C指令步骤:7.7ARM的SWI异常中断处理程序设计7.8 FIQ和IRQ异常中断程序设计7.9 基于ARM9芯片S3C2410X异常中断程序设计中断机制分析1S3C2410X的中断(1)程序状态寄存器的F位和I位。(2)中断模式(INTMOD)。(3)中断挂起寄存器(INTPND)。(4)中断屏蔽寄存器(INTMSK)。2S3C2410X的中断控制3S3C2410X的中断源中 断 源描 述中断仲裁组INT_ADCADC EOC and Touch interrupt (INT_ADC/INT_TC)ARB5INT_RTCRTC alarm interruptARB5INT_SPI1SPI1

22、interruptARB5INT_UART0UART0 Interrupt (ERR、RXD and TXD)ARB5INT_IICIIC interruptARB4INT_USBHUSB Host interruptARB4INT_USBDUSB Device interruptARB4ReservedReservedARB4INT_UART1UART1 Interrupt (ERR、RXD and TXD)ARB4INT_SPI0SPI0 interruptARB4INT_SDISDI interruptARB3INT_DMA3DMA channel 3 interruptARB3INT_

23、DMA2DMA channel 2 interruptARB3INT_DMA1DMA channel 1 interruptARB3INT_DMA0DMA channel 0 interruptARB3INT_LCDLCD interrupt (INT_FrSyn and INT_FiCnt)ARB3中 断 源描 述中断仲裁组INT_UART2UART2 Interrupt (ERR、RXD and TXD)ARB2INT_TIMER4Timer4 interruptARB2INT_TIMER3Timer3 interruptARB2INT_TIMER2Timer2 interruptARB2INT_TIMER1Timer1 interruptARB2INT_TIMER0Timer0 interruptARB2INT_WDTWatch-Dog timer interruptARB1INT_TICKRTC Time tick interruptARB1nBATT_FLTBattery Fault interruptARB1Res

温馨提示

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

评论

0/150

提交评论