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。
相关推荐
susplus19 小时前
【IMX6ULL Linux系统移植】SD卡分区 | uboot详解
linux·arm·u-boot
剑指offer.5 天前
ARM裸机开发-SPI
arm开发·嵌入式硬件·嵌入式·arm
susplus7 天前
【ARM 裸机开发 (IMX6ULL-mini)】I2C协议详解
嵌入式·arm·i2c
今年下半年9 天前
【运维】windows虚拟机安装arm(aarch64)服务器
运维·windows·arm·虚拟机·aarch64
额额额对了9 天前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
一直C10 天前
【ARM嵌入式开发】LCD液晶屏显示原理、色彩模式与显存地址映射详解
lcd·嵌入式·arm·寄存器·cortex-a7
susplus10 天前
【ARM 裸机开发 (IMX6ULL-mini)】PWM 背光调节与 GT9147 多点触摸驱动
lcd·arm·多点触控·pwm背光调节
凉、介11 天前
深入理解 ARM SCP Firmware 的 Event 与 Notification 机制
学习·scp·嵌入式·arm
susplus11 天前
【ARM 裸机开发 (IMX6ULL-mini)】SPI 协议与ADXL345 三轴加速度传感器
arm·spi·adxl345加速度传感器
susplus11 天前
【ARM 裸机开发 (IMX6ULL-mini)】RGB-LCD 驱动与时序详解
arm·rgb_lcd