ARM异常中断处理及程序设计课件_第1页
ARM异常中断处理及程序设计课件_第2页
ARM异常中断处理及程序设计课件_第3页
ARM异常中断处理及程序设计课件_第4页
ARM异常中断处理及程序设计课件_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式ARM系统原理与实例开发北京大学出版社出版12/9/20221北京大学出版社出版嵌入式ARM系统原理与实例开发北京大学出版社出版12/8/12ARM中断类型及中断向量安装ARM中断处理程序

第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发

12/9/20222北京大学出版社出版12ARM中断类型及中断向量安装ARM中断处理程序第6章异常的概念异常将导致处理器停止当前事务处理,转而处理一个突发事件(这个突发事件包括外部或者内部引起的)。例如一个外部中断或者试图执行一个未定义的指令。在处理异常之前,为了在异常处理完成后能够很好的返回到中断处理之前的状态,在编写程序的时候有必要将处理器当前的状态保护起来,另外,在同一时刻有可能出现多个异常中断请求。12/9/20223北京大学出版社出版异常的概念异常将导致处理器停止当前事务处理,转而处理一个突发ARM异常类型如果发生中断及异常,以下信息需要进行保护:(1)当前程序的状态,即CPU信息,存储在CPSR寄存器中;(2)当前程序的位置,以便于从异常及中断中返回,即当前PC寄存器信息;(3)临时数据信息,即当前R0~R12数据。ARM处理器在执行中断服务程序之前,都将这些信息进行了有效的保护:(1)

LR(R14)寄存器用来保存当前CPU寄存器的值,即程序的返回地址;(2)

