ARMv7-R Cortex-R 编程向导手册学习

/* TODO 写在前面:
 * 纵览整本规范,ARMv7-R 系列处理器可以看作简化版的 ARMv7-A 系列处理器。
 * 换句话说,ARMv7-A 是配置更灵活与复杂的 ARMv7-R 系列处理器。
 * 
 * R 系列处理器为实时功能提供硬件上的支持。
 */

第一章 介绍

Cortex-R 系列处理器对于临界代码(时间要求很严格的代码)的执行具有相当的优势,比如 Cortex-R 存在 TCM 内存,可以让 CPU 立即访问内存,类似于 cache, 但与 cache 不同的是,TCM内存对应真实的内存地址映射
Cortex-R5 与 Cortex-R7 存在特定的端口来访问时间临界的外设,这些专用的端口意味着访问这些外设时不会与低优先级的内存访问竞争(访问这些外设的寄存器地址时,不通过内存总线,而是专门的地址总线)。
Cortex-R CPU 也可以为硬实时应用提供低中断延迟的中断。

第二章 ARM 架构处理器

ARM 架构手册不会指定 cache 的大小以及单独指令的执行周期。

  • Cortex-A系列处理器是支持虚拟内存系统 MMU 的高性能处理器。
  • Cortex-R 系列处理器是用于要求时间确定且拥有低中断延迟的 RTOS,处理器使用 MPU 来保护内存区域,而不支持 MMU。
  • Cortex-M 系列处理器是低成本处理器,同样拥有低中断延迟,与 A/R 系列处理器不同, M系列处理器使用不同的异常处理模型,且只支持 Thumb 指令集。

第三章 处理器模式与寄存器

ARMv7-R 架构是模型架构(与 ARMv7-A类似, 但有一些不同),存在6个特权模式与一个user模式:
ARMv7-R Cortex-R 编程向导手册学习_第1张图片
ARMv7-R 定义了两个特权等级:

  • PL0 : 非特权等级,对应 user 模式。
  • PL1: 特权等级,除 user 模式外的其他模式。
    模式与特权等级的对应关系如下:ARMv7-R Cortex-R 编程向导手册学习_第2张图片
    当前处理器模式与执行状态可以通过 cpsr 寄存器查看,也可以通过写 cpsr 寄存器来改变当前处理器模式与状态,注意,只有特权代码可以访问cpsr。

3.1 寄存器

与ARMv7-A 类似,ARMv7-R 提供 16 个通用目的寄存器:R0-R15, 也提供了当前程序状态寄存器:CPSR,以及在特权模式下,提供一个备份程序状态寄存器:SPSR,用于保存之前执行模式下的 CPSR 的拷贝。
ARMv7-R Cortex-R 编程向导手册学习_第3张图片
Banking: 不同模式下,同一个寄存器名对应不同的物理地址。
不同模式下,Banking 寄存器如下:
ARMv7-R Cortex-R 编程向导手册学习_第4张图片
在所有模式下,访问 R0-R7 与 R15 都对应同一个物理地址。

3.1.1 程序状态寄存器 cpsr

CPSR用于存储:

  • 算数逻辑标志位
  • 当前处理器模式
  • 中断失能标志位
  • 当前处理器状态,ARM/Thumb 等
  • 数据端序,大端与小端
  • IT(if-then) 模块执行状态位
    CPSR 位定义如下:
    ARMv7-R Cortex-R 编程向导手册学习_第5张图片
    CPSR 与 SPSR 通过 MSR/MRS 指令访问。

3.1.2 协处理器 cp15

cp15 是处理器内部集成的一个模块,用于系统功能控制。
cp15 包含16个寄存器组:c0 - c15。

协处理器寄存器组 功能描述
C0 MIDR, MPIDR CPU id 号
C1 SCTLR, ACTLR, CPACR 系统功能控制
C5/c6 DFSR/IFSR, DFAR/IFAR, MPU 错误状态与错误地址,以及 MPU 控制
C7 Cache 维护操作
C9 Cpu 性能监控
C13 线程 id 寄存器
C15 CBAR 存储 gic 基地址

所有的协处理器通过 MCR/MRC 指令访问。

3.1.3 系统控制寄存器 SCTLR

SCTLR 寄存器通过 cp15 访问,提供:

  • MPU 内存控制
  • 处理器功能控制,比如 I/D cache 使能
  • 对于 cpu 实现的功能提供 CPU 状态信息

SCTLR 寄存器位定义如下:
ARMv7-R Cortex-R 编程向导手册学习_第6张图片

第四章 汇编语言介绍

汇编语言是底层的编程语言,与机器码一一对应,学习汇编语言可以让我们能够编写启动代码,能让我们更有效率的调试 C 代码。

(与 ARMv7-A 汇编类似,后续阅读规范)

第五章 统一的汇编语言指令

这一章会对常用的汇编指令做一个介绍,比如:

  • 数据处理操作指令,比如算术指令
  • 内存访问指令
  • 跳转指令
  • 其他指令,如:协处理器访问指令,异常生成指令,CPSR/SPSR 访问指令

(与 ARMv7-A 汇编类似,后续阅读规范)

第六章 浮点

ARMv7-R 支持vfpv3

第七章 cache 与 write buffer

Cache 是cpu 内部硬件控制的一块 ram, 对软件不可见。
Write buffer 同样也是一片 ram,让cpu 核不需要等待写操作完成。

7.1 cache 缺点

Cache 的缺点如下:

  • 程序执行时间是不确定的,因为可能伴随 cache 的分配与替换。
  • 存在 cache 中的数据与外部内存不一致的情况,这是cache 一致性的问题。
  • 在 cpu 复位后,cache 中的数据是不确定的,所以一般我们需要在启动代码中使无效 Dcache,保证此时cache 内容是干净的。

7.2 内存架构

ARMv7-A 通用内存架构如下:
ARMv7-R Cortex-R 编程向导手册学习_第7张图片
一般 cpu 存在两级 cache:

  • L1 Cache 是每一个 cpu 核独有的,每一个核都有自己的L1 cache, 而 L1 cache 又分为 I-cache 与 D-cache。
  • L2 cache 是CPU 上所有核共享的。

外部内存是最低层的存储设备,如果 cache 中没有我们要访问的数据,那么才会通过总线访问内存。

7.3 cache 架构

7.3.1 cache 术语

ARMv7-R Cortex-R 编程向导手册学习_第8张图片

cache 术语 描述
line cache 最小加载单元,加载一片连续的word
index 内存地址的一部分,用于确定当前的内存地址属于哪一个 cache line
way way 是 cache 的细分,每一个 way 都是相同的大小,且具有相同范围的 index
set 不同way 中,具有相同 index 的cache line 被称作属于同一个 set
tag 是内存地址的最高有效位,每一个 cache line 都会存储它对应的 tag

注:只要理解了上述的 cache 术语,手册后续的cache 章节,理解起来就轻松多了。包括cache 策略以及cache 维护操作。

第八章 TCM

TCM 内存可以为 cpu 提供低延迟的内存访问,而且没有 cache 的不确定性。
(没有 cache 的分配与替换,因为 TCM 可以映射到内存,然后通过内存地址访问)

你可能感兴趣的:(ARM,cortex-r,随笔,学习,arm,arm开发)