06ARM异常中断处理及程序设计1613.pptx
-
资源ID:77250904
资源大小:277.96KB
全文页数:31页
- 资源格式: PPTX
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
06ARM异常中断处理及程序设计1613.pptx
嵌入式ARM系统原理与实例开发(第2版)嵌入式ARM系统原理与实例开发北京大学出版社出版3/13/20231北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)1 12 2ARM中断类型及中断向量中断类型及中断向量 安装安装ARM中断处理程序中断处理程序第6章ARM异常中断处理及程序设计3 3IRQ中断处理过程及处理中断处理过程及处理 3 3SWI中断处理原理及应用程序开发中断处理原理及应用程序开发3/13/20232北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)异常的概念异常将导致处理器停止当前事务处理,转而处理一个突发事件(这个突发事件包括外部或者内部引起的)。例如一个外部中断或者试图执行一个未定义的指令。在处理异常之前,为了在异常处理完成后能够很好的返回到中断处理之前的状态,在编写程序的时候有必要将处理器当前的状态保护起来,另外,在同一时刻有可能出现多个异常中断请求。3/13/20233北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)ARM异常类型如果发生中断及异常,以下信息需要进行保护:(1)当前程序的状态,即CPU信息,存储在CPSR寄存器中;(2)当前程序的位置,以便于从异常及中断中返回,即当前PC寄存器信息;(3)临时数据信息,即当前R0R12数据。ARM处理器在执行中断服务程序之前,都将这些信息进行了有效的保护:(1)LR(R14)寄存器用来保存当前CPU寄存器的值,即程序的返回地址;(2)SPSR寄存器用来保护当前程序的状态,即CPU信息;(3)临时数据使用栈来保存,当中断发生后,系统将开辟一段内存空间,将R0R12的数据依次压入栈中,用R13来存储该栈空间的入口地址。经过以上机制,ARM处理器能够很好的支持中断和中断嵌套。3/13/20234北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)ARM异常类型3/13/20235北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)ARM中断响应过程3/13/20236北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)Reset异常及处理当系统复位信号产生后,ARM处理器当立即中断当前正在执行的指令。进入复位处理时,处理器将进行以下操作:R14_svc=UNPREDICTABLEvalue/R14_svc不可知SPSR_svc=UNPREDICTABLEvalue/SPSR_svc不可知CPSR4:0=0b10011/处理器进入svc模式CPSR5=0/执行ARM状态CPSR6=1/禁止FIQCPSR7=1/禁止IRQifhighvectorsconfiguredthen/指向复位向量地址PC=0 xFFFF0000elsePC=0 x00000000当复位后,ARM处理器PC指针将立刻指向0 x00000000或0 xFFFF0000地址,禁止所有外部中断,运行于SVC模式。3/13/20237北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)未定义指令异常及处理当试图执行一个ARM处理器及其协处理器都无法识别的指令时将产生一个未定义指令异常。在没有实际硬件支持时,未定义指令异常可以被用来进行一个协处理器的软件仿真,或者其它软件仿真功能。3/13/20238北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)未定义指令异常处理步骤R14_und=addressofnextinstructionaftertheundefinedinstruction/R14_und为下一指令地址SPSR_und=CPSR/存储CPSR状态CPSR4:0=0b11011/进入未定义模式CPSR5=0/执行ARM执行/CPSR6isunchanged,允许FIQCPSR7=1/禁止IRQifhighvectorsconfiguredthen/指向未定义中断向量PC=0 xFFFF0004elsePC=0 x000000043/13/20239北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)软中断异常及处理软中断异常是由SWI指令产生的,其将进入使CPU进入SVC模式,执行以下操作:R14_svc=addressofnextinstructionaftertheSWIinstruction/R14_svc指向SWI下一条要执行指令SPSR_svc=CPSR/备份CPSRCPSR4:0=0b10011/进入SVC模式CPSR5=0/执行ARM状态指令/*CPSR6isunchanged*/CPSR7=1/禁止IRQifhighvectorsconfiguredthen/进入异常处理PC=0 xFFFF0008elsePC=0 x000000083/13/202310北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)预取指异常及处理存储异常是由存储系统产生的,当试图读取一个不可用指令时,将产生一个存储器异常信号来标识所取指指令不可用。当试图执行该指令时将产生一个预取异常,如果该指令并没有被执行(例如在管理操作时执行分支指令)则不会产生一个预取异常。在ARMv5及以上版本,执行BKPT指令也会产生一个预取异常。3/13/202311北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)预取指异常及处理预取指异常处理指令如下:R14_abt=addressoftheabortedinstruction+4/R14_abt存储abt指令4位置SPSR_abt=CPSR/保存CPSRCPSR4:0=0b10111/进入SVC模式CPSR5=0/执行ARM状态指令/*CPSR6isunchanged*/CPSR7=1/禁止IRQifhighvectorsconfiguredthen/进入异常处理PC=0 xFFFF000CelsePC=0 x0000000C3/13/202312北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)IRQ异常及处理当外部普通中断异常请求管脚发送中断信号时,将产生一个普通IRQ,因其优先级低于FIQ,因此,当产生一个FIQ时将屏蔽掉IRQ请求。另外,当置位了CPSR的I位后(只有在特殊模式下才能修改I位),IRQ将被屏蔽。IRQ中断请求响应后将指令以下操作:R14_irq=addressofnextinstructiontobeexecuted+4/R14_irq存储当前指令4位置SPSR_irq=CPSR/保存CPSRCPSR4:0=0b10010/进入IRQ模式CPSR5=0/执行ARM状态指令/*CPSR6isunchanged*/CPSR7=1/禁止IRQifhighvectorsconfiguredthen/进入异常处理PC=0 xFFFF0018elsePC=0 x000000183/13/202313北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)FIQ异常及处理当外部快速中断异常请求管脚发送中断信号时,将产生一个FIQ,FIQ被设置来实现高速数据传输和通道处理,其有充足的私有寄存从而减少上下文切换时保存寄存器数据的时间。当CPSR的F位被置位时将禁止FIQ请求(只有在特殊模式下才能修改F位)。3/13/202314北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)FIQ中断处理当FIQ中断处理之前将进行以下操作:R14_fiq=addressofnextinstructiontobeexecuted+4/R14_irq存储当前指令4位置SPSR_fiq=CPSR/保存CPSRCPSR4:0=0b10001/进入FIQ模式CPSR5=0/执行ARM状态指令CPSR6=1/禁止FIQCPSR7=1/禁止IRQifhighvectorsconfiguredthen/进入异常处理PC=0 xFFFF001CelsePC=0 x0000001C3/13/202315北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)1 12 2ARM中断类型及中断向量中断类型及中断向量 安装安装ARM中断处理程序中断处理程序第6章ARM异常中断处理及程序设计3 3IRQ中断处理过程及处理中断处理过程及处理 3 3SWI中断处理原理及应用程序开发中断处理原理及应用程序开发3/13/202316北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)两种方式来装载中断处理程序使用跳转指令。这是最简单的跳转到中断异常处理程序(每一个中断向量入口表中包括一个跳转指令到相应的中断服务程序),但这种方式会受到跳转指令的限制,即ARM跳转指令只能有+/-32MB的相对寻址能力。加载PC寄存器。采用这种方式,PC寄存器将被强制指向中断处理程序地址。存储中断处理程序的地址与当前PC值为一个相对地址(4KB范围内)。3/13/202317北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)在复位时使用汇编语言装载中断处理程序3/13/202318北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)使用C语言程序安装中断处理程序地址B/BL指令编码格式3/13/202319北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)利用跳转指令利用跳转指令的二进制编译方式,使用C语言程序装载中断处理程序可以使用以下执行步骤如下:(1)获取中断异常处理函数地址;(2)在该地址值上减去相应中断向量表地址值,因为跳转指令是相对寻址;(3)减去0 x8以允许预取地址值,因为在执行异常向量表处的指令时,由于流水线的原因,PC的值实际指向中断向量地址+8处;(4)将结果值右移两位以实现字对齐,根据前面跳转指令的编码规则。(5)检测最高8位是否为0,以确保结果只有24位(因为跳转指令受24位寻址限制);(6)与0 xEA000000(无条件指令跳转指令的操作码,条件域为1110,指令为1010)进行逻辑或(OR)操作以获得保存在中断向量表中的值。3/13/202320北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)利用跳转指令安装中断的c代码3/13/202321北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)1 12 2ARM中断类型及中断向量中断类型及中断向量 安装安装ARM中断处理程序中断处理程序第6章ARM异常中断处理及程序设计3 3IRQ中断处理过程及处理中断处理过程及处理 3 3SWI中断处理原理及应用程序开发中断处理原理及应用程序开发3/13/202322北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)S3C2410处理器中断管理办法S3C2410处理器中断管理硬件结构图3/13/202323北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)S3C2410中断处理办法(1)是否屏蔽该中断。根据是否属于二级中断源,即设置寄存器INTMSK和INTSUBMSK寄存器对应位;(2)设置某类中断为普通中断还是快速中断,即设置中断类型寄存器INTMOD对应位;(3)如果是IRQ中断,设置该中断的优先级。即设置寄存器PRIORITY以决定其优先级。(4)更重要的是,针对该中断,CPU接收到该硬件请求后,执行怎么样的操作,即执行什么代码3/13/202324北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)ISR中断处理过程(1)中断发生,IRQ管脚向CPU产生中中断请求信号;(2)系统进行必要的数据保护后(将程序位置存储在LR寄存器,存储CPSR寄存器值在SPSR后,设置CPSR寄存器中断屏蔽位,切换到IRQ模式),PC指针跳转到IRQ的中断向量0 x0000,0018地址;(3)CPU根据内存0 x0000,0018位置的代码执行IRQ_Handler位置的代码,在IRQ_Handler中进行现场保护,将LR寄存器,SPSR寄存器,R0-R12通用寄存器的数据存入到IRQ栈中,然后执行ISR_IrqHandler()函数(在IRQ_Handler代码中有跳转指令,见上面说明)。(4)ISR_IrqHandler()函数完成中断源判断(具体是什么中断),执行中断处理函数(在安装中断时已经指定)。(5)中断返回。3/13/202325北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)中断处理代码3/13/202326北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)1 12 2ARM中断类型及中断向量中断类型及中断向量 安装安装ARM中断处理程序中断处理程序第6章ARM异常中断处理及程序设计3 3IRQ中断处理过程及处理中断处理过程及处理 3 3SWI中断处理原理及应用程序开发中断处理原理及应用程序开发3/13/202327北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)SWI中断处理基本概念SWI中断指令3/13/202328北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)示例代码3/13/202329北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)使用汇编程序实现SWI中断处理示例示例代码见教材。3/13/202330北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)使用C程序实现SWI中断处理示例示例代码见教材。3/13/202331北京大学出版社出版