SPSR寄存器用来保护当前程序的状态,即CPU信息;(3)临时数据使用栈来保存,当中断发生后,系统将开辟一段内存空间,将R0~R12的数据依次压入栈中,用R13来存储该栈空间的入口地址。经过以上机制,ARM处理器能够很好的支持中断和中断嵌套。12/9/20224北京大学出版社出版ARM异常类型如果发生中断及异常,以下信息需要进行保护:1ARM异常类型12/9/20225北京大学出版社出版ARM异常类型12/8/20225北京大学出版社出版ARM中断响应过程12/9/20226北京大学出版社出版ARM中断响应过程12/8/20226北京大学出版社出版Reset异常及处理当系统复位信号产生后,ARM处理器当立即中断当前正在执行的指令。进入复位处理时,处理器将进行以下操作: R14_svc=UNPREDICTABLEvalue //R14_svc不可知 SPSR_svc=UNPREDICTABLEvalue //SPSR_svc不可知 CPSR[4:0]=0b10011 //处理器进入svc模式 CPSR[5]=0 //执行ARM状态 CPSR[6]=1 //禁止FIQ CPSR[7]=1 //禁止IRQ ifhighvectorsconfiguredthen //指向复位向量地址 PC=0xFFFF0000 else PC=0x00000000当复位后,ARM处理器PC指针将立刻指向0x00000000或0xFFFF0000地址,禁止所有外部中断,运行于SVC模式。12/9/20227北京大学出版社出版Reset异常及处理当系统复位信号产生后,ARM处理器当立未定义指令异常及处理当试图执行一个ARM处理器及其协处理器都无法识别的指令时将产生一个未定义指令异常。在没有实际硬件支持时,未定义指令异常可以被用来进行一个协处理器的软件仿真,或者其它软件仿真功能。12/9/20228北京大学出版社出版未定义指令异常及处理当试图执行一个ARM处理器及其协处理器未定义指令异常处理步骤R14_und=addressofnextinstructionaftertheundefinedinstruction //R14_und为下一指令地址SPSR_und=CPSR //存储CPSR状态CPSR[4:0]=0b11011 //进入未定义模式CPSR[5]=0 //执行ARM执行 //CPSR[6]isunchanged,允许FIQCPSR[7]=1 //禁止IRQifhighvectorsconfiguredthen //指向未定义中断向量 PC=0xFFFF0004else PC=0x0000000412/9/20229北京大学出版社出版未定义指令异常处理步骤R14_und=addresso软中断异常及处理软中断异常是由SWI指令产生的,其将进入使CPU进入SVC模式,执行以下操作: R14_svc=addressofnextinstructionaftertheSWIinstruction //R14_svc指向SWI下一条要执行指令 SPSR_svc=CPSR //备份CPSR CPSR[4:0]=0b10011 //进入SVC模式 CPSR[5]=0 //执行ARM状态指令 /*CPSR[6]isunchanged*/ CPSR[7]=1 //禁止IRQ ifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF0008 else PC=0x0000000812/9/202210北京大学出版社出版软中断异常及处理软中断异常是由SWI指令产生的,其将进入使预取指异常及处理存储异常是由存储系统产生的,当试图读取一个不可用指令时,将产生一个存储器异常信号来标识所取指指令不可用。当试图执行该指令时将产生一个预取异常,如果该指令并没有被执行(例如在管理操作时执行分支指令)则不会产生一个预取异常。在ARMv5及以上版本,执行BKPT指令也会产生一个预取异常。12/9/202211北京大学出版社出版预取指异常及处理存储异常是由存储系统产生的,当试图读取一个预取指异常及处理预取指异常处理指令如下: R14_abt=addressoftheabortedinstruction+4 //R14_abt存储abt指令+4位置 SPSR_abt=CPSR //保存CPSR CPSR[4:0]=0b10111 //进入SVC模式 CPSR[5]=0 //执行ARM状态指令 /*CPSR[6]isunchanged*/ CPSR[7]=1 //禁止IRQ ifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF000C else PC=0x0000000C12/9/202212北京大学出版社出版预取指异常及处理预取指异常处理指令如下:12/8/20221IRQ异常及处理当外部普通中断异常请求管脚发送中断信号时,将产生一个普通IRQ,因其优先级低于FIQ,因此,当产生一个FIQ时将屏蔽掉IRQ请求。另外,当置位了CPSR的I位后(只有在特殊模式下才能修改I位),IRQ将被屏蔽。IRQ中断请求响应后将指令以下操作:R14_irq=addressofnextinstructiontobeexecuted+4 //R14_irq存储当前指令+4位置SPSR_irq=CPSR //保存CPSRCPSR[4:0]=0b10010 //进入IRQ模式CPSR[5]=0 //执行ARM状态指令/*CPSR[6]isunchanged*/CPSR[7]=1 //禁止IRQifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF0018else PC=0x0000001812/9/202213北京大学出版社出版IRQ异常及处理当外部普通中断异常请求管脚发送中断信号时,FIQ异常及处理当外部快速中断异常请求管脚发送中断信号时,将产生一个FIQ,FIQ被设置来实现高速数据传输和通道处理,其有充足的私有寄存从而减少上下文切换时保存寄存器数据的时间。当CPSR的F位被置位时将禁止FIQ请求(只有在特殊模式下才能修改F位)。12/9/202214北京大学出版社出版FIQ异常及处理当外部快速中断异常请求管脚发送中断信号时,FIQ中断处理当FIQ中断处理之前将进行以下操作:R14_fiq=addressofnextinstructiontobeexecuted+4 //R14_irq存储当前指令+4位置SPSR_fiq=CPSR //保存CPSRCPSR[4:0]=0b10001 //进入FIQ模式CPSR[5]=0 //执行ARM状态指令CPSR[6]=1 //禁止FIQCPSR[7]=1 //禁止IRQifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF001Celse PC=0x0000001C12/9/202215北京大学出版社出版FIQ中断处理当FIQ中断处理之前将进行以下操作:12/8/12ARM中断类型及中断向量安装ARM中断处理程序

第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发

12/9/202216北京大学出版社出版12ARM中断类型及中断向量安装ARM中断处理程序第6章两种方式来装载中断处理程序使用跳转指令。这是最简单的跳转到中断异常处理程序(每一个中断向量入口表中包括一个跳转指令到相应的中断服务程序),但这种方式会受到跳转指令的限制,即ARM跳转指令只能有+/-32MB的相对寻址能力。加载PC寄存器。采用这种方式,PC寄存器将被强制指向中断处理程序地址。存储中断处理程序的地址与当前PC值为一个相对地址(4

KB范围内)。12/9/202217北京大学出版社出版两种方式来装载中断处理程序使用跳转指令。这是最简单的跳转到在复位时使用汇编语言装载中断处理程序12/9/202218北京大学出版社出版在复位时使用汇编语言装载中断处理程序12/8/202218使用C语言程序安装中断处理程序地址

