ARMday1

一、RISC 和 CISC(指令集架构)

1. CISC 复杂指令集计算机

Complex Instruction Set Computer,传统 PC x86 架构采用

  • 特点:性能强、芯片复杂、成本高、体积高 、功耗大

2. RISC 精简指令集计算机

Reduced Instruction Set Computer,ARM、MIPS、RISC-V 均为 RISC 架构

  • 特点:芯片简单、成本低 、体积小、功耗小

二、Cortex-A7 通用寄存器数量

ARMv7-A(Cortex-A7 属于 v7A 架构)共有30 个 32 位通用寄存器 (r0~r14 分组,r15=PC),加上专用状态寄存器,总计 37 个基础寄存器;Cortex-A 系列额外增加 Monitor 模式寄存共 40 个。 通用寄存器分组说明:

  1. r0~r7:所有模式共用低 8 通用寄存器;
  2. r8~r14:FIQ、IRQ、SVC、ABORT、UNDEF 模式拥有分组备份寄存器(banked register);
  3. r15:程序计数器 PC,全局共用; 通用寄存器总数:30 个(r0-r15 物理寄存器分组后合计 30 个通用)。

从ARM架构层面看,它为软件提供了16个(R0-R15)32位的通用寄存器。

三、PC、LR、SP、CPSR、SPSR 寄存器功能

1. PC(r15,程序计数器)

  • ARM 状态:PC = 当前指令地址 + 8,32 位字对齐,bit 1:0 无效;
  • Thumb 状态:PC = 当前指令地址 +4,16 位半字对齐,bit 0 无效;
  • 作用:保存下一条预取指令地址,CPU 根据 PC 取指;跳转 / 异常时修改 PC 实现程序切换。

2. LR(r14,链接寄存器)

  • 普通子程序调用 (BL):保存返回地址,函数结束MOV pc,lr返回;
  • 异常模式:保存异常发生时的 PC 偏移地址,异常返回恢复程序;
  • 每种异常模式有独立备份 LR。

3. SP(r13,堆栈指针)

  • 指向栈顶地址,用于栈存储局部变量、现场保护;
  • 每种处理器模式拥有独立 SP,中断 / 异常自动切换专属栈,避免栈冲突。

4. CPSR(当前程序状态寄存器,全局唯一)

32 位状态寄存器,保存 CPU 实时运行状态:

  1. 条件标志位 (N/Z/C/V/Q):ALU 运算结果状态,用于条件指令判断;
  2. 控制位:
    • T:0=ARM32 位指令,1=Thumb16 位指令;
    • I/F:IRQ/FIQ 中断屏蔽位,置 1 关闭对应中断;
    • E:大小端模式控制;
  3. Mode 位 (M 4:0):标识当前 CPU 工作模式(User/SVC/IRQ 等 7 种基础模式)。

5. SPSR(备份程序状态寄存器,特权模式独有)

  • 仅 SVC/IRQ/FIQ/ABORT/UNDEF/Monitor 特权模式存在;
  • 触发异常时,自动把 CPSR 拷贝到当前模式 SPSR;
  • 异常返回时,用 SPSR 恢复 CPSR,还原中断前 CPU 状态(指令集、中断开关、工作模式)。

四、MMU、Cache 作用

1. Cache 高速缓存

分为 I-Cache(指令缓存)、D-Cache(数据缓存),位于 CPU 内核与主存之间:

  • 原理:局部性原理(时间 / 空间局部性),缓存 CPU 高频访问指令、数据;
  • 优势:Cache 速度远高于 SDRAM 主存,减少低速内存访问次数,大幅提升 CPU 运行效率;
  • 配套写缓冲:暂存写内存数据,CPU 无需等待内存写入完成即可执行下一条指令。

2. MMU 内存管理单元

ARM720T/ARM9/ Cortex-A 系列标配,M 系列无 MMU:

  1. 虚拟地址→物理地址映射:操作系统实现进程独立虚拟地址空间,进程间地址隔离;
  2. 内存访问权限保护:设置页面只读 / 读写 / 不可执行,防止非法内存读写;
  3. 内存分页、虚拟内存:硬盘 swap 拓展可用内存;
  4. 大小端、访问异常检测:非法地址、非对齐访问触发 Data Abort 异常。

五、NOR Flash 和 NAND Flash 区别

|------|---------------------|--------------------|
| | NOR Flash | NAND Flash |
| 存储结构 | 并行地址总线,每单元独立寻址 | 串行块式存储,按页 / 块读写 |
| 读取速度 | 随机读极快,可直接片上执行 (XIP) | 顺序读快,随机读慢,不能直接运行程序 |
| 擦写速度 | 擦除慢(按块擦) | 擦写速度远高于 NOR |
| 容量成本 | 单位容量价格高,适合小容量 | 低成本,大容量 |

NOR 为独立地址线 (AM29LV160),NAND 为 IO 复用总线 (K9F2G08)。

