ARM Cortex-M CPU

目录

Cortex-M 处理器核心架构

整体架构框图

ARM Cortex-M 处理器核心架构:
┌─────────────────────────────────────────────────────────────┐
│                    Cortex-M Processor Core                   │
├─────────────────┬─────────────────────────┬─────────────────┤
│  Register Bank  │     Pipeline Stages      │  Memory Interface │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────┐ ┌─────┐ ┌─────┐ │ ┌─────────────┐ │
│ │    R0-R12   │ │ │ Fetch││Decode││Execute│ │    AHB-Lite │ │
│ │   General   │ │ │     │ │     │ │     │ │      Bus IF   │ │
│ │  Purpose    │ │ └─────┘ └─────┘ └─────┘ │               │ │
│ └─────────────┘ │                         │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────────────┐ │                 │
│ │    R13      │ │ │    NVIC             │ │ ┌─────────────┐ │
│ │   (SP)      │ │ │  Nested Vectored    │ │ │   MPU       │ │
│ │  MSP/PSP    │ │ │  Interrupt Ctrl     │ │ │(Memory Prot │ │
│ └─────────────┘ │ └─────────────────────┘ │ │  Unit)      │ │
│ ┌─────────────┐ │                         │ └─────────────┘ │
│ │    R14      │ │ ┌─────────────────────┐ │                 │
│ │    (LR)     │ │ │     SysTick Timer   │ │ ┌─────────────┐ │
│ └─────────────┘ │ └─────────────────────┘ │ │  Debug      │ │
│ ┌─────────────┐ │                         │ │  Interface  │ │
│ │    R15      │ │ ┌─────────────────────┐ │ └─────────────┘ │
│ │    (PC)     │ │ │     FPU             │ │                 │
│ └─────────────┘ │ │ (Cortex-M4/M7 etc.) │ │                 │
│ ┌─────────────┐ │ └─────────────────────┘ │                 │
│ │   xPSR      │ │                         │                 │
│ │(APSR+IPSR+  │ │                         │                 │
│ │ EPSR)       │ │                         │                 │
│ └─────────────┘ └─────────────────────────┘ └─────────────────┘
└─────────────────────────────────────────────────────────────┘

寄存器组详细结构

完整的寄存器体系

Cortex-M 完整寄存器集:
┌─────────────────────────────────────────────────────────────┐
│                     寄存器组 (Register Bank)                  │
├─────────────────────────┬───────────────────────────────────┤
│    通用寄存器           │        特殊功能寄存器               │
│   (16 × 32-bit)         │      (Special Registers)          │
├─────────────────────────┼───────────────────────────────────┤
│ R0  - 参数/结果/临时    │ xPSR - 程序状态寄存器              │
│ R1  - 参数/结果/临时    │   ├─ APSR (应用状态)              │
│ R2  - 参数/结果/临时    │   ├─ IPSR (中断状态)              │
│ R3  - 参数/结果/临时    │   └─ EPSR (执行状态)              │
│ R4  - 变量寄存器        │                                   │
│ R5  - 变量寄存器        │ PRIMASK   - 中断屏蔽              │
│ R6  - 变量寄存器        │ FAULTMASK - 故障屏蔽              │
│ R7  - 变量寄存器        │ BASEPRI   - 基本优先级            │
│ R8  - 变量寄存器        │ CONTROL   - 控制寄存器            │
│ R9  - 变量寄存器        │                                   │
│ R10 - 变量寄存器        │ MSP       - 主栈指针              │
│ R11 - 变量寄存器        │ PSP       - 进程栈指针            │
│ R12 - 临时寄存器        │                                   │
│ R13 - 栈指针 (SP)       │ NVIC寄存器 - 中断控制              │
│ R14 - 链接寄存器 (LR)   │ SCB寄存器 - 系统控制               │
│ R15 - 程序计数器 (PC)   │ MPU寄存器 - 内存保护               │
└─────────────────────────┴───────────────────────────────────┘

处理器流水线结构

三级流水线细节

