ARM 指令流水线

一,ARM 3级指令流水线特点 
“指令”:给CPU核下发的执行动作的命令 —— 例如:add指令,就是让CPU核进行数据的加法运算+指令3级流水线的过程和涉及的如下三个硬件单元: 
取值:取值器将内存中的指令加载到CPU核中 
解码:解码器将加载的指令翻译成CPU核将来能够识别的真正的指令 
执行:CPU核最终执行下发的指令 

PC永远指向取值,也就是PC永远保存取值指令的地址。ARM指令集的位宽为32位(4字节) , THUMB指令集的位宽为16位(2字节) 

ARM 指令流水线_第1张图片

二,ARM 5级指令流水线特点 

ARM9以后,指令流水线一律采用5级流水线,3级流水线(F->D->E)中没有把M(访存)和 W(写会)合法化。比如:add,sub,orr,eor,and等没有M和W。 只有ldr才有 到5级流水线,任何指令都有M和W(终于合法了) ,但是类似add,sub等指令即使没有M(访问动作) +但是对应的周期必须要存在。

ARM 指令流水线_第2张图片

 三,ARM CPU核处理器的7种工作模式

工作模式

场景

SVC管理模式

复位或者CPU执行swi指令,CPU就会切换到SVC管理模式,此模式的权限最高!

FIQ快速中断模式

外设产生中断电信号,经过中断控制器,中断控制器再以FIQ发送给CPU,CPU切换到FIQ快速中断模式

IRQ中断模式

外设产生的中断电信号,经过中断控制器,中断控制器再以IRQ发送给CPU,CPU切换到IRQ中断模式

切记:外设产生的中断电信号不能直接给CPU,必须要经过中断控制器,中断控制器会对这个中断信号

+进行一番的判断最终觉得是否发送给CPU或者以什么样的方式(FIQ/IRQ)发送给CPU

Abort终止模式

CPU访问一个不存在内存地址或者访问的数据权限不够,CPU会切换到Abort终止模式

Undef未定义模式

CPU执行一个不认识的指令,例如CPU执行zhangsan指令,CPU不认识此指令,CPU切换到未定义指令模式

System系统模式 / User模式:

这两个模式一样,系统运行时,应用程序一般都是在User模式运行前者的权限稍微高于User,但是在7种工作模式中权限最低

 四,ARM的7种异常

异常

对应场景

对应CPU模式

复位异常

系统复位

SVC管理模式

未定义指令异常

指令CPU不识别

Undef未定义指令模式

软中断异常

CPU执行swi指令

SVC管理模式

预取指令异常

访问内存失败

Abort终止模式

数据处理异常

数据的访问权限不够 Abort终止模式

IRQ异常

外设给CPU发IRQ中断 IRQ模式

FIQ异常

外设给CPU发FIQ中断 FIQ模式

一旦发生异常,ARM核硬件上自动完成:    

1.保存CPSR到SPSR_mode(对应的工作模式下的spsr) 保存是为了将来能够返回继续执行    

2.设置CPSR的相应位          

设置BIT[5]=0, 切换到ARM状态。         

设置BIT[4:0]=mode, 切换到某个CPU的工作模式下。         

设置BIT[7:6]=11, 禁止IRQ和FIQ中断。  

3.保存返回地址到lr_mode为了将来能够返回到原来被打断的地方继续执行、 设置PC为相应异常的软件处理入口地址,也就是让CPU到某个地址去"运行",开启软件处理异常。软件处理异常,怎么处理,完全由开发者自己决定。

4.软件一旦处理异常完毕,一般要返回,返回需要软件实现:        

(1)将spsr_mode赋值给cpsr(2)将lr_mode(保存着跳转之前的地址)赋值给pc  等于让CPU继续到跳转之前的地址去运行 

五,ARM寄存器之CPSR(当前程序状态寄存器):位宽32位。

ARM 指令流水线_第3张图片              

BIT[4:0]: 又称MODE位,指示当前程序对应的CPU的工作模式                

BIT[5]:又称状态位(T),指示当前CPU的工作状态。=0:ARM状态。=1:Thumb状态。                

BIT[6]:又称F位。=0,使能FIQ中断。=1,禁止CPU核相应FIQ中断。               

BIT[7]:又称I位。=0,使能IRQ中断。=1,禁止CPU核相应IRQ中断 。                     

BIT[28]:又称V位。=0:程序执行无溢出 。=1:程序执行溢出。

BIT[29]:又称C位。=0:没有发生借位或者进位。=1:有发生过进位或者借位。

BIT[30]:又称Z位。=0:程序运算结果为非0。=1:程序运算结果为0。

BIT[31]:又称N位。=1:程序运算结果为负数或者小于 。=0:否则                             

N,Z,C,V:由统称条件标志位 。影响CPSR的条件标志位的情形:指令后面加S,指令的运算结果影响cpsr的NZCV位。              

例如:

add r0, r0, r1 //r0=-1, r1=1     //结果r0不影响cpsr的NVZV 。 

adds r0,r0,r1                         //会影响。                    

ARM寄存器之SPSR(保存当前程序状态寄存器) 位宽也是32位,用来保存CPSR,当CPU正在运行某个进程,此时CPU的工作模式为 +User模式,此时UART控制器给CPU发送一个IRQ中断,CPU相应IRQ中断,伴随着CPU由User模式切换到IRQ模式,但是在切 +换之前,应该保存当前进程的运行状态(否则将来再返回就没法继续运行),只需将cpsr保存在IRQ模式下的spsr下,将来中断处理完毕以 +后,再将IRQ模式下的spsr给cpsr,恢复到之前被打断的进程的状态 。

你可能感兴趣的:(移植_网络_单片机_控制,开发语言,嵌入式硬件)