Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42830
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-28 17:39
文章分类
文章存档

2015年(31)

我的朋友

分类: 嵌入式

2015-10-27 12:45:14

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



阅读(1729) | 评论(0) | 转发(0) |
0

上一篇:uboot命令添加

下一篇:automake

给主人留下些什么吧!~~