系统移植—1.1 Cortex-A7架构

一、Cortex-A7 MPCore

  Cortex-A7基于ARMv7-A架构,于2011年发布,它支持1-4核,通常和Cortex-A15搭配使用。在28nm工艺下,Cortex-A7运行在1.2-1.6GHz,功耗小于100mW。
  多核配置如下图所示:
系统移植—1.1 Cortex-A7架构_第1张图片

二、运行模型

  Cortex-A7共有9种处理模式:User、FIQ、IRQ、Supervisor(SVC)、Abort、Undef、System、Monitor、Hyp。前7种是之前处理器就有的,后两种是新加的。
  如下图所示
系统移植—1.1 Cortex-A7架构_第2张图片
  除了User模式以外,其他的模式都是特权模式。大多数的程序都运行在用户模式,并且系统资源有访问限制,要想访问这些资源,只能产生异常,在异常的处理过程中切换为特权模式。

三、Cortex-A寄存器组

  ARM架构提供了16个32位的通用寄存器(R0-R15),前15个R0-R14可以用作通用的数据寄存器,R15是程序计数器PC,用来保存将要执行的指令。此外,还有一个当前程序状态寄存器CPSR和一个备份程序状态寄存器SPSR。
  如下图所示,
系统移植—1.1 Cortex-A7架构_第3张图片
  而9种运行模式都有一组与之对应的寄存器组,有些寄存器是公用的,有些寄存器是模式所独有的。
如下图所示:
系统移植—1.1 Cortex-A7架构_第4张图片
  灰色部分是所有模式所共用的,而蓝色部分是各个模式所独有的。例如,FIQ模式下要访问R13,实际访问的是R13_fiq,在SVC模式下访问R13,则实际访问的是R13_svc。
所以总结来看,Cortex-A共有34个32bit的通用寄存器,8个状态寄存器。
1、通用寄存器
  R0-R15通用寄存器可以分为3类:未备份寄存器,即R0-R7;备份寄存器,即R8-R14;程序计数器PC,即R15。
  R0-R7,所有模式共享,所以在不同的模式下,这8个寄存器中的数据会被破坏。
  R8-R12除了FIQ模式之外,都是通用的,因为FIQ为快速中断模式,故拥有单独的R8-R12。
  R13,也称为SP,栈指针,基本上每个模式都是独立的。应用程序会初始化R13,使其指向该模式专用的栈地址,即初始化SP指针。
  R14,也称为LR,连接寄存器,基本上每个模式都是独立的,它主要有两个作用:用来存放当前子程序的返回地址;作为异常模式将要返回的地址。
  R15,也称为PC,程序计数器,所有模式共享。它保存着当前执行的指令地址加8个字节。这是因为ARM为3级流水线:取指->译码->执行,这三级流水线循环执行,例如当前正在执行第一条指令,同时也在对第二条指令进行译码,同时第三条指令也被取出存放在R15中。因为32位的AMR处理器,每条指令是4个字节。故PC=当前执行指令+4*2。
2、状态寄存器
  CPSR,状态寄存器,所有模式共享。但是这必然会导致冲突,所以除了User外,其他模式都配备了一个专用的备份程序状态寄存器SPSR,主要用来作为异常退出后,使用SPSR中的值来回复CPSR。
在这里插入图片描述
  N:当两个补码表示的有符号整数运算的时候,N=1表示运算对的结果为负数,N=0表示结果为正数。
  Z:Z=1表示运算结果为0,Z=0表示运算结果不为0。
  J:它和T一起表示当前所有的指令集。如下表所示

J T 指令集
0 0 ARM
0 1 Thumb
1 1 ThumbEE
1 0 Jazelle

  M[4:0]:处理器模式控制。

你可能感兴趣的:(GNULinux)