IRQ发生时的处理过程:
1.被中断任务的CPSR保存到IRQ模式中的SPSR中
2.倍中断任务的PC值保存到IRQ模式中的LR寄存器中,实际上保存的是PC-4
3.模式切换到IRQ模式,并禁止I中断位
4.PC被赋予0x18的地址值,程序从0x18处开始执行
以上是又硬件自动完成
1.SWI和 UNDEF:
返回指令:MOV PC, LR
原因:SWI和未定义指令中断,返回下一条指令,不需当前指令
2.FIQ、 IRQ 和预取指终止:
返回指令:SUBS PC, LR, #4
在执行完当前指令后,查询FIQ,IRQ中断引脚,如果引脚有效,允许中断发生,将产生异常。此时,PC已经更新,要返回的地址是下一条指令地址,故用SUBS PC, LR, #4,
指令预取后,如果地址非法,则指令标记成有问题的指令,到指令执行时,发生预取指中止异常,PC值未更新,需要返回到发生异常的指令,故用SUBS PC, LR, #4,
3.数据异常
返回指令:SUBS PC, LR, #8
要返回到产生异常的指令处,并且,PC在产生异常时已经更新
总结:
1.LR保存的是PC-4,
2.返回到当前指令的有:数据异常,预取中止。其他的是返回到下一条指令
3.PC的值更新的有:FIQ,IRQ, 数据异常,即PC=当前地址+8;其他的PC=当前地址+4,
4.正常的流水线处理过程处理时,PC=当前地址+8
阅读(1743) | 评论(0) | 转发(0) |