Cortex-M 三级流水线详细结构:
┌─────────────────────────────────────────────────────────────┐
│                       3-Stage Pipeline                       │
├─────────────┬──────────────┬──────────────┬──────────────────┤
│  取指阶段   │   译码阶段   │   执行阶段   │     写回阶段     │
│  (Fetch)    │   (Decode)   │  (Execute)   │    (Write-back)  │
├─────────────┼──────────────┼──────────────┼──────────────────┤
│ ┌─────────┐ │ ┌──────────┐ │ ┌──────────┐ │                  │
│ │Instruction│ │ │Register │ │ │  ALU    │ │ 寄存器写入       │
│ │  Memory  │ │ │  Read   │ │ │(Arithmetic│ │ 内存写入        │
│ │          │ │ │         │ │ │ Logic Unit)│ │ 分支解析        │
│ └─────────┘ │ └──────────┘ │ └──────────┘ │                  │
│             │              │ ┌──────────┐ │                  │
│ PC → 地址   │ 指令解码     │ │ Address  │ │ 结果写回寄存器   │
│ 指令读取    │ 寄存器读取   │ │Calculation│ │ 或内存          │
│ 预取指缓冲  │ 产生控制信号 │ │  单元     │ │                  │
│             │              │ └──────────┘ │                  │
│ 更新PC      │              │ ┌──────────┐ │                  │
│             │              │ │ Memory   │ │                  │
│             │              │ │ Access   │ │                  │
│             │              │ └──────────┘ │                  │
└─────────────┴──────────────┴──────────────┴──────────────────┘

内存系统架构

总线矩阵和内存映射

Cortex-M 内存系统架构:
┌─────────────────────────────────────────────────────────────┐
│                    Cortex-M Memory System                    │
├─────────────────┬─────────────────────────┬─────────────────┤
│    Code Memory  │      SRAM/Data Memory    │   Peripherals   │
│   (Flash/ROM)   │        (Internal)        │    (AHB/APB)    │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │  Vector     │ │ │  Stack      │         │ │ GPIO        │ │
│ │  Table      │ │ │  Area       │         │ │ UART        │ │
│ │             │ │ │             │         │ │ SPI         │ │
│ └─────────────┘ │ └─────────────┘         │ │ I2C         │ │
│ ┌─────────────┐ │ ┌─────────────┐         │ │ Timer       │ │
│ │  Program    │ │ │  Heap       │         │ │ ADC/DAC     │ │
│ │  Code       │ │ │             │         │ └─────────────┘ │
│ │             │ │ └─────────────┘         │                 │
│ └─────────────┘ │ ┌─────────────┐         │ ┌─────────────┐ │
│                 │ │  .data      │         │ │ System      │ │
│                 │ │  Section    │         │ │ Peripherals │ │
│                 │ │             │         │ │ NVIC, SCB,  │ │
│                 │ │ ┌─────────┐ │         │ │ SysTick,    │ │
│                 │ │ │ .bss    │ │         │ │ MPU, etc.   │ │
│                 │ │ │ Section │ │         │ └─────────────┘ │
│                 │ │ └─────────┘ │         │                 │
└─────────────────┴─────────────────────────┴─────────────────┘
                             │
                    ┌────────┴────────┐
                    │   AHB-Lite      │
                    │   Bus Matrix    │
                    └─────────────────┘
                             │
                    ┌────────┴────────┐
                    │   Cortex-M      │
                    │   Processor     │
                    │     Core        │
                    └─────────────────┘

嵌套向量中断控制器 (NVIC)

NVIC 架构

NVIC (Nested Vectored Interrupt Controller) 架构:
┌─────────────────────────────────────────────────────────────┐
│                         NVIC 结构                           │
├─────────────────┬─────────────────────────┬─────────────────┤
│  中断优先级管理  │     中断悬挂与控制       │   异常处理       │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │ 优先级寄存器 │ │ │ 悬挂寄存器  │         │ │ 向量表偏移  │ │
│ │ PRIO0-PRIOx │ │ │ PEND0-PENDx │         │ │  寄存器     │ │
│ │   (8-bit    │ │ │             │         │ │             │ │
│ │  per IRQ)   │ │ └─────────────┘         │ └─────────────┘ │
│ └─────────────┘ │ ┌─────────────┐         │ ┌─────────────┐ │
│ ┌─────────────┐ │ │ 使能寄存器  │         │ │ 当前优先级  │ │
│ │ 优先级分组  │ │ │ EN0-ENx     │         │ │  寄存器     │ │
│ │  寄存器      │ │ │             │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│                 │ ┌─────────────┐         │                 │
│                 │ │ 活动寄存器  │         │                 │
│                 │ │ ACT0-ACTx   │         │                 │
│                 │ │             │         │                 │
│                 │ └─────────────┘         │                 │
└─────────────────┴─────────────────────────┴─────────────────┘

系统控制块 (SCB) 和 SysTick

系统控制架构

