小雪崩头像
关注

嵌入式学习 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通用数据寄存器,随便用
R13SPStack Pointer,栈指针,指向当前栈顶
R14LRLink Register,链接寄存器,保存函数返回地址
R15PCProgram Counter,程序计数器,存下一条指令地址

R0 ~ R12 是普通工作寄存器,存数据、传参数都可以。
R13(SP) 管栈,压栈弹栈都靠它。
R14(LR) 管返回地址,函数执行完靠它跳回去。
R15(PC) 管下一条指令,程序"往下走"靠它。

2.2 状态寄存器

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

寄存器全称作用
CPSRCurrent Program Status Register当前程序状态
SPSRSaved 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保留
0x18IRQ中断
0x1CFIQ中断

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

五、指令集与数据类型

5.1 数据类型

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

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

5.2 指令集

ARM有几种指令集状态:

指令集说明
ARM指令集32位指令,功能全,效率高
Thumb指令集16位指令,代码密度高,省空间
Thumb-216/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默认小端,可配置为大端

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2401_85242990/article/details/165485805

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--