微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM1176JZF-S/S3C6410处理器的异常处理过程

ARM1176JZF-S/S3C6410处理器的异常处理过程

时间:11-09 来源:互联网 点击:

一个周期内都不会空闲,所以平均来看,执行每条指令都只要一个周期的时间。

从二进制指令的角度来看,当前指令在执行的时候,下一条指令已经在被翻译,再下一条指令已经正在被读取。注意pc寄存器总是指向正在被读取的那条指令,而不是正在被执行的指令。如下图所示:

箭头方向是指令运行的方向,左侧是低地址,右侧是高地址,当A指令是正在运行的指令,pc寄存器现在正指向C指令的位置。

下面,分别以软中断异常和数据异常为例来解释一下上文中所讲的内容:

在软中断发生时,指令流水线的结构与上图完全一样。软中断是由正在执行的指令A触发的,它的任务已经完成,所以在中断处理结束之后,A指令不需要再被执行一次,应该直接执行B指令。而在进入中断处理程序之前,CPU已经自动将(pc-4)的值存入lr,这正是B指定的位置。所以在中断返回时,直接把lr的值赋给pc就行了。

在数据访问异常发生时,指令流水线的结构与上图不太一样,正在执行的指令仍然是A,pc已经更新,即指向了D指令。在中断处理结束时,数据的问题已经解决(可以访问),A指令还需要再重新执行一次,所以pc需要指向A指令处。而在进入中断处理程序之前,CPU已经自动将(pc-4)的值存入lr,这是C指令的位置,所以我们需要手动调整pc的位置,把它再减8,这才是A指令的位置。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top