您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 06ARM异常中断处理及程序设计
嵌入式ARM系统原理与实例开发(第2版)嵌入式ARM系统原理与实例开发北京大学出版社出版嵌入式ARM系统原理与实例开发(第2版)12ARM中断类型及中断向量安装ARM中断处理程序第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版3异常的概念•异常将导致处理器停止当前事务处理,转而处理一个突发事件(这个突发事件包括外部或者内部引起的)。•例如一个外部中断或者试图执行一个未定义的指令。•在处理异常之前,为了在异常处理完成后能够很好的返回到中断处理之前的状态,在编写程序的时候有必要将处理器当前的状态保护起来,另外,在同一时刻有可能出现多个异常中断请求。嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版4ARM异常类型•如果发生中断及异常,以下信息需要进行保护:–(1)当前程序的状态,即CPU信息,存储在CPSR寄存器中;–(2)当前程序的位置,以便于从异常及中断中返回,即当前PC寄存器信息;–(3)临时数据信息,即当前R0~R12数据。•ARM处理器在执行中断服务程序之前,都将这些信息进行了有效的保护:–(1)LR(R14)寄存器用来保存当前CPU寄存器的值,即程序的返回地址;–(2)SPSR寄存器用来保护当前程序的状态,即CPU信息;–(3)临时数据使用栈来保存,当中断发生后,系统将开辟一段内存空间,将R0~R12的数据依次压入栈中,用R13来存储该栈空间的入口地址。•经过以上机制,ARM处理器能够很好的支持中断和中断嵌套。嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版5ARM异常类型嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版6ARM中断响应过程中断产生(1)CPU中止正在执行事件(2)自动将PC备份到LR(3)自动将CPSR寄存器SPSR(1)自动修改CPU模式(2)自动跳转到中断向量取指执行ISR,在ISR中:(1)进行必要的现场保护,入栈(2)处事中断事件现场恢复(1)LR,SPSR,R0~R12出栈(2)PC跳转到原中断位置下条指令执行由硬件或软件产生CPU自动完成ISR必须事先由程序员编写,且第1条指令必须可以通过中断向量跳转到在ISR执行结束后执行,由程序员编写嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版7Reset异常及处理•当系统复位信号产生后,ARM处理器当立即中断当前正在执行的指令。进入复位处理时,处理器将进行以下操作:R14_svc=UNPREDICTABLEvalue//R14_svc不可知SPSR_svc=UNPREDICTABLEvalue//SPSR_svc不可知CPSR[4:0]=0b10011//处理器进入svc模式CPSR[5]=0//执行ARM状态CPSR[6]=1//禁止FIQCPSR[7]=1//禁止IRQifhighvectorsconfiguredthen//指向复位向量地址PC=0xFFFF0000elsePC=0x00000000•当复位后,ARM处理器PC指针将立刻指向0x00000000或0xFFFF0000地址,禁止所有外部中断,运行于SVC模式。嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版8未定义指令异常及处理•当试图执行一个ARM处理器及其协处理器都无法识别的指令时将产生一个未定义指令异常。在没有实际硬件支持时,未定义指令异常可以被用来进行一个协处理器的软件仿真,或者其它软件仿真功能。嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版9未定义指令异常处理步骤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=0xFFFF0004elsePC=0x00000004嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版10软中断异常及处理•软中断异常是由SWI指令产生的,其将进入使CPU进入SVC模式,执行以下操作:R14_svc=addressofnextinstructionaftertheSWIinstruction//R14_svc指向SWI下一条要执行指令SPSR_svc=CPSR//备份CPSRCPSR[4:0]=0b10011//进入SVC模式CPSR[5]=0//执行ARM状态指令/*CPSR[6]isunchanged*/CPSR[7]=1//禁止IRQifhighvectorsconfiguredthen//进入异常处理PC=0xFFFF0008elsePC=0x00000008嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版11预取指异常及处理•存储异常是由存储系统产生的,当试图读取一个不可用指令时,将产生一个存储器异常信号来标识所取指指令不可用。当试图执行该指令时将产生一个预取异常,如果该指令并没有被执行(例如在管理操作时执行分支指令)则不会产生一个预取异常。•在ARMv5及以上版本,执行BKPT指令也会产生一个预取异常。嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版12预取指异常及处理•预取指异常处理指令如下:R14_abt=addressoftheabortedinstruction+4//R14_abt存储abt指令+4位置SPSR_abt=CPSR//保存CPSRCPSR[4:0]=0b10111//进入SVC模式CPSR[5]=0//执行ARM状态指令/*CPSR[6]isunchanged*/CPSR[7]=1//禁止IRQifhighvectorsconfiguredthen//进入异常处理PC=0xFFFF000CelsePC=0x0000000C嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版13IRQ异常及处理•当外部普通中断异常请求管脚发送中断信号时,将产生一个普通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=0xFFFF0018elsePC=0x00000018嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版14FIQ异常及处理•当外部快速中断异常请求管脚发送中断信号时,将产生一个FIQ,FIQ被设置来实现高速数据传输和通道处理,其有充足的私有寄存从而减少上下文切换时保存寄存器数据的时间。当CPSR的F位被置位时将禁止FIQ请求(只有在特殊模式下才能修改F位)。嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版15FIQ中断处理当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=0xFFFF001CelsePC=0x0000001C嵌入式ARM系统原理与实例开发(第2版)12ARM中断类型及中断向量安装ARM中断处理程序第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版17两种方式来装载中断处理程序•使用跳转指令。这是最简单的跳转到中断异常处理程序(每一个中断向量入口表中包括一个跳转指令到相应的中断服务程序),但这种方式会受到跳转指令的限制,即ARM跳转指令只能有+/-32MB的相对寻址能力。•加载PC寄存器。采用这种方式,PC寄存器将被强制指向中断处理程序地址。存储中断处理程序的地址与当前PC值为一个相对地址(4KB范围内)。嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版18在复位时使用汇编语言装载中断处理程序嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版19使用C语言程序安装中断处理程序地址B/BL指令编码格式嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版20利用跳转指令•利用跳转指令的二进制编译方式,使用C语言程序装载中断处理程序可以使用以下执行步骤如下:–(1)获取中断异常处理函数地址;–(2)在该地址值上减去相应中断向量表地址值,因为跳转指令是相对寻址;–(3)减去0x8以允许预取地址值,因为在执行异常向量表处的指令时,由于流水线的原因,PC的值实际指向中断向量地址+8处;–(4)将结果值右移两位以实现字对齐,根据前面跳转指令的编码规则。–(5)检测最高8位是否为0,以确保结果只有24位(因为跳转指令受24位寻址限制);–(6)与0xEA000000(无条件指令跳转指令的操作码,条件域为1110,指令为1010)进行逻辑或(OR)操作以获得保存在中断向量表中的值。嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版21利用跳转指令安装中断的c代码嵌入式ARM系统原理与实例开发(第2版)12ARM中断类型及中断向量安装ARM中断处理程序第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版23S3C2410处理器中断管理办法S3C2410处理器中断管理硬件结构图嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版24S3C2410中断处理办法•(1)是否屏蔽该中断。根据是否属于二级中断源,即设置寄存器INTMSK和INTSUBMSK寄存器对应位;•(2)设置某类中断为普通中断还是快速中断,即设置中断类型寄存器INTMOD对应位;•(3)如果是IRQ中断,设置该中断的优先级。即设置寄存器PRIORITY以决定其优先级。•(4)更重要的是,针对该中断,CPU接收到该硬件请求后,执行怎么样的操作,即执行什么代码嵌入式ARM系统原理与实例开发(第2版)2019/7/31北京大学出版社出版25ISR中断处理过程•(1)中断发生,IRQ管脚向CPU产生中中断请求信号;•(2)系统进行必要的数据保护后(将程序位置存储在LR寄存器,存储CPSR寄存器值在SPSR后,设置CPSR寄存器中断屏蔽位,切换到IRQ模式),PC指针跳转到IRQ的中断向量0x0000,0018地址;•(3)CPU根据内存0x0000,0018位置的代码执行IRQ_Handler位置的代码,在IRQ_Han
本文标题:06ARM异常中断处理及程序设计
链接地址:https://www.777doc.com/doc-23312 .html