ARM微处理器对异常中断的响应过程如下: ●当异常中断发生时,程序将当前执行指令的下一条指令的地址存入新的异常模式的链接寄存器LR中(R14_<mode>),以便程序在异常处理完后,能正确返回原程序。 ●保存当前的CPSR值,即将CPSR复制到新的异常模式的SPSR中。 ●根据异常类型,重新设置CPSR的运行模式位CPSR[4:0],使微处理器进入相应的工作模式。 ●强制给PC赋值,即将表2.4中相应的向量地址赋给PC,从而跳转到相应的异常处理程序处执行程序。 ●设置CPSR中的中断禁止位,以禁止中断发生。 上述过程用伪码可以描述为: R14_<Exception_Mode> = Return Link SPSR_<Exception_Mode> = CPSR CPSR[4:0] = Exception Mode Number CPSR[5] = 0 If <Exception_Mode> == Reset or FIQ then CPSR[6] = 1 ;当响应FIQ或复位异常时,禁止新的FIQ中断 CPSR[7] = 1 ;禁止IRQ中断 PC = Exception Vector Address 图2.6是一个从用户模式到 FIQ模式的例子。 如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回: ●由链接寄存器LR的值恢复PC,返回到发生异常中断的指令的下一条指令处执行程序。 ●将SPSR复制回CPSR中。 ●若在进入异常处理时设置了中断禁止位,要在此清除。 复位系统后,开始整个异常应用程序的执行,因此,复位异常处理程序不需要返回。 |
文章评论(0条评论)
登录后参与讨论