系统控制块 (SCB) 和 SysTick 定时器:
┌─────────────────────────────────────────────────────────────┐
│                   System Control Block                      │
├─────────────────┬─────────────────────────┬─────────────────┤
│   CPUID寄存器   │     异常控制寄存器        │   SysTick定时器  │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │ 处理器识别   │ │ │  SHPR2-3    │         │ │ 控制和状态  │ │
│ │  信息        │ │ │ (系统处理程 │         │ │   寄存器    │ │
│ │             │ │ │  序优先级)  │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │   ICSR      │ │ │  CCR        │         │ │  重载值     │ │
│ │(中断控制状态)│ │ │(配置和控制) │         │ │  寄存器     │ │
│ │             │ │ │             │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │  VTOR       │ │ │  SHCSR      │         │ │  当前值     │ │
│ │(向量表偏移) │ │ │(系统处理程 │         │ │  寄存器     │ │
│ │             │ │ │ 序控制状态) │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
└─────────────────┴─────────────────────────┴─────────────────┘

内存保护单元 (MPU)

MPU 架构

MPU (Memory Protection Unit) 内存保护架构:
┌─────────────────────────────────────────────────────────────┐
│                      MPU 结构                              │
├─────────────────┬─────────────────────────┬─────────────────┤
│   区域寄存器    │      属性控制            │   故障检测       │
│   (8-16 regions)│                         │                 │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │  RBAR0-15   │ │ │  MPU_CTRL   │         │ │  MMAR       │ │
│ │ (区域基地址) │ │ │  (控制)     │         │ │(内存管理地址)│ │
│ │             │ │ │             │         │ │  寄存器     │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │  RLAR0-15   │ │ │  MPU_RNR    │         │ │  BFAR       │ │
│ │ (区域属性)   │ │ │ (区域编号)  │         │ │(总线故障地址)│ │
│ │             │ │ │             │         │ │  寄存器     │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐         │                 │
│ │ 区域大小     │ │ │  MPU_RASR  │         │                 │
│ │  和属性      │ │ │ (区域属性)  │         │                 │
│ │             │ │ │             │         │                 │
│ └─────────────┘ │ └─────────────┘         │                 │
└─────────────────┴─────────────────────────┴─────────────────┘

调试系统架构

调试接口和组件

Cortex-M 调试系统:
┌─────────────────────────────────────────────────────────────┐
│                      Debug System                           │
├─────────────────┬─────────────────────────┬─────────────────┤
│   调试接口       │      调试组件            │   跟踪单元       │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │   SWD       │ │ │ 断点单元     │         │ │   ITM       │ │
│ │ (Serial Wire│ │ │ (FPB)       │         │ │(指令跟踪)    │ │
│ │   Debug)    │ │ │             │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │   JTAG      │ │ │ 数据观察点  │         │ │   DWT       │ │
│ │ (可选)      │ │ │  (DWT)      │         │ │(数据跟踪)    │ │
│ │             │ │ │             │         │ │             │ │
│ └─────────────┘ │ └─────────────┘         │ └─────────────┘ │
│                 │ ┌─────────────┐         │ ┌─────────────┐ │
│                 │ │ ROM表       │         │ │   ETM       │ │
│                 │ │ (调试识别)  │         │ │(嵌入式跟踪)  │ │
│                 │ │             │         │ │             │ │
│                 │ └─────────────┘         │ └─────────────┘ │
└─────────────────┴─────────────────────────┴─────────────────┘

浮点单元 (FPU) - Cortex-M4/M7

FPU 架构

浮点单元 (FPU) - 可选组件:
┌─────────────────────────────────────────────────────────────┐
│                  Floating Point Unit (FPU)                  │
├─────────────────┬─────────────────────────┬─────────────────┤
│  浮点寄存器文件  │     浮点运算单元          │  浮点状态和控制   │
│                 │                         │                 │
│ ┌─────────────┐ │ ┌─────────────┐         │ ┌─────────────┐ │
│ │   S0-S31    │ │ │  浮点加法器  │         │ │  FPSCR      │ │
│ │ (32-bit     │ │ │             │         │ │(浮点状态控制)│ │
│ │ 单精度)      │ │ └─────────────┘         │ │  寄存器     │ │
│ └─────────────┘ │ ┌─────────────┐         │ └─────────────┘ │
│ ┌─────────────┐ │ │  浮点乘法器  │         │                 │
│ │  D0-D15     │ │ │             │         │                 │
│ │ (64-bit     │ │ └─────────────┘         │                 │
│ │ 双精度)      │ │ ┌─────────────┐         │                 │
│ └─────────────┘ │ │ 浮点除法/    │         │                 │
│                 │ │ 平方根单元   │         │                 │
│                 │ │             │         │                 │
│                 │ └─────────────┘         │                 │
└─────────────────┴─────────────────────────┴─────────────────┘