B/BL指令编码格式12/9/202219北京大学出版社出版使用C语言程序安装中断处理程序地址B/BL指令编码格式利用跳转指令利用跳转指令的二进制编译方式,使用C语言程序装载中断处理程序可以使用以下执行步骤如下:(1)获取中断异常处理函数地址;(2)在该地址值上减去相应中断向量表地址值,因为跳转指令是相对寻址;(3)减去0x8以允许预取地址值,因为在执行异常向量表处的指令时,由于流水线的原因,PC的值实际指向中断向量地址+8处;(4)将结果值右移两位以实现字对齐,根据前面跳转指令的编码规则。(5)检测最高8位是否为0,以确保结果只有24位(因为跳转指令受24位寻址限制);(6)与0xEA000000(无条件指令跳转指令的操作码,条件域为1110,指令为1010)进行逻辑或(OR)操作以获得保存在中断向量表中的值。12/9/202220北京大学出版社出版利用跳转指令利用跳转指令的二进制编译方式,使用C语言程序装载利用跳转指令安装中断的c代码12/9/202221北京大学出版社出版利用跳转指令安装中断的c代码12/8/202221北京大学出12ARM中断类型及中断向量安装ARM中断处理程序

第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发

12/9/202222北京大学出版社出版12ARM中断类型及中断向量安装ARM中断处理程序第6章S3C2410处理器中断管理办法S3C2410处理器中断管理硬件结构图12/9/202223北京大学出版社出版S3C2410处理器中断管理办法S3C2410处理器中断管理S3C2410中断处理办法(1)是否屏蔽该中断。根据是否属于二级中断源,即设置寄存器INTMSK和INTSUBMSK寄存器对应位;(2)设置某类中断为普通中断还是快速中断,即设置中断类型寄存器INTMOD对应位;(3)如果是IRQ中断,设置该中断的优先级。即设置寄存器PRIORITY以决定其优先级。(4)更重要的是,针对该中断,CPU接收到该硬件请求后,执行怎么样的操作,即执行什么代码12/9/202224北京大学出版社出版S3C2410中断处理办法(1)是否屏蔽该中断。根据是否属ISR中断处理过程(1)中断发生,IRQ管脚向CPU产生中中断请求信号;(2)系统进行必要的数据保护后(将程序位置存储在LR寄存器,存储CPSR寄存器值在SPSR后,设置CPSR寄存器中断屏蔽位,切换到IRQ模式),PC指针跳转到IRQ的中断向量0x0000,0018地址;(3)CPU根据内存0x0000,0018位置的代码执行IRQ_Handler位置的代码,在IRQ_Handler中进行现场保护,将LR寄存器,SPSR寄存器,R0-R12通用寄存器的数据存入到IRQ栈中,然后执行ISR_IrqHandler()函数(在IRQ_Handler代码中有跳转指令,见上面说明)。(4)ISR_IrqHandler()函数完成中断源判断(具体是什么中断),执行中断处理函数(在安装中断时已经指定)。(5)中断返回。12/9/202225北京大学出版社出版ISR中断处理过程(1)中断发生,IRQ管脚向CPU产生中中断处理代码12/9/202226北京大学出版社出版中断处理代码12/8/202226北京大学出版社出版12ARM中断类型及中断向量安装ARM中断处理程序

第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发

12/9/202227北京大学出版社出版12ARM中断类型及中断向量安装ARM中断处理程序第6章SWI中断处理基本概念SWI中断指令12/9/202228北京大学出版社出版SWI中断处理基本概念SWI中断指令12/8/20222示例代码12/9/202229北京大学出版社出版示例代码12/8/202229北京大学出版社出版使用汇编程序实现SWI中断处理示例示例代码见教材。12/9/202230北京大学出版社出版使用汇编程序实现SWI中断处理示例示例代码见教材。12/8使用C程序实现SWI中断处理示例示例代码见教材。12/9/202231北京大学出版社出版使用C程序实现SWI中断处理示例示例代码见教材。12/8/嵌入式ARM系统原理与实例开发北京大学出版社出版12/9/202232北京大学出版社出版嵌入式ARM系统原理与实例开发北京大学出版社出版12/8/12ARM中断类型及中断向量安装ARM中断处理程序

第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发

12/9/202233北京大学出版社出版12ARM中断类型及中断向量安装ARM中断处理程序第6章异常的概念异常将导致处理器停止当前事务处理,转而处理一个突发事件(这个突发事件包括外部或者内部引起的)。例如一个外部中断或者试图执行一个未定义的指令。在处理异常之前,为了在异常处理完成后能够很好的返回到中断处理之前的状态,在编写程序的时候有必要将处理器当前的状态保护起来,另外,在同一时刻有可能出现多个异常中断请求。12/9/202234北京大学出版社出版异常的概念异常将导致处理器停止当前事务处理,转而处理一个突发ARM异常类型如果发生中断及异常,以下信息需要进行保护:(1)当前程序的状态,即CPU信息,存储在CPSR寄存器中;(2)当前程序的位置,以便于从异常及中断中返回,即当前PC寄存器信息;(3)临时数据信息,即当前R0~R12数据。ARM处理器在执行中断服务程序之前,都将这些信息进行了有效的保护:(1)

