ARM微处理器特点及功能结构
- ARM微处理器属于RISC处理器
- ARM7系列采用冯诺依曼体系结构, ARM9~11采用哈佛体系结构
- 有ARM和thumb两种工作状态
- 指令集采用固定长度指令格式
- 方位内存使用LOAD/STIRE模式
cortex-M4特点:
(10) 支持单指令多数据操作
(11) 支持饱和运算指令
(12)支持可选择的浮点指令
cortex_M3, cortex_M4都是3级指令流水线, 执行一条指令分为3阶段:
在执行一条指令的同时对下一条指令进行译码, 并将下一条指令取出
经典ARM微处理器编程模型
- ARM工作状态: ARM有两种工作状态: 32位的ARM和16位的thumb. ARM处理器可以在两种工作状态切换, 但开始执行代码时应处于ARM状态.thumb指令集时ARM的指令集的子集.
- ARM处理器的工作模式
处理器模式可以通过软件改变, 也可以通过外部中断或处理器异常来改变.
ARM支持的数据类型和储存格式
- 数据类型: ARM支持字节(8位), 半字(16位), 字(32位)的数据类型. 对储存器按字进行读写时, 要求数据地址的低两位是00, 通常称之为4字节对齐, 或字对齐. 在进行半字(16位)数据读写时, 要求数据地址的最低为位0, 称之为2字节对齐, 或半字对齐.在进行字节数据传送时, 对数据地址没有要求.
- 所有数据操作都是以字为单位的, 而对储存器进行数据读写操作时, 可以按字节也可以按半字或字来进行.
- 储存格式: ARM最大寻址空间为4GB, 储存器被看作一个从0开始的线性递增的字节组合.
- 大端格式: 子数据的高字节储存在低地址中,小端格式与其相反. 一般可通过外部引脚或内部寄存器来选择两种格式
ARM微处理器的寄存器
- ARM寄存器分为两类: 通用寄存器和状态寄存器.通用寄存器用于保存数据和地址, 状态寄存器用于标识CPU的工作状态及程序运行状态. 每种工作状态对应一组可访问寄存器, 但这些寄存器是不能被同时访问的. ARM微处理器有31个通用寄存器和6个状态寄存器
- ARM的I/O组织: CPU通过I/O接口与外部进行通信, 对I/O端口物理地址的编制方式有两种: 独立编址(I/O映射方式)和统一编制(内存映射方式).
- 独立编址方式:I/O 口地址与内存单元地址分开独立编址,I/O 端口地址不占用内存空间的地址范围。这时需要有专门的输入/输出(I/O)指令和控制逻辑。
- 统一编址方式:I/O 端口与内存单元同样对待,每个端口占用一个存储单元地址,将内存的一部分划出来用作 I/O 地址空间。这种情况,I/O 端口占用了内存地址空间,使内存容量减小。
- ARM系统完成I/O功能的标准方法是使用储存器映射的方式, 使用特定的储存器地址作为I/O地址
Cortex-M4
- cortex-M4具有两种工作状态:调试状态和thumb状态. 调试状态用于调试操作,此状态下调试器可访问或修改寄存器的数值. 当处理器执行程序代码时, 就处于thumb状态.
- cortex-M4有两种工作模式: 线程模式和处理模式. 在复位或异常返回时进入线程模式, 线程模式时既可以使用特权级,也可以使用非特权级代码, 软件可以更改将处理器从特权模式切换到非特权模式. 执行中断服务程序等异常处理时进入处理模式. 处理模式下处理器具有特权访问等级.
- cortex-M4有16个32位寄存器组成的通用寄存器和几个特殊功能的功能寄存器.
- R13位堆栈指针寄存器, 他有两个物理寄存器, 对应主堆栈指针(MSP)和进程堆栈指针(PSP), MSP位默认栈指针, 复位后或处理器处于处理模式时使用, PSP只用于线程模式. 栈指针的选择有特殊寄存器control决定.一般在操作系统中,MSP 用于内核以及系统异常中断的代码的堆栈指针,PSP 用于用户任务的应用堆栈指针。
- R14为链接寄存器(LR),子程序或函数被调用时, LR用来保存返回的地址. LR也用于异常返回, 保存返回后的状态.
- R15为程序计数器, 指向正在取指的指令, 可读写. 读操作返回当前指令地址减8, 写PC会引起程序跳转.
- 特殊功能寄存器分为程序状态寄存器, 中断/异常屏蔽寄存器和控制寄存器.
- xPSR程序状态寄存器: 程序状态寄存器表示处理器的状态,可以分为 3 类:应用状态寄存器(APSR)、中断/异常状态寄存器(IPSR)、执行状态寄存器(EPSR),这三个寄存器可组合起来构成一个 32 位的寄存器,统称为 xPSR。可统一以 xPSR 或 PSR 名称统一访问,也可单向访问。
- APSR: 应用程序状态寄存器, 保存当前指令运算结果的状态
- IPSR: 中断状态寄存器, 保存当前中断的向量号
- EPSR: 执行状态寄存器. 用于异常发生时保存当前执行状态. 分为两个重叠区域:可中断-可继续指令(ICI)区和If-then状态区.
- 中断屏蔽寄存器: 分为三组: PRIMASK, FAULTMASK, BASEPRI, 用于控制异常或中断的使能和禁止.
- 控制寄存器CONTROL: 两个作用, 一是定义线程模式的访问级别, 而是选择堆栈指针.
cortex-M4储存组织
- 储存器系统特性: 1. 4GB地址空间, 2. 储存器映射, 3. 支持小端和大端的储存器系统.4. 位段访问.5. 储存器保护单元(MPU). 6. 非对其传输支持
- 储存器映射: cortex-M的储存区与按各自典型用法进行划分, 各区域主要用于:
- 程序代码访问(CODE区域)
- 数据访问(SRAM区域)
- 外设(外设区域)
- 处理器的内部控制和调试部件(私有外设总线)
- 栈内存操作: 堆栈按照后进先出的原则进行存储, Cortex-M4处理器利用PUSH指令往堆栈中存储数据, 利用出栈指令POP从堆栈中取数据. Cortex-M4处理器使用"满递减"栈. 执行POSH指令时先减小堆栈指针的值, 然后将数据储存在堆栈指针所指的储存器位置. 执行POP指令时, 堆栈指针指向储存器位置的数据被读出, 然后堆栈指针值自动增加.