六、ARM 7 种基础工作模式

  1. User (用户模式,0b10000):非特权模式,应用程序运行,无法直接访问底层寄存器、硬件;
  2. FIQ (快速中断,0b10001):高优先级硬件中断,拥有独立 r8~r14 寄存器,中断响应最快;
  3. IRQ (普通中断,0b10010):常规外设中断(串口、定时器、GPIO);
  4. Supervisor (SVC 管理模式,0b10011):复位、软中断 SWI 进入,操作系统内核默认模式,管理硬件;
  5. Abort (数据预取异常,0b10111):MMU 访问非法内存、内存对齐错误触发;
  6. Undef (未定义指令,0b11011):CPU 识别不了非法指令时进入;
  7. System (系统模式,0b11111):特权模式,寄存器组和 User 完全一致,供操作系统管理用户进程。

七、ARM 标准异常处理流程

触发任意异常时,硬件自动完成以下步骤(硬件自动执行,无需软件干预):

  1. 保存现场状态:将当前 CPSR 复制到对应异常模式的 SPSR_<mode>;
  2. 保存返回地址:把异常断点 PC 存入当前模式 LR_<mode>;
  3. 切换 CPU 状态
    • 切为 ARM32 位指令集 (T=0);
    • 切换至对应异常工作模式;
    • 置位 I/F 屏蔽位,屏蔽同级 / 低级中断;
  4. 跳转异常向量:PC 强制赋值为异常向量表固定偏移地址,进入异常服务函数;

异常返回(软件手动完成,仅 ARM 状态执行)

  1. 从 SPSR 恢复 CPSR,还原中断前指令集、中断屏蔽、工作模式;
  2. 用 LR 修正后的值恢复 PC,回到异常打断的程序继续执行;

FIQ/IRQ 返回需要 LR-4 修正地址,Abort/Undef 直接使用 LR。

八、异常向量 & 异常向量表

1. 异常向量

每种异常固定分配一个内存偏移地址,CPU 触发异常后强制跳转到该地址,这个偏移量叫异常向量

2. 异常向量表

一段连续内存,按固定偏移存放各异常入口跳转指令,ARM 默认基地址 0x00000000,高端配置可映射至 0xFFFF0000。

向量偏移表

偏移地址 异常类型 优先级
0x00 Reset 复位 最高
0x04 Undefined Instruction 未定义指令
0x08 SWI 软中断
0x0C Prefetch Abort 取指异常
0x10 Data Abort 数据访问异常
0x14 保留 -
0x18 IRQ 普通中断
0x1C FIQ 快速中断 次高

特点:FIQ 放在向量表末尾,可直接在 0x1C 写完整服务程序,无需跳转,减少延迟。

九、AHB 与 APB AMBA 总线(ARM 标准片上总线)

AMBA 是 ARM 定义的片上互联总线标准,SoC 内部双层架构:

1. AHB 高级高性能总线

  • 用途:高速主设备互联,ARM 内核、DMA、外部 SDRAM/NOR FLASH 控制器、LCD;
  • 特性:流水线传输、突发读写、多主机仲裁、高带宽,适配高速大数据传输;
  • 组成:AHB 主设备(CPU/DMA)、AHB 从设备、AHB 桥(连接 APB)。

2. APB 高级外设总线

  • 用途:低速外设,GPIO、UART 串口、定时器、I2C、SPI;
  • 特性:无流水线、单次读写、结构简单、低功耗;
  • 连接:通过 AHB-APB 桥挂在 AHB 总线上,桥完成时钟、协议转换;

核心分工

高速存储 / 内核走 AHB,低速外设统一挂载 APB,隔离高低速设备,优化功耗与总线效率。

十、i.MX6ULL 内核版本

  1. CPU 内核:Cortex-A7(ARMv7-A 架构),单核,最高 900MHz;
  2. 配套协处理器:无独立 Cortex-M,集成 NEON 多媒体指令集、VFPv3 浮点单元;
  3. 架构特性:支持 TrustZone 安全架构、MMU 内存管理、Thumb-2 指令集;
  4. 配套总线:AMBA3 AHB/APB,标准 ARMv7 中断控制器 GICv2。
相关推荐
海浪鱼3 天前
Cortex M7-TRM 翻译系列之Initialization(四)
arm·m7
techdashen6 天前
从软件到硅片:Uber、OCI 与 Ampere 如何联合优化 AmpereOne M A4 计算实例
arm
toradexsh8 天前
基于 NXP i.MX8M Plus 测试 Zephyr RTOS
arm·rtos·nxp·imx8mp·zephyr
Quincy_Freak8 天前
银河麒麟 SQLite 实操:Excel 导入与 SQL 语法编辑功能详解摘要
数据库·arm·数据库管理·大数据分析·银河麒麟·aarch64·sqlitego
Quincy_Freak10 天前
信创内网数据规范实践:银河麒麟下SQLite本地数据安全管理方案
数据库·sqlite·arm·数据库管理·大数据分析·银河麒麟·aarch64
凉、介10 天前
ARMv8 架构下的刷 Cache 操作
c语言·笔记·学习·架构·嵌入式·arm
奔跑的架构师11 天前
[A-48]ARMv9/v8-电源状态管理机制(PSCI协调机制)
android·linux·arm开发·arm
凉、介11 天前
KVM + QEMU 虚拟化
笔记·学习·嵌入式·arm·qemu·虚拟化·kvm
secondyoung12 天前
Cortex-R52学习:存储系统
arm开发·单片机·学习·arm