嵌入式学习 day49:ARM基础

一、ARM架构概述

ARM(Advanced RISC Machine)是一种精简指令集(RISC) 架构。和51单片机相比,主要有几个区别:

对比项 51单片机 ARM
位数 8位 32位
指令集 CISC风格 RISC精简指令集
寄存器数量 多(通用寄存器+状态寄存器)
工作模式 单一 多种模式
异常处理 简单 规范的异常向量表

ARM主要用于手机、平板、嵌入式设备,是当前最主流的嵌入式架构之一。

二、Cortex-A寄存器

ARM的寄存器分为通用寄存器状态寄存器两大类。

2.1 通用寄存器

Cortex-A内核有 R0 ~ R15 共16个通用寄存器,其中几个有特殊用途:

寄存器 别名 作用
R0 ~ R12 --- 通用数据寄存器,随便用
R13 SP Stack Pointer,栈指针,指向当前栈顶
R14 LR Link Register,链接寄存器,保存函数返回地址
R15 PC Program Counter,程序计数器,存下一条指令地址

R0 ~ R12 是普通工作寄存器,存数据、传参数都可以。

R13(SP) 管栈,压栈弹栈都靠它。

R14(LR) 管返回地址,函数执行完靠它跳回去。

R15(PC) 管下一条指令,程序"往下走"靠它。

2.2 状态寄存器

ARM有两个状态寄存器,容易混淆:

寄存器 全称 作用
CPSR Current Program Status Register 当前程序状态
SPSR Saved Program Status Register 保存的程序状态

CPSR 保存当前程序的状态,包括:

  • 条件标志位:N(负)、Z(零)、C(进位)、V(溢出)

  • 中断屏蔽位:I(IRQ禁止)、F(FIQ禁止)

  • 运行模式位:当前处于哪种模式

  • 指令集状态:ARM状态 / Thumb状态

SPSR 只在异常模式下才存在。当异常发生时,CPU 自动把异常前的 CPSR 存进 SPSR;异常处理完,再从 SPSR 恢复回 CPSR。

三、ARM工作模式

ARM有多种工作模式,不同模式权限不同、能访问的寄存器也不同。

模式 名称 用途
User 用户模式 普通程序运行模式,权限最低
FIQ 快速中断模式 处理高速中断,优先级最高
IRQ 普通中断模式 处理普通中断
Supervisor 管理模式 系统复位、软中断后进入
Abort 中止模式 存取异常时进入
Undefined 未定义模式 执行未定义指令时进入
System 系统模式 特权模式,和User共用寄存器

前6种叫异常模式 ,普通程序运行在 User模式,出了事情(中断、异常)就切到对应的异常模式。

四、异常模式与异常向量表

4.1 什么是异常

异常是打断正常程序执行的事件,包括:中断(IRQ/FIQ)、软中断(SWI)、复位、取指/取数出错、未定义指令等。

发生异常时:

  1. 把当前 CPSR 保存到 SPSR

  2. 切换到对应的异常模式

  3. 跳到异常向量表中对应的入口地址

  4. 处理完异常,恢复 CPSR,返回原程序

4.2 异常向量表

异常向量表是一张固定的地址表,每个异常对应一个入口:

地址 异常
0x00 复位
0x04 未定义指令
0x08 软中断(SWI)
0x0C 取指中止
0x10 取数中止
0x14 保留
0x18 IRQ中断
0x1C FIQ中断

CPU遇到异常时,自动跳到对应地址去执行处理代码。

五、指令集与数据类型

5.1 数据类型

ARM支持以下基本数据类型:

类型 位数 说明
字节 8位 Byte
半字 16位 Halfword
32位 Word

5.2 指令集

ARM有几种指令集状态:

指令集 说明
ARM指令集 32位指令,功能全,效率高
Thumb指令集 16位指令,代码密度高,省空间
Thumb-2 16/32位混合,兼顾性能和空间

ARM和Thumb可以切换,通过 CPSR 中的 T 位控制。

六、封装模式(大小端)

ARM支持大端小端两种存储模式:

模式 低地址存什么 举例 0x12345678
小端 低位字节 78 56 34 12
大端 高位字节 12 34 56 78

ARM默认是小端模式,可以通过配置切换。

七、今日总结

今天学了ARM基础,核心要点如下:

  1. Cortex-A寄存器:R0~R12通用,R13=SP(栈指针),R14=LR(返回地址),R15=PC(下一条指令)

  2. 状态寄存器:CPSR是当前状态,SPSR是异常现场存档

  3. 工作模式:User(用户)+ 6种异常模式(FIQ、IRQ、Supervisor、Abort、Undefined、System)

  4. 异常向量表:每种异常对应固定入口地址,异常发生自动跳转

  5. 数据类型:字节(8位)、半字(16位)、字(32位)

  6. 指令集:ARM(32位)、Thumb(16位)、Thumb-2(混合)

  7. 大小端:ARM默认小端,可配置为大端

相关推荐
田径他爸来了1 小时前
嵌入式学习第38天——裸机imx6ull(uart接口;配置波特率为115200,8位数据位,无校验,一位停止位)
嵌入式硬件·学习
qeen871 小时前
【Linux】操作系统之进程介绍(一)
linux·笔记·学习·进程
smartpi_ai2 小时前
CI-73T 的三个串口怎么分?下载口固定的引脚账本、词条 150 条的“词数“口径与硬 PWM 控舵机的性能边界
单片机·嵌入式硬件·语音识别
艾芯微科技2 小时前
ESDUNL24VC1 单向 ESD 静电保护二极管参数、电路设计与 PCB 防护布局
网络·单片机·嵌入式硬件·集成测试·51单片机
Kuakewei8882 小时前
OVP/OCP过压过流保护芯片设计指南:过压关断、限流与短路保护
嵌入式硬件
佳児素花痴╮2 小时前
STM32(中断)
stm32·单片机·嵌入式硬件
传奇开心果编程2 小时前
【Rust入门知识点学与练】第36课:所有权——移动、借用、Copy、切片
开发语言·学习·rust
传奇开心果编程3 小时前
【Rust入门知识点学与练】第35课:工具链与反馈环——先学会读编译器在说什么
开发语言·学习·rust
ZLG_zhiyuan4 小时前
示波器探头选型指南:5大分类,3步正确适配(附避坑清单)
单片机·嵌入式硬件