您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 亚嵌教育内部培训资料 - ARM 异常和中断处理
北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构77ARM异常和中断处理课程编号:3103北京亚嵌教育研究中心©2009AKAE北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构78学习安排基本概念辨析:异常vs中断预备知识-ARM体系结构回顾ARM异常处理异常的产生和处理什么是处理器现场?现场如何保存和恢复?ARM中断处理中断的产生中断程序的初始化中断响应及处理流程北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构79Section1基本概念辨析:异常vs中断北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构80异常概念中断和异常的区别与联系异常是一种ARM处理器模式分类ARM处理器的七种运行模式USR,SYS,SVC,IRQ,FIQ,UND,ABT五种异常模式SVC,IRQ,FIQ,UND,ABT非特权模式特权模式非异常模式异常模式用户模式USR系统模式SYS中断模式IRQ快中断模式FIQ管理模式SVC终止模式ABT未定义模式UND北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构81ARM寄存器组织通用寄存器:未分组寄存器R0~R7分组寄存器R8~R14程序计数器PC(R15)程序状态寄存器CPSRSPSR_modeR0R1R2R3R4R5R6R7R9R8R10R11R12R13R14R15(PC)R0R1R2R3R4R5R6R7R9R8R10R11R12R13_svcR14_svcR15(PC)R0R1R2R3R4R5R6R7R9_fiqR10_fiqR11_fiqR12_fiqR13_fiqR14_fiqR15(PC)R8_fiqR0R1R2R3R4R5R6R7R9R8R10R11R12R13_abtR14_abtR15(PC)R0R1R2R3R4R5R6R7R9R8R10R11R12R13_irqR14_irqR15(PC)R0R1R2R3R4R5R6R7R9R8R10R11R12R13_undR14_undR15(PC)System&UserFIQSupervisorIRQAbortUndefinedARM状态通用寄存器和程序计数器ARM状态程序状态寄存器CPSRCPSRSPSR_fiqCPSRSPSR_irq=bankedregisterCPSRSPSR_undCPSRSPSR_abtCPSRSPSR_svc北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构82中断概念中断模式是ARM异常模式之一IRQ模式FIQ模式中断是一种异步事件外部按键产生中断内部定时器产生中断通信接口的数据收发产生中断...UART/DMA/USB/EthernetMAC北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构83异常vs中断异常vs中断ARM-CorevsSoC中断异常的触发nIRQ/nFIQ中断源外设GPIOTimerUART…中断控制器InterruptController中断控制器InterruptControllernIRQnFIQARM-Core外设中断源GPIO/Timer/UART…外设中断请求典型SoC芯片北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构84Section2异常处理北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构85异常的产生当正常的程序执行流程发生暂时的停止时,称之为异常。例如:一个按键被按下产生的外部中断请求*一条SWI软件中断指令产生的系统调用请求一条未定义指令产生的未定义指令异常存储器失效产生的中止异常北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构86程序执行流程控制程序的执行流程有3种方式:正常情况下,程序每执行一条指令,程序计数器寄存器pc将增加4或2字节;通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行;B指令(无返回的跳转)BL指令(带返回地址的跳转)异常发生时,系统将跳转到相应的异常处理程序处执行。SWI指令(软件中断)Interrupt中断(硬件触发中断,如GPIO/Timer)北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构87异常类型异常类型具体含义复位(Reset)当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。未定义指令(Undefined)当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。软件中断(SWI)该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。指令预取中止(PrefetchAbort)若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。数据中止(DataAbort)若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。外部中断请求(IRQ)当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。快速中断请求(FIQ)当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构88异常分类直接异常软件中断(汇编语言SWI指令触发)未定义指令包括所要求的协处理器不存在时的协处理器命令预取指令间接异常数据中止(在Load和Store数据访问时的存储器故障)外部异常复位IRQ和FIQ北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构89几个异常如果同时发生,它们的优先级如下1、复位2、数据异常中止3、FIQ4、IRQ5、预取指令6、SWI和未定义指令异常优先级北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构90异常的处理在处理异常之前,当前处理器现场必须被保存,这样当异常处理完成后,恢复之前保存的处理器现场,当前程序才可以继续正确执行。处理器现场的保存和恢复通常是和体系结构密切相关的,现场特指ARM内核相关的寄存器。现场的保存和恢复必须依靠汇编语句完成,通常是通过栈操作指令,在栈空间内进行的。北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构91异常处理时内存映像图内存主程序(通常是无限循环)异常处理程序保存处理器现场程序恢复处理器现场程序主程序C语言编写通常是无限循环异常处理程序C语言编写通常是设置标志位,快速处理保存和恢复处理器现场程序汇编语言编写通常是将寄存器压栈和弹栈北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构92什么是处理器现场?通用寄存器R0–R12栈指针寄存器R13(SP)连接寄存器R14(LR)程序计数器R15(PC)程序状态寄存器CPSR北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构93哪些处理器现场要保存?SVC-IRQ;通用寄存器;R0–R12:R13(SP):R14(LR);R15(PC);CPSRR0R1R2R3R4R5R6R7R9R8R10R11R12R13R14R15(PC)R0R1R2R3R4R5R6R7R9R8R10R11R12R13_svcR14_svcR15(PC)R0R1R2R3R4R5R6R7R9_fiqR10_fiqR11_fiqR12_fiqR13_fiqR14_fiqR15(PC)R8_fiqR0R1R2R3R4R5R6R7R9R8R10R11R12R13_abtR14_abtR15(PC)R0R1R2R3R4R5R6R7R9R8R10R11R12R13_irqR14_irqR15(PC)R0R1R2R3R4R5R6R7R9R8R10R11R12R13_undR14_undR15(PC)System&UserFIQSupervisorIRQAbortUndefinedARM状态通用寄存器和程序计数器ARM状态程序状态寄存器CPSRCPSRSPSR_fiqCPSRSPSR_irq=bankedregisterCPSRSPSR_undCPSRSPSR_abtCPSRSPSR_svc北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构94异常响应硬件工作异常发生后,ARMCore会自动完成以下操作:保存返回地址到LR_mode拷贝CPSR到SPSR_mode改变处理器模式进入相应的异常模式设置适当的CPSR位改变处理器状态进入ARM状态设置中断禁止位禁止相应中断(如果需要)设置PC跳转到相应的异常向量表入口北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构95R14_Exception_Mode=ReturnLinkSPSR_Exception_Mode=CPSRCPSR[4:0]=ExceptionModeNumberCPSR[5]=0;当运行于ARM工作状态时IfException_Mode==ResetorFIQthen;当响应FIQ异常时,禁止新的FIQ异常CPSR[6]=1CPSR[7]=1PC=ExceptionVectorAddress异常响应过程用伪码来表示整个过程如下:北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构96异常向量表地址异常类型进入异常模式0x0000_0000复位SVC(管理模式)0x0000_0004未定义指令UND(未定义模式)0x0000_0008软件中断SVC(管理模式)0x0000_000C中止(预取指令)ABT(中止模式)0x0000_0010中止(数据)ABT(中止模式)0x0000_0018外部中断IRQIRQ(中断模式)0x0000_001C快速中断FIQFIQ(快速中断模式)北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构97软件保存处理器现场工作SVC-IRQ;通用寄存器;R0–R12:R13(SP)IRQ模式下不会破坏,不保存:R14(LR)IRQ模式下不会破坏,不保存;R15(PC)硬件保存到---;LR_irq;CPSR硬件保存到---;SPSR_irq北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构98课堂讨论讨论:硬件为什么要保存到IRQ模式下?;R15(PC)硬件保存到---;LR_irq;CPSR硬件保存到---;SPSR_irq★R15(pc)硬件保存到---LR_svc可以吗?★LR_irq在SVC模式下可见吗?如何保存?北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构99异常返回异常处理完毕之后,软件需要执行以下几步操作从异常返回:1、将LR的值减去相应的偏移量后送到PC中。2、同时将SPSR复制回CPSR中。★先恢复PC返回到主程序,再恢复到SVC模式,可以吗?★先恢复模式到SVC模式,再跳转回主程序,可以吗?北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构100异常返回地址的调整各种异常返回时,对返回地址的调整不同:SWI/UND:movspc,r14_swi/undFIQ/IRQ/Prefetch:subspc,r14_fiq/irq/prefetch,#4DataABR:subspc,r14_dataabr,#8北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构101引入异常向量表后的内存映像内存主程序(通常是无限循环)异常处理程序保存处理器现场程序恢复处理器现场程序主程序异常处理程序保存和恢复处理器现场程序异常向量表通常是放置一条跳转语句从主程序到异常向量表的跳转是硬件自动完成的异常向量表入口北京亚嵌教育研究中心(AKAE)-专业的嵌入式技术培训机构102实践中需要注意的关键知识点三次跳转大跳(硬件完成)小跳(软件完成,B指令或者LDR指令)回
本文标题:亚嵌教育内部培训资料 - ARM 异常和中断处理
链接地址:https://www.777doc.com/doc-964968 .html