#ARM #嵌入式 #Cortex‑A7 #裸机开发 #Linux驱动
前言
最近开始学习 ARM 裸机开发,整理第一天课堂笔记,包含 RISC/CISC 对比、ARM 内核寄存器、冯诺依曼架构、大小端模式、移位操作、Flash 区别、MMU、异常向量表等基础知识点,适合嵌入式、Linux 驱动入门同学参考。
说明:本文基于 Cortex‑A7 32 位 ARMv7 架构整理
一、CISC 与 RISC 指令集
1. CISC 复杂指令集计算机
- 指令功能丰富多样
- 芯片内部电路复杂
- 成本高、体积大、功耗高
2. RISC 精简指令集计算机(Reduced Instruction Set Computer)
- 指令功能少,每条指令简单
- 芯片硬件简单
- 成本低、体积小、功耗低
✨ARM 就是典型 RISC 架构 CPU 设计公司,ARM 不生产芯片,只输出架构授权,由半导体厂商生产芯片。
ARM 内核三大系列
表格
| 内核系列 | 用途 | 代表型号 |
|---|---|---|
| Cortex‑A | 应用处理器,跑操作系统 Linux/Android | A7(IMX6ULL、STM32MP157)、A5、A8、A9 |
| Cortex‑R | 实时领域,汽车电子,高实时性 | Cortex‑R 系列 |
| Cortex‑M | 单片机 MCU,裸机单片机开发 | M3(STM32F103)、M4(STM32F407) |
注意区分:内核版本(Cortex‑A7)≠指令集版本(ARMv7 / ARMv8)
二、冯・诺依曼架构
指令和数据存放在同一块存储器空间,共享存储器总线,早期 ARM 大多采用冯诺依曼架构。
三、ARM32 通用寄存器组(Cortex‑A)
ARM32 一共有 16 个通用寄存器 R0~R15:
- R0‑R12:通用数据寄存器,用来临时存放运算数据,配合 ALU 算术逻辑单元完成加减移位运算
- R13 = SP(Stack Pointer)栈指针寄存器
- 栈规则:先进后出,后进先出
- 出栈:从 SP 指向地址取出数据,随后 SP 自增
- R14 = LR(Link Register)链接寄存器
- 保存函数返回地址,函数调用时保存下一条指令地址,函数返回使用 LR 回到调用处
- R15 = PC(Program Counter)程序计数器
- 程序指针,保存下一条要执行指令的地址,不是当前正在执行的指令!
状态寄存器
- CPSR:当前程序状态寄存器,记录当前 CPU 运行状态、条件标志位
- SPSR:备份程序状态寄存器 发生异常的时候,保存 CPSR 现场;异常退出,把 SPSR 恢复回 CPSR。
MMU 内存管理单元
- 作用:虚拟地址 ↔ 物理地址转换,依靠页表完成映射
- 裸机开发:一般关闭 MMU,直接操作物理地址
- Linux 驱动:必须打开 MMU,程序使用 4GB 虚拟地址空间
四、大小端存储模式
内存存储多字节数据,区分大端、小端:
- 大端模式:低内存地址存高字节,高内存地址存低字节
- 小端模式:低内存地址存低字节,高内存地址存高字节
ARM 芯片可以配置大小端,默认一般小端。
示例代码理解:
int i = 0xFFFFFFFF;
i += 1; //发生无符号溢出
五、ARM 移位指令(3 种右移)
- 逻辑右移 LSR(无符号数) 移出低位,最高位补 0,无视符号位
1011 0010 LSR #1 → 0101 1001
- 算术右移 ASR(有符号数) 移出低位,最高位补符号位,保留正负号
1011 0010 ASR #1 → 1101 1001
- 循环右移 ROR 最低位移出,直接填充到最高位,循环轮转
1011 0010 ROR #1 → 0101 1001
六、Nor Flash 和 Nand Flash
- Nor Flash 每一个字节都可以直接寻址,引出独立地址总线 + 数据总线,可以直接运行代码。
- Nand Flash 块设备,以块(常见 512 字节)为单位读写,不能直接执行代码,需要把代码拷贝到内存再运行。
七、交叉编译
在 A 平台编写、编译代码,生成可执行程序,放到架构不同的 B 平台运行。
例子:PC (x86) 编译 ARM 架构程序,拷贝到 IMX6ULL 开发板运行,需要 ARM 交叉编译器。
八、中断向量表 & 异常向量表
- 中断向量表:数组,存放中断服务函数入口地址
- 异常向量表:数组,存放跳转指令,跳转到异常服务函数
向量表基地址可以配置,ARM9/ARM11 默认
0xFFFF0000,也可以设置到 0x0 地址。 异常类型包含:Reset 复位、未定义指令、软中断、预取中止、数据中止、IRQ 普通中断、FIQ 快速中断。
九、总线简单概念
- 单总线:内核和外设共用一组总线,性能差
- AHB 先进高速总线:高速外设使用,速度更快。
小结 Day01 重点
- ARM 是 RISC 精简指令集,分 A/R/M 三大内核;区分内核版本和指令集版本
- 牢记 SP、LR、PC 三个特殊寄存器功能
- MMU 实现虚拟地址转物理地址,裸机关闭 MMU,Linux 开启 MMU
- 分清逻辑右移 LSR、算术右移 ASR、循环右移 ROR
- Nor Flash 可以字节寻址;Nand Flash 按块访问
- 异常向量表存放跳转指令,是裸机中断、异常处理的基础