LR(R14)寄存器用来保存当前CPU寄存器的值,即程序的返回地址;(2)

SPSR寄存器用来保护当前程序的状态,即CPU信息;(3)临时数据使用栈来保存,当中断发生后,系统将开辟一段内存空间,将R0~R12的数据依次压入栈中,用R13来存储该栈空间的入口地址。经过以上机制,ARM处理器能够很好的支持中断和中断嵌套。12/9/202235北京大学出版社出版ARM异常类型如果发生中断及异常,以下信息需要进行保护:1ARM异常类型12/9/202236北京大学出版社出版ARM异常类型12/8/20225北京大学出版社出版ARM中断响应过程12/9/202237北京大学出版社出版ARM中断响应过程12/8/20226北京大学出版社出版Reset异常及处理当系统复位信号产生后,ARM处理器当立即中断当前正在执行的指令。进入复位处理时,处理器将进行以下操作: R14_svc=UNPREDICTABLEvalue //R14_svc不可知 SPSR_svc=UNPREDICTABLEvalue //SPSR_svc不可知 CPSR[4:0]=0b10011 //处理器进入svc模式 CPSR[5]=0 //执行ARM状态 CPSR[6]=1 //禁止FIQ CPSR[7]=1 //禁止IRQ ifhighvectorsconfiguredthen //指向复位向量地址 PC=0xFFFF0000 else PC=0x00000000当复位后,ARM处理器PC指针将立刻指向0x00000000或0xFFFF0000地址,禁止所有外部中断,运行于SVC模式。12/9/202238北京大学出版社出版Reset异常及处理当系统复位信号产生后,ARM处理器当立未定义指令异常及处理当试图执行一个ARM处理器及其协处理器都无法识别的指令时将产生一个未定义指令异常。在没有实际硬件支持时,未定义指令异常可以被用来进行一个协处理器的软件仿真,或者其它软件仿真功能。12/9/202239北京大学出版社出版未定义指令异常及处理当试图执行一个ARM处理器及其协处理器未定义指令异常处理步骤R14_und=addressofnextinstructionaftertheundefinedinstruction //R14_und为下一指令地址SPSR_und=CPSR //存储CPSR状态CPSR[4:0]=0b11011 //进入未定义模式CPSR[5]=0 //执行ARM执行 //CPSR[6]isunchanged,允许FIQCPSR[7]=1 //禁止IRQifhighvectorsconfiguredthen //指向未定义中断向量 PC=0xFFFF0004else PC=0x0000000412/9/202240北京大学出版社出版未定义指令异常处理步骤R14_und=addresso软中断异常及处理软中断异常是由SWI指令产生的,其将进入使CPU进入SVC模式,执行以下操作: R14_svc=addressofnextinstructionaftertheSWIinstruction //R14_svc指向SWI下一条要执行指令 SPSR_svc=CPSR //备份CPSR CPSR[4:0]=0b10011 //进入SVC模式 CPSR[5]=0 //执行ARM状态指令 /*CPSR[6]isunchanged*/ CPSR[7]=1 //禁止IRQ ifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF0008 else PC=0x0000000812/9/202241北京大学出版社出版软中断异常及处理软中断异常是由SWI指令产生的,其将进入使预取指异常及处理存储异常是由存储系统产生的,当试图读取一个不可用指令时,将产生一个存储器异常信号来标识所取指指令不可用。当试图执行该指令时将产生一个预取异常,如果该指令并没有被执行(例如在管理操作时执行分支指令)则不会产生一个预取异常。在ARMv5及以上版本,执行BKPT指令也会产生一个预取异常。12/9/202242北京大学出版社出版预取指异常及处理存储异常是由存储系统产生的,当试图读取一个预取指异常及处理预取指异常处理指令如下: R14_abt=addressoftheabortedinstruction+4 //R14_abt存储abt指令+4位置 SPSR_abt=CPSR //保存CPSR CPSR[4:0]=0b10111 //进入SVC模式 CPSR[5]=0 //执行ARM状态指令 /*CPSR[6]isunchanged*/ CPSR[7]=1 //禁止IRQ ifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF000C else PC=0x0000000C12/9/202243北京大学出版社出版预取指异常及处理预取指异常处理指令如下:12/8/20221IRQ异常及处理当外部普通中断异常请求管脚发送中断信号时,将产生一个普通IRQ,因其优先级低于FIQ,因此,当产生一个FIQ时将屏蔽掉IRQ请求。另外,当置位了CPSR的I位后(只有在特殊模式下才能修改I位),IRQ将被屏蔽。IRQ中断请求响应后将指令以下操作:R14_irq=addressofnextinstructiontobeexecuted+4 //R14_irq存储当前指令+4位置SPSR_irq=CPSR //保存CPSRCPSR[4:0]=0b10010 //进入IRQ模式CPSR[5]=0 //执行ARM状态指令/*CPSR[6]isunchanged*/CPSR[7]=1 //禁止IRQifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF0018else PC=0x0000001812/9/202244北京大学出版社出版IRQ异常及处理当外部普通中断异常请求管脚发送中断信号时,FIQ异常及处理当外部快速中断异常请求管脚发送中断信号时,将产生一个FIQ,FIQ被设置来实现高速数据传输和通道处理,其有充足的私有寄存从而减少上下文切换时保存寄存器数据的时间。当CPSR的F位被置位时将禁止FIQ请求(只有在特殊模式下才能修改F位)。12/9/202245北京大学出版社出版FIQ异常及处理当外部快速中断异常请求管脚发送中断信号时,FIQ中断处理当FIQ中断处理之前将进行以下操作:R14_fiq=addressofnextinstructiontobeexecuted+4 //R14_irq存储当前指令+4位置SPSR_fiq=CPSR //保存CPSRCPSR[4:0]=0b10001 //进入FIQ模式CPSR[5]=0 //执行ARM状态指令CPSR[6]=1 //禁止FIQCPSR[7]=1 //禁止IRQifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF001Celse PC=0x0000001C12/9/202246北京大学出版社出版FIQ中断处理当FIQ中断处理之前将进行以下操作:12/8/12ARM中断类型及中断向量安装ARM中断处理程序

