一、嵌入式处理器内核基础
1. 处理器内核的定义
处理器内核是处理器的内部核心设计 ,不是实体芯片,设计核心追求高速度、低功耗、易集成,是嵌入式处理器的"核心运算单元"。
2. 指令集核心:RISC
现代嵌入式处理器内核全部采用RISC(精简指令集),区别于计算机的CISC(复杂指令集),RISC的特点是指令简单、单周期执行、功耗低,适配嵌入式设备的资源受限场景。
3. 四大嵌入式处理器内核流派
嵌入式领域主流内核有4类,ARM是最核心、应用最广的流派,各流派特点对比:
| 流派 | 核心特点 | 典型应用场景 |
|---|---|---|
| MIPS | 架构开放、性价比高 | 路由器、机顶盒、工业控制 |
| PowerPC | 高性能、多核心 | 服务器、工业设备、游戏机 |
| 68K/COLDFIRE | 摩托罗拉出品,兼容性好 | 传统工业嵌入式设备 |
| ARM | 低功耗、高代码密度、性价比最高 | 手机、单片机、物联网、智能硬件(嵌入式主流) |
二、ARM体系结构核心
ARM体系结构是整个章节的核心基础,包含技术特征、版本演变两大重点,是理解ARM工作机制的前提。
1. ARM体系结构的核心技术特征
- RISC架构+单周期操作:指令简单,一条指令在一个时钟周期内完成,执行效率高;
- 加载/存储指令结构:只有专门的LDR(加载)/STR(存储)指令能访问内存/外设,其他指令仅操作寄存器,降低功耗;
- 固定长度指令(Cortex-A70前):32位ARM状态下指令均为32位,指令格式统一,译码速度快;
- 三地址指令格式 :如
ADD R1,R2,R3(R1=R2+R3),操作数和结果分开存放,指令逻辑清晰; - 32位地址空间(ARM7开始) :最大寻址空间4GB(2³²字节),满足嵌入式设备的存储需求;
- 指令流水线+存储架构 :不同ARM内核流水线级数不同,存储架构分两种:
- 冯·诺依曼 :程序/数据存储器统一编址(如ARM7,3级流水线);
- 哈佛 :程序/数据存储器分开编址(如ARM9,5级流水线),数据读取和指令取指可并行,速度更快。
2. ARM体系结构版本与内核的对应关系
ARM自诞生以来定义了8种版本(ARMv1~ARMv8),不同内核适配不同版本,重点记主流内核的版本归属(考试高频):
| 架构版本 | 对应核心ARM内核 | 应用特点 |
|---|---|---|
| ARMv4T | ARM7TDMI、ARM9TDMI | 经典入门级,低速嵌入式设备 |
| ARMv5TE | ARM10TDMI、XScale | 性能提升,支持DSP指令 |
| ARMv6-M | Cortex-M0/M0+/M1 | 超低成本、超低功耗,物联网微控制器 |
| ARMv7 | 分3个子版本(重点!) | Cortex系列核心划分 |
| ARMv7-M | Cortex-M3/M4 | 中低功耗,工业/消费类单片机 |
| ARMv7-R | Cortex-R4/R5/R7 | 实时性强,车载/工业实时控制 |
| ARMv7-A | Cortex-A5/A7/A8/A9/A15 | 高性能,手机/平板/嵌入式开发板 |
| ARMv8-A | Cortex-A53/A57/A70/A73 | 64位架构,高端嵌入式设备 |
核心结论 :Cortex是ARM现代内核的核心系列,按应用场景分为M/R/A三大子系列,是后续学习的重点。
三、ARM处理器的工作状态与工作模式
ARM处理器的工作状态 决定指令执行格式,工作模式决定权限和寄存器访问范围,是ARM的核心工作机制。
1. 工作状态(4种,核心记前3种)
状态由处理器硬件/指令控制切换,核心区别是指令位数和编码密度,适配不同功耗/性能需求:
| 工作状态 | 指令位数 | 核心特点 | 适用内核 |
|---|---|---|---|
| ARM状态 | 32位 | 指令功能完整,执行速度快 | 所有经典ARM(ARM7/9)、Cortex-A/R |
| Thumb状态 | 16位 | 指令短小,代码密度高、功耗低 | 支持ARMv4T及以上内核 |
| Thumb-2状态 | 16/32位 | 兼顾16位低功耗和32位高性能,自动选择指令位数 | Cortex-M系列(主流) |
| 调试状态 | - | 处理器停机调试时进入 | 所有内核 |
状态切换 :通过BX指令 实现,将操作数寄存器最低位设为1 进入Thumb状态,设为0 进入ARM状态;
特殊考点 :Cortex-M3只有Thumb-2和调试状态,无纯ARM/Thumb状态,是嵌入式单片机的核心特点。
2. 工作模式(分两类:经典ARM模式/Cortex-M模式)
工作模式决定处理器的特权级别 和寄存器访问范围 ,模式切换由异常/中断/硬件复位触发,无法由用户程序直接切换。
(1)经典ARM工作模式(7种,经典ARM7/9内核)
7种模式分为用户模式(非特权) 和6种特权模式,特权模式用于处理异常/中断/系统保护,核心参数如下(考试必考):
| 工作模式 | 英文缩写 | 核心功能 | 关键特征 | CPSR[M4:M0]编码 |
|---|---|---|---|---|
| 用户模式 | User | 程序正常执行(非特权) | 无SPSR,不能访问特权寄存器 | 10000 |
| 快速中断 | FIQ | 高速数据传输/通道处理 | 独有R8_fiq~R14_fiq,中断优先级高 | 10001 |
| 外部中断 | IRQ | 普通外部中断处理 | 独有R13_irq~R14_irq | 10010 |
| 管理模式 | SVC | 系统保护,处理软中断SWI | 复位/软中断默认进入,最常用特权模式 | 10011 |
| 中止模式 | ABT | 处理存储器故障(虚拟存储) | 处理地址访问错误 | 10111 |
| 未定义指令 | UND | 处理未定义指令,仿真协处理器 | 适配硬件协处理器扩展 | 11011 |
| 系统模式 | SYS | 运行特权级系统任务 | 与User模式寄存器相同,特权访问 | 11111 |
核心考点:
- 只有User模式是非特权模式,其余均为特权模式,防止用户程序非法操作硬件;
- SVC模式是复位默认模式,系统启动后首先进入该模式;
- FIQ模式独有最多寄存器(R8~R14),无需保存通用寄存器,中断响应速度最快。
(2)Cortex-M工作模式(2种,现代Cortex-M3/M4内核)
经典7种模式简化为线程模式 和处理模式,更适配单片机的简单应用场景:
| 工作模式 | 核心功能 | 切换触发条件 |
|---|---|---|
| 线程模式 | 执行普通用户/系统代码 | 复位自动进入,异常返回后进入 |
| 处理模式 | 处理异常/中断(特权) | 外部中断/系统异常触发 |
特权级划分 :线程模式又分特权级 和用户级 ,由CONTROL寄存器修改,用户级线程模式无硬件访问权限,提升系统安全性。
四、ARM处理器的寄存器组织
ARM处理器的寄存器是指令操作的唯一载体 (除加载/存储外),寄存器组织与工作状态/工作模式 强绑定,分为经典ARM(ARM状态)寄存器 和Cortex-M寄存器 两类,核心记37个寄存器(经典ARM) 和Cortex-M的特殊寄存器。
1. 经典ARM(ARM状态)的寄存器组织
共37个32位寄存器 :31个通用寄存器(含PC) + 6个状态寄存器 ,寄存器按分组共享设计,不同模式共享基础寄存器,独有专用寄存器,避免数据冲突。
(1)31个通用寄存器(分3组)
- 不分组寄存器(R0~R7):所有模式共享,任何模式下访问的都是同一个寄存器,中断/模式切换时需手动保存,否则数据会被覆盖;
- **分组寄存器(R8R14)**:部分模式独有,其中FIQ模式独有R8_fiqR14_fiq,其余特权模式仅独有R13~R14;
- R13(SP):堆栈指针,不同模式独有自己的SP,避免不同模式的堆栈数据冲突;
- R14(LR):链接寄存器,保存子程序/中断的返回地址,不同模式独有;
- 程序计数器(R15,PC):所有模式共享,保存当前执行指令的下一条指令地址(流水线偏移)。
(2)6个状态寄存器
- 当前程序状态寄存器(CPSR) :所有模式共享,保存当前处理器的状态标志、中断屏蔽、工作模式,是ARM的"状态控制核心";
- 备份程序状态寄存器(SPSR) :共5个(SPSR_fiq/irq/svc/abt/und),特权模式独有,用于保存CPSR的副本(中断/异常时),中断返回后恢复CPSR,User/SYS模式无SPSR。
CPSR核心位解析(32位,重点记低16位):
| 位段 | 核心功能 | 关键标志 |
|---|---|---|
| [31:28] | 条件码标志(N/Z/C/V) | 反映运算结果(如Z=1表示结果为0) |
| [27] | Q标志 | DSP指令饱和/溢出标志 |
| [19:8] | DNM/RAZ | 预留位,不可修改/读为0 |
| [7] | I标志 | I=1关闭普通中断(IRQ) |
| [6] | F标志 | F=1关闭快速中断(FIQ) |
| [5] | T标志 | T=1为Thumb状态,T=0为ARM状态 |
| [4:0] | M4~M0 | 工作模式编码(如10000=User) |
2. Cortex-M系列的寄存器组织
经典ARM寄存器的简化版,更适配单片机的简单操作,核心特点:
- 通用寄存器 :R0R15,其中R8R12为高位寄存器(16位指令不可用,Thumb-2可用);
- 特殊堆栈指针(R13) :分MSP(主堆栈指针) 和PSP(进程堆栈指针),MSP用于处理模式/特权线程模式,PSP用于用户级线程模式;
- 状态寄存器 :合并为xPSR ,分3个子寄存器:
- APSR:应用程序状态寄存器,保存条件码标志(N/Z/C/V/Q);
- IPSR:中断程序状态寄存器,保存当前异常编号;
- EPSR:执行程序状态寄存器,保存指令执行状态。
五、ARM处理器的异常中断
异常中断是嵌入式处理器响应外部事件/内部故障 的核心机制,分为经典ARM异常中断 和Cortex-M异常中断 ,核心记异常类型、优先级、响应/返回过程(嵌入式开发的核心考点,如中断服务程序编写)。
1. 异常中断的基本概念
- 异常:内部/外部事件触发的处理器请求,使程序跳转到异常处理程序执行,处理完成后返回原程序;
- 正常执行:ARM指令PC+4,Thumb指令PC+2,按顺序执行;
- 异常向量地址:不同异常的固定入口地址,处理器触发异常后直接跳转到该地址执行处理程序。
2. 经典ARM处理器的异常中断(7种)
(1)7种异常类型+优先级(从高到低,必考)
- 复位(RESET):最高优先级,复位引脚有效时触发,进入SVC模式;
- 数据访问中止(DABT):数据地址访问错误/无权限时触发;
- 快速中断(FIQ):高速外部中断触发;
- 外部中断(IRQ):普通外部中断触发;
- 指令预取中止(PABT):指令地址访问错误/无权限时触发;
- 软件中断(SWI)/未定义指令(UND):最低优先级,SWI用于用户模式调用特权操作,UND用于仿真协处理器。
(2)异常向量地址(高低端,核心记低端0x00000000开始)
| 异常类型 | 低端地址(常用) | 高端地址 | 对应工作模式 |
|---|---|---|---|
| 复位 | 0x00000000 | 0xFFFF0000 | SVC |
| 未定义指令 | 0x00000004 | 0xFFFF0004 | UND |
| 软件中断 | 0x00000008 | 0xFFFF0008 | SVC |
| 预取中止 | 0x0000000C | 0xFFFF000C | ABT |
| 数据中止 | 0x00000010 | 0xFFFF0010 | ABT |
| IRQ | 0x00000018 | 0xFFFF0018 | IRQ |
| FIQ | 0x0000001C | 0xFFFF001C | FIQ |
(3)经典ARM异常响应过程(4步,硬件自动完成)
- 保护状态:
CPSR → SPSR(将当前状态保存到对应模式的SPSR); - 设置状态:修改CPSR的M4~M0进入对应模式,设置
I=1关闭IRQ(防止嵌套中断); - 保存断点:将返回地址保存到对应模式的
R14(LR); - 跳转执行:PC赋值为异常向量地址,执行处理程序。
(4)经典ARM异常返回过程(4步,硬件自动完成)
- 恢复寄存器:恢复中断前的通用寄存器(手动/编译器完成);
- 恢复状态:
SPSR → CPSR(将备份的状态恢复到CPSR); - 恢复断点:将LR的值赋值给PC,回到原程序执行;
- 开中断:清除CPSR的I/F标志,重新开放IRQ/FIQ。
3. Cortex-M处理器的异常中断(现代主流,重点记)
经典ARM异常的扩展和简化 ,适配单片机的多中断需求,核心特点是最多支持256个异常 ,分为内部异常(015)**和**外部中断(16255),是STM32等单片机的中断基础。
(1)核心异常类型(10种基础,其余为外部中断)
- 系统复位(RESET,最高优先级);
- 不可屏蔽中断(NMI);
- 硬件故障(Hart Fault);
- 存储器管理故障(MemMang);
- 总线故障(Bus Fault);
- 使用故障(Usage Fault);
- 软中断(SVC Call);
- 可挂起系统服务(PendSV);
- 系统定时中断(SysTick,单片机核心定时器);
- 外部中断(IRQ0~IRQ239,共240个)。
(2)中断编号与向量地址计算(嵌入式开发必考,核心公式)
Cortex-M的异常通过编号 区分,分为中断类型号(ID) 和中断号(IRQn) ,向量地址为4字节对齐(每个异常占4字节),核心公式:
- 中断号与类型号转换:
IRQn = ID - 16或ID = IRQn + 16(内部异常ID015,IRQn为负数;外部中断ID16255,IRQn0~239); - 异常向量地址:
Iadd0 = ID × 4(通用公式); - 外部中断向量地址:
Iadd0 = (16 + IRQn) × 4(直接用IRQn计算,最常用)。
例题:Cortex-M3中IRQ18的中断类型号和向量地址?
- 类型号:
ID = 18 + 16 = 34; - 向量地址:
Iadd0 = 34 × 4 = 136 = 0x00000088(与课件中ADC1_2中断地址一致,验证正确)。
特殊考点 :复位异常的PC指向0x00000004(而非0x00000000),0x00000000存放复位向量,通常是一条无条件转移指令,跳转到系统初始化程序。
(3)Cortex-M异常响应/返回过程(硬件自动入栈/出栈,核心特点)
与经典ARM不同,Cortex-M异常触发时硬件自动完成寄存器入栈,无需手动保存,是单片机开发的便捷性体现:
- 响应过程 :
- 入栈保护:自动将
xPSR、PC、LR、R12、R3、R2、R1、R0压入堆栈(共8个寄存器,0x1C字节); - 取入口地址:根据ID计算向量地址;
- 更新寄存器:SP指向栈顶,IPSR保存异常ID,PC指向向量地址,LR赋值为EXC_RETURN(特殊返回值)。
- 入栈保护:自动将
- 返回过程 :
- 出栈恢复:自动将栈中寄存器弹出到
R0~R12、LR、PC、xPSR; - 模式切换:根据EXC_RETURN的值切换模式/堆栈(如0xFFFFFFF9返回线程模式+MSP)。
- 出栈恢复:自动将栈中寄存器弹出到
六、ARM的存储器格式及数据类型
ARM处理器对存储器的编址和数据存储格式 有严格规定,是嵌入式开发中数据读写、硬件通信 的基础,核心记大小端模式 和数据对齐要求。
1. 存储器编址基础
ARM将存储器看作从0x00000000开始的线性字节空间 ,32位处理器最大寻址4GB (2³²),所有内存/外设均按字节地址编址,字/半字数据由多个字节组成。
2. 大小端模式(数据存储的两种格式,必考)
大小端模式决定多字节数据的字节排列顺序 ,嵌入式设备中小端模式为默认/主流(与PC一致),部分硬件支持大端模式(如网络设备)。
- 大端模式(Big-Endian) :高字节存低地址,低字节存高地址(符合人类读写习惯,如0x12345678,0x12存低地址);
- 小端模式(Little-Endian) :低字节存低地址,高字节存高地址(符合处理器运算习惯,ARM默认,如0x12345678,0x78存低地址)。
举例:字数据0x12345678(字节1:0x78,字节2:0x56,字节3:0x34,字节4:0x12),存储在地址0x30001000开始的空间:
| 地址 | 大端模式 | 小端模式(主流) |
|---|---|---|
| 0x30001000 | 0x12 | 0x78 |
| 0x30001001 | 0x34 | 0x56 |
| 0x30001002 | 0x56 | 0x34 |
| 0x30001003 | 0x78 | 0x12 |
3. 支持的数据类型及对齐要求
ARM支持3种基本数据类型 ,且有严格的地址对齐要求 ,未对齐的地址访问会触发数据中止异常:
| 数据类型 | 位数 | 地址对齐要求 | 说明 |
|---|---|---|---|
| 字节(Byte) | 8位 | 无要求(任意地址) | 最基础类型,无对齐限制 |
| 半字(Halfword) | 16位 | 2字节对齐(地址最低位为0) | 如0x00001002,不可为0x00001001 |
| 字(Word) | 32位 | 4字节对齐(地址低两位为0) | 如0x00001004,不可为0x00001002 |
指令对齐要求 :ARM状态指令(32位)4字节对齐 ,Thumb状态指令(16位)2字节对齐。
七、ARM指令流水线技术
流水线技术是提升处理器执行效率 的核心手段,通过指令的并行执行 (取指、译码、执行重叠),让处理器在一个时钟周期内完成多条指令的不同阶段,ARM所有内核均采用流水线设计,流水线级数越高,执行效率越高。
1. 流水线的基本原理
将指令执行过程拆分为多个独立阶段 ,每个阶段由专门的硬件单元处理,多条指令的不同阶段可同时执行,例如3级流水线:取指→译码→执行,指令1执行时,指令2译码、指令3取指,大幅提升吞吐量。
2. 主流ARM内核的流水线级数(必考)
| ARM内核 | 流水线级数 | 存储架构 | 核心特点 |
|---|---|---|---|
| ARM7 | 3级 | 冯·诺依曼 | 入门级,低速低功耗 |
| ARM9 | 5级 | 哈佛 | 性能提升,指令并行性增强 |
| ARM10 | 6级 | 哈佛 | 新增发射/存储阶段 |
| ARM11 | 8级 | 哈佛 | 预取+多级累加,支持Cache |
| Cortex-A8 | 13级 | 哈佛 | 高性能,支持双流水线 |
| Cortex-A9 | 13级 | 哈佛 | 多核支持,嵌入式高端设备 |
3. 核心流水线解析(3级/5级,基础)
(1)ARM7的3级流水线(取指→译码→执行)
- 取指:从内存取出指令,放入流水线;
- 译码:解析指令含义,不占用数据通路;
- 执行:执行指令(运算/移位/读写寄存器),占用数据通路。
特点 :单周期完成一个阶段,3个时钟周期完成一条指令,但吞吐量为1条/时钟周期(重叠执行)。
(2)ARM9的5级流水线(取指→译码→执行→缓冲数据→回写)
哈佛架构支撑,指令取指和数据访问并行,新增缓冲数据 和回写阶段:
- 缓冲数据:处理LDR/STR指令的内存访问,非内存指令仅缓冲1个时钟周期,保证所有指令流水线流程一致;
- 回写:将运算结果/内存数据写回寄存器,分离执行和写回,提升并行性。
4. 流水线性能计算(考点,公式应用)
核心公式:
- 流水线启动时间:
级数 × 单个阶段时间(完成第一条指令的时间); - 总执行时间:
启动时间 + (指令数-1) × 单个阶段时间(后续指令每周期完成1条); - 最大吞吐量:
1 / 单个阶段时间(稳定后每周期完成1条)。
例题:5级流水线,每级4ns,执行100亿条指令的最短时间?
- 启动时间:5×4=20ns(完成5条指令);
- 稳定后每4ns完成1条,100亿条总时间:20 + (100亿-5)×4 ≈ 400亿ns = 40s(与课件答案一致)。
八、基于AMBA总线的ARM芯片及典型处理器
ARM内核本身不能直接作为芯片使用,需搭配总线、外设、存储 等模块,AMBA总线是ARM官方定义的片上总线标准,所有ARM芯片均基于AMBA总线设计,最后介绍主流的ARM芯片厂商和系列,对接实际开发。
1. AMBA总线体系结构
AMBA(Advanced Microcontroller Bus Architecture)是ARM为嵌入式芯片设计的片上总线标准 ,核心是分总线设计 ,兼顾高性能 和低功耗 ,分为系统总线 和外围总线两层:
| 总线类型 | 核心特点 | 代表标准 | 连接设备 |
|---|---|---|---|
| 系统总线 | 高带宽、高速度、多主设备 | AHB/AXI/ACE | ARM内核、SRAM、DMA、存储控制器 |
| 外围总线 | 低速度、低功耗、单主设备 | APB | 通用外设(UART/I2C/SPI/GPIO) |
总线桥接 :系统总线和外围总线通过桥接器连接,实现不同总线之间的协议转换和数据传输,保证芯片内部数据的有序流动。
2. 典型ARM嵌入式处理器芯片(主流厂商+系列,对接实际开发)
ARM内核由ARM公司设计,授权给各大芯片厂商二次开发,推出不同系列的芯片,主流厂商 为ST、NXP、TI、三星、新唐科技,其中ST的STM32系列 是嵌入式单片机的绝对主流(重点学习)。
(1)ST公司:STM32系列(Cortex-M内核,单片机主流)
基于Cortex-M0/M3/M4/M7内核,分多个子系列,适配不同场景:
- STM32F1:Cortex-M3,入门级主流,工业/消费类设备;
- STM32F4:Cortex-M4,带DSP/FPU,高性能;
- STM32F0:Cortex-M0,超低成本;
- STM32L系列:超低功耗,物联网设备。
STM32F10x命名规则 (必考,识别芯片参数):
如STM32 F 107 VCT6
- STM32:基于ARM的32位微控制器;
- F:产品类型(通用型);
- 107:子系列(互联型,带以太网/USB);
- V:引脚数(100脚);
- C:闪存容量(256KB);
- T:封装(LQFP);
- 6:温度范围(商业级,-40~85℃)。
(2)其他主流厂商
- NXP:LPC系列(Cortex-M0/M3/M4),工业控制;
- 三星:S3C/Exynos系列(Cortex-A),手机/开发板(如S3C2440);
- TI:OMAP系列(Cortex-A/R),车载/工业实时控制;
- 新唐科技:NUC系列(Cortex-M),国产低成本单片机。
九、本章核心考点与课后重点
1. 核心考点(考试/面试高频)
- 嵌入式四大内核流派,ARM的核心特点;
- ARMv7的三个子版本(M/R/A)及对应内核/应用;
- ARM的工作状态(Thumb-2)、经典7种工作模式(User/SVC/FIQ/IRQ);
- 经典ARM37个寄存器的组成,CPSR的核心位(I/F/T/M4~M0);
- 经典ARM7种异常的优先级,Cortex-M中断编号与向量地址计算;
- 大小端模式的定义,数据/指令的对齐要求;
- 流水线级数与性能计算,3级/5级流水线的阶段;
- STM32命名规则,AMBA总线的分层设计。