ARM M3核心介绍

发布于:2025-03-08 ⋅ 阅读:(176) ⋅ 点赞:(0)

ARM Cortex-M3 核心介绍

Cortex-M3 是 ARM 设计的一款高效低功耗的 32 位嵌入式处理器,基于 ARMv7-M 体系架构,主要用于工业控制、物联网、汽车电子、医疗设备等嵌入式应用


1. Cortex-M3 的特点

特点 描述
高性能 最高主频可达 100-200MHz,单周期执行 Thumb-2 指令
低功耗 适用于低功耗应用,支持睡眠和深度睡眠模式
Thumb-2 指令集 仅支持 Thumb-2 指令(无 ARM 32 位指令),提高代码密度
中断嵌套 内置 NVIC(嵌套向量中断控制器),支持 256 级优先级
向量异常机制 硬件支持异常处理,自动保存和恢复寄存器
MPU(可选) 支持存储器保护单元,增强安全性
无 MMU 不支持内存管理单元(MMU),适用于无操作系统环境

2. Cortex-M3 的寄存器

(1)通用寄存器

Cortex-M3 处理器有 16 个通用寄存器(R0-R15):

寄存器 别名 描述
R0-R3 低寄存器 主要用于参数传递、函数返回值
R4-R11 高寄存器 保存局部变量(需手动保存)
R12 IP 临时存储
R13 (SP) 堆栈指针 MSP(主堆栈)或 PSP(进程堆栈)
R14 (LR) 链接寄存器 存储函数或异常返回地址
R15 (PC) 程序计数器 存储当前执行指令的地址

说明

  • R0-R3 用于参数传递(函数调用时)。
  • R4-R11 用于存储局部变量,需要手动保存和恢复。
  • R12 作为临时变量,不需要手动保存。
  • R13(SP) 代表堆栈指针(有 MSP 和 PSP 两种)。
  • R14(LR) 存储函数或异常返回地址。
  • R15(PC) 存储当前执行的指令地址。

(2)特殊寄存器

Cortex-M3 有 3 个重要的特殊寄存器:

寄存器 描述
xPSR(程序状态寄存器) 存储指令状态、异常号、标志位
PRIMASK(中断屏蔽寄存器) 只允许最高优先级中断
BASEPRI(优先级屏蔽寄存器) 屏蔽低于特定优先级的中断
FAULTMASK(故障屏蔽寄存器) 屏蔽所有中断(包括 HardFault)
CONTROL(控制寄存器) 切换 MSP / PSP 和特权 / 非特权模式
xPSR(程序状态寄存器)结构
名称 作用
31 N 负数标志
30 Z 零标志
29 C 进位标志
28 V 溢出标志
27-25 - 保留
24 T Thumb 状态(固定为 1)
23-16 ISR_NUMBER 当前异常号
15-0 - 保留

说明

  • ISR_NUMBER:存储当前运行的中断或异常号。
  • T 位固定为 1:Cortex-M3 仅支持 Thumb 指令集

3. Cortex-M3 的异常与中断

Cortex-M3 支持 16 个系统异常 + 240 个外部中断

(1)异常类型

异常号 异常名称 优先级(越小优先级越高) 描述
-1 复位(Reset) -3 复位时触发
0 不可屏蔽中断(NMI) -2 最高优先级
1 硬故障(HardFault) -1 硬件错误(内存、总线、指令异常)
2 存储器管理(MemManage) 可配置 MPU 访问错误
3 总线错误(BusFault) 可配置 总线访问异常
4 用法错误(UsageFault) 可配置 指令执行错误
5-10 保留 - -
11 SVCall(系统调用) 可配置 SVC 指令触发
12 调试监控(DebugMonitor) 可配置 调试异常
13 PendSV(任务切换) 可配置 用于 RTOS 任务切换
14 SysTick(系统定时器) 可配置 用于系统滴答定时
15+ 外部中断(IRQ) 可配置 通过 NVIC 控制

(2)异常处理流程

当 Cortex-M3 发生异常时,执行以下步骤:

  1. 硬件保存现场

    • 自动将 R0-R3、R12、LR、PC、xPSR 压入堆栈
    • 切换到异常模式
    • 关闭中断(NVIC 管理)
  2. 跳转到异常向量

    • Cortex-M3 使用向量表(0x00000000 或 0x08000000)
  3. 执行异常处理代码

    • 进入异常处理函数
  4. 异常返回

    • 从堆栈恢复 R0-R3、R12、LR、PC、xPSR
    • 继续执行原来的代码

(3)中断嵌套与 NVIC

NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器) 负责管理中断:

  • 支持 256 级中断优先级
  • 支持中断嵌套
  • 支持动态调整优先级

示例:使能外部中断

NVIC_EnableIRQ(EXTI0_IRQn);  // 使能 EXTI0 中断
NVIC_SetPriority(EXTI0_IRQn, 2);  // 设置优先级为 2

4. 总结

  1. Cortex-M3 是 高效低功耗 处理器,支持 Thumb-2 指令集
  2. 具有 16 个通用寄存器 + xPSR、CONTROL、PRIMASK 等特殊寄存器
  3. 支持 16 个系统异常 + 240 个外部中断,通过 NVIC 控制
  4. 异常处理由硬件自动保存现场,减少中断处理时间。
  5. 支持 RTOS(实时操作系统),使用 PendSV 进行任务切换。

如果你有具体问题,可以继续探讨!😃


网站公告

今日签到

点亮在社区的每一天
去签到