第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发

12/9/202247北京大学出版社出版12ARM中断类型及中断向量安装ARM中断处理程序第6章两种方式来装载中断处理程序使用跳转指令。这是最简单的跳转到中断异常处理程序(每一个中断向量入口表中包括一个跳转指令到相应的中断服务程序),但这种方式会受到跳转指令的限制,即ARM跳转指令只能有+/-32MB的相对寻址能力。加载PC寄存器。采用这种方式,PC寄存器将被强制指向中断处理程序地址。存储中断处理程序的地址与当前PC值为一个相对地址(4

KB范围内)。12/9/202248北京大学出版社出版两种方式来装载中断处理程序使用跳转指令。这是最简单的跳转到在复位时使用汇编语言装载中断处理程序12/9/202249北京大学出版社出版在复位时使用汇编语言装载中断处理程序12/8/202218使用C语言程序安装中断处理程序地址

B/BL指令编码格式12/9/202250北京大学出版社出版使用C语言程序安装中断处理程序地址B/BL指令编码格式利用跳转指令利用跳转指令的二进制编译方式,使用C语言程序装载中断处理程序可以使用以下执行步骤如下:(1)获取中断异常处理函数地址;(2)在该地址值上减去相应中断向量表地址值,因为跳转指令是相对寻址;(3)减去0x8以允许预取地址值,因为在执行异常向量表处的指令时,由于流水线的原因,PC的值实际指向中断向量地址+8处;(4)将结果值右移两位以实现字对齐,根据前面跳转指令的编码规则。(5)检测最高8位是否为0,以确保结果只有24位(因为跳转指令受24位寻址限制);(6)与0xEA000000(无条件指令跳转指令的操作码,条件域为1110,指令为1010)进行逻辑或(OR)操作以获得保存在中断向量表中的值。12/9/202251北京大学出版社出版利用跳转指令利用跳转指令的二进制编译方式,使用C语言程序装载利用跳转指令安装中断的c代码12/9/202252北京大学出版社出版利用跳转指令安装中断的c代码12/8/202221北京大学出12ARM中断类型及中断向量安装ARM中断处理程序

第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发

12/9/202253北京大学出版社出版12ARM

温馨提示

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

评论

0/150

提交评论