Bootstrap

三级嵌入式学习ing 考点15、16

 

考点15 ARM处理器的工作状态和工作模式

1.ARM处理器的工作状态及其切换

  1. 在ARM体系结构中,处理器可以工作在三种不同的状态:
  1.    ARM状态:是ARM处理器工作于32位指令的状态,即32位状态,所有指令均为32位宽度。
  2.    Thumb状态:是ARM执行16位指令的状态,即16位状态,在Thumb模式下,指令代码只有16位,使代码密度变大,占用内存变小。提供比32位程序代码更佳的效能。
  3.    调试状态:处理器停机调试时进入调试状态。

     2.值得注意的是,除Cortex-M系列处理器外,所有ARM处理器复位后开始执行代码总是只处于ARM状态。Cortex-M处理器,因为只有Thumb- 2指令集,所以只有Thumb状态和调试状态两种。

    3.ARM与Thumb间的切换:

  1. 由ARM状态切换到Thumb状态,通过BX指令将操作数寄存器的最低位设置为1即可将ARM状态切换到Thumb状态。如果R0[0]=1,则执行BX R0指令将进入Thumb状态。如果Thumb状态进行异常处理,异常处理要在ARM状态下进行。则当异常返回时,将自动切换到Thumb状态。
  2. 由Thumb状态切换到ARM状态,通过BX指令将操作数据寄存器的最低位设置为0,即可将Thumb状态切换到ARM状态。如果R0[0]=0,则执行BX R0指令将进入ARM状态,当处理器进行异常操处理时,则从异常向量地址开始执行,并自动进入ARM状态。

 2.ARM处理器的工作模式

         

  1.  ARM体系结构支持7种工作模式,取决于程序状态寄存器CPSR低5位【M4:M0】的值。
  2. ARM处理器的工作模式间可以相互转换,但是有条件的
  3. 当处理器工作于用户模式时,除非发生异常,否则将不能改变工作模式
  4. 当发生异常时,处理器自动改变CPSR【M4:M0】的值进入相应的工作状态。
  5. 例如当IRQ外部中断时,CPSR【M4:M0】的值置为10010,而自动进入外部中断模式IRQ;当处理器处于系统模式时,用指令向CPSR【M4:M0】写入特定的值,以进入相应的工作模式。

 

考点16  ARM的寄存器组织

   1.ARM状态下的寄存器组织

  1. ARM处理器共有37个寄存器,包括31个通用寄存器(含PC)和6个状态寄存器。工作于ARM状态下,在物理分配上,寄存器被安排成部分重叠的组,每种处理器工作模式使用不同的寄存器。
  2. ARM处理器工作在不同模式下使用的寄存器有所不同,但共同点是:
  1.     无论是何模式,R15均作为PC使用。PC是指存储下一条指令的地址的寄存器。
  2.     CPSR为当前程序状态寄存器
  3.     R7-R0是公用的通用寄存器。不同之处在于,高端的7个通用寄存器和状态寄存器在不同模式下不同。

2.不同模式下的计算器组织如下图所示:

 

3.通用寄存器:

  1. 通用计算器中不分组的计算器共8个,R7-R0。
  2. R8-R12共2组计10个寄存器,标有fiq的寄存器代表快速中断模式FIQ专用,与其他模式地址重叠,但寄存器内容并不冲突。
  3. R13-R14除了用户模式User和系统模式VSV分别为堆栈指针SP程序链接寄存器LR之外,其他模式下均有自己独特的标记方式,是专门用于特定模式的寄存器,共6组计12个。
  4. 加上作为PC的R15,这样计算器共31个。所有通用计算器均是32位结构。

4.状态寄存器:

  1. 状态寄存器共6个,除了共用的当前程序状态寄存器CPSR外,还有分组的备份程序状态寄存器SPSR (5组共5个)。
  2. 程序状态寄存器的格式如下图:条件码标志有4个:N、Z、C、V、Q,以及8个控制位为I、F、T、M4-M0。

 

 5.Thumb状态下的寄存器组织:

         Thumb状态下的寄存器是ARM状态下寄存器的子集,Thumb/Thumb-2状态下的寄存器,如下图所示:

       

;