尧图精选

微机原理与接口技术 · 第2章《Cortex-M3 处理器》知识点全梳理

🕒 发布时间:2026/10/1 6:59:03 📁 来源:尧图网络
微机原理与接口技术 · 第2章《Cortex-M3 处理器》知识点全梳理本文整理自福州大学《微机原理与接口技术》吴衔誉教授第二章课件系统讲解 Cortex-M3 的内核架构、三级流水线、寄存器组织、工作模式、堆栈机制、存储器管理、异常与中断、复位序列八大板块。目录一、Cortex-M3 处理器简介及其组件二、三级流水线三、寄存器组织四、工作模式与工作等级五、堆栈机制六、存储器管理七、异常与中断八、复位序列本章小结与思考题一、Cortex-M3 处理器简介及其组件1.1 一句话定位Cortex-M3 内核基于哈佛结构的三级流水线采用ARMv7-M架构使用Thumb-2 指令集集成了分支预测、单周期乘法、硬件除法等功能。它包含内核和调试系统再配上时钟、存储器、外设与 I/O 组件构成一颗低功耗、门数少、中断延迟短、支持多级嵌套的 32 位处理器。1.2 冯·诺依曼结构 vs 哈佛结构维度冯·诺依曼结构哈佛结构存储器程序与数据合并在一起程序与数据分开存放、独立编址总线指令与数据共用一条总线指令、数据总线各自独立4 条总线取指与访存串行存在「冯·诺依曼瓶颈」可并行读取吞吐率更高典型应用PC 处理器i3/i5/i7嵌入式 / DSP关键辨析考试高频冯·诺依曼结构指令与数据共用一条数据总线取指与读数不能完全并行。哈佛结构程序和数据分存两个独立存储器有各自的地址总线和数据总线取指和读数据可并行。1.3 改良哈佛Cortex-M3 的真实身份Cortex-M3 引出I-Code取指和D-Code读数据两条独立总线内核侧取指与访数可以并行但从外部看它仍然是统一的 4GB 线性地址空间Flash 与 SRAM 统一编址。因此它被称为「改良哈佛」或「哈佛总线架构」——哈佛式总线 统一编址两种说法指同一件事考试写哪个都不算错。为什么 I-Code 和 D-Code 都连到代码区架构指令/数据存哪和总线工程通路是两件事。纯哈佛要求物理分开纯冯氏只有一条总线。Cortex-M3 走中间路线内核侧通路分开可并行但地址统一编址。所以 D-Code 能直接读 Flash 里的常量与查表数据无需额外拷贝在 SRAM 里跑程序时取指也可走系统总线。1.4 三条总线 总线矩阵总线用途默认映射地址I-Code指令从代码区取指令、取中断向量只读0x00000000 ~ 0x1FFFFFFF代码区D-Code数据读写代码区的数据、调试访问同上代码区系统总线System访问 SRAM、片上外设、片外设备经总线矩阵仲裁0x20000000 ~ 0xDFFFFFFF 等外设总线PPB访问专用外设调试 / 系统控制部件0xE0040000 ~ 0xE00FFFFF三条都是32 位 AHB-Lite 总线可并行工作。中间有一组**总线矩阵Bus Matrix**作为交叉开关不同主设备访问不同从设备时可并行访问同一从设备时按优先级仲裁建议 D-Code 高于 I-CodeSystem 内部数据 取指 调试。此外还有APB 外设总线通过 AHB-APB 桥连接低速外设。1.5 两大核心组件组件作用NVIC嵌套向量中断控制器与 CPU 紧耦合中断发生时自动从向量表取入口地址并直接调用大幅缩短中断延迟SysTick系统节拍定时器24 位倒计时计数器产生定时中断睡眠模式下也能工作可作为系统时钟基准1.6 Cortex-M 家族横向对比M0 / M0 / M1 / M3 / M4特性M0M0M1M3M4ARM 架构v6-Mv6-Mv6-Mv7-Mv7E-M总线冯氏冯氏冯氏哈佛哈佛流水线3 层2 层3 层3 层3 层Thumb-2部分部分部分全部全部32×32 乘法64 位结果否否否是是除法否否否是是DSP 指令否否否否是单精度浮点否否否否可选记忆点Cortex-M3 是第一个采用 ARMv7-M 哈佛总线 完整 Thumb-2 硬件除法的主流 M 系列内核。二、三级流水线Cortex-M3 执行指令时采用三级流水线取指Fetch→ 译码Decode→ 执行Execute。流水线充满后取指、译码、执行并行推进平均每个周期完成一条指令。16 位指令居多时Cortex-M3 一次取 32 位2 条 16 位指令因此会每隔一个周期取一次指总线接口可歇一拍。流水线清洗Flush遇到分支、异常或断点时已取指 / 译码但尚未执行的指令被丢弃跳转到目标地址重新取指这个过程叫流水线的清洗。分支预测带分支预测时遇到分支指令能自动预测跳转方向从预测方向取指保证性能不骤降。辨析题遇到分支 / 异常丢弃已取指结果的动作叫「流水线清洗Pipeline Flush」不是阻塞Stall。阻塞是流水线暂停等待清洗是丢弃并重启。三、寄存器组织3.1 通用寄存器R0–R15寄存器名称说明R0–R7低组寄存器所有指令均可访问32 位复位后初值随机R8–R12高组寄存器只有少数 16 位 Thumb 指令能访问32 位指令不受限R13SP堆栈指针逻辑上只有一个 R13但有MSP / PSP两个物理寄存器R14LR链接寄存器调用子程序时硬件自动保存返回地址返回时把 LR 复制到 PCR15PC程序计数器指向下一条要执行的指令读 PC 返回「当前指令地址 4」LR 工作机制main … BL function1 ; PC function1同时 LR main 中下一条指令地址 function1 … BX LR ; 函数返回PC 要点向 PC 写数据会引起程序跳转但不更新 LR。PC 的第 0 位LSB指示 ARM/Thumb 状态Cortex-M3 指令属 Thumb-2至少半字对齐LSB 恒读回 0写 PC 必须保证 LSB 1表明 Thumb 状态写 0 会试图进入 ARM 模式并触发 Fault。3.2 特殊功能寄存器只能用 MRS / MSR 访问名称符号功能程序状态寄存器xPSR记录 ALU 标志、执行状态、当前服务的中断号中断屏蔽PRIMASK置 1 关闭所有可屏蔽中断只剩 NMI 和硬 Fault中断屏蔽FAULTMASK置 1 关闭所有 Fault只剩 NMI中断屏蔽BASEPRI屏蔽优先级不高于某阈值的中断控制寄存器CONTROL定义特权级别、选择使用哪个堆栈指针xPSR 的三位段子寄存器关键位含义APSRN/Z/C/V/Q运算结果标志负数、零、进位/借位、溢出、粘着饱和IPSR异常号位 4:0当前正在服务的异常编号EPSRT位 24、ICI/IT26:25、15:10T 位恒为 1仅支持 ThumbICI/IT 用于可中断-可继续指令与 If-Then 状态ICI/IT 重叠注意EPSR 的 ICI 区与 IT 区共用同一组位。IT 块内的多寄存器 LDM/STM不可中断-可继续IT 优先。中断屏蔽三件套寄存器作用默认PRIMASK1 位置 1 关所有可屏蔽中断只剩 NMI 硬 Fault0允许FAULTMASK1 位置 1 仅 NMI 可响应其余全禁0允许BASEPRI最多 9 位优先级 ≥ 该值的中断被关闭0 表示不关闭0快速开关中断专用指令CPSID I关中断/CPSIE I开中断/CPSID F关 Fault/CPSIE F开 Fault。MRS / MSR 对照指令全称方向MRSMove to Register from Special register特殊寄存器 → 通用寄存器读取MSRMove to Special register from Register通用寄存器 → 特殊寄存器写入四、工作模式与工作等级Cortex-M3 支持两种工作模式和两个工作等级运行时段特权级用户级处理Handler模式异常服务例程处理模式错误用法线程Thread模式主程序线程模式线程模式复位后默认进入线程模式、特权级可访问所有存储器、执行所有指令。特权级 → 用户级置位CONTROL[0] 1。用户级不能再改回特权级用户级写CONTROL[0]是非法的会触发 Fault。触发异常 → 进入处理模式特权级异常返回 → 回到线程模式。为什么要分两级硬件层面限制不受信任、未调试好的程序随意配置要害寄存器NVIC、MPU、SCB、STK 等提高系统可靠性。某段用户代码出错时也不会破坏系统其他部分。五、堆栈机制5.1 向下生长的满栈堆栈由连续内存 栈顶指针SP组成满足先进后出FIFO→FILO。Cortex-M3 使用**「向下生长的满栈」SP 总是指向最后一个已压入的 32 位值**地址向低处增长。按字32 位操作每次 PUSH/POP 都自增 / 自减4。PUSHSP 先减 4再存入数据。POP先读出 SP 所指数据SP 再增 4。PUSH/POP 必须成对使用注意进出栈顺序。5.2 双堆栈指针MSP / PSP指针全称用途MSPMain Stack Pointer系统内核、异常服务例程、需特权访问的代码使用复位默认PSPProcess Stack Pointer常规用户应用程序代码使用一个公司两张办公桌的比喻内核系统核心团队和用户程序普通项目组若共用一张桌子一个堆栈用户程序弄乱堆栈就会拖垮整个系统。于是给内核专用的 MSP、给用户程序的 PSP 两张独立桌子。CONTROL[1] 决定用户用哪张桌子。配置适用场景线程模式堆栈异常模式堆栈安全性CONTROL[1]0简单裸机 / 前后台MSPMSP低共享CONTROL[1]1RTOS 多任务PSPMSP高任务隔离进入异常时硬件自动从 PSP 切到 MSP返回时切回 PSP。RTOS 可为每个任务分配独立 PSP实现任务隔离一个任务崩溃不影响其他任务。R13 最低两位被硬件接 0堆栈操作 4 字节对齐。六、存储器管理6.1 4GB 统一存储器映射Cortex-M3 支持访问4GB空间映射预定义、固定保证不同 M3 芯片间代码可移植。地址区间大小用途0x00000000 ~ 0x1FFFFFFF512 MB代码Flash / ROM0x20000000 ~ 0x3FFFFFFF512 MB片上 SRAM0x40000000 ~ 0x5FFFFFFF512 MB片上外设0x60000000 ~ 0x9FFFFFFF1.0 GB片外 RAM0xA0000000 ~ 0xDFFFFFFF1.0 GB片外外设0xE0000000 ~ 0xFFFFFFFF—系统级Cortex-M3 内部 AHB/APB 私有外设特点预定义映射、支持位带、支持非对齐访问与互斥访问、支持大小端。6.2 位带操作Bit Banding位带让你用普通 LDR/STR 指令对单一比特做原子读写无需「读-改-写」组合。位带区支持位带操作的地址区SRAM 0x20000000~0x200FFFFF外设 0x40000000~0x400FFFFF。位带别名区位带区中每个位映射到别名区的一个字32 位该字只有最低位有效。膨胀关系1 MB 位带区 → 32 MB 别名区。别名地址公式SRAM 区AliasAddr 0x22000000 ((A - 0x20000000) × 32) (n × 4)外设区AliasAddr 0x42000000 ((A - 0x40000000) × 32) (n × 4)A 为字节地址n 为位序号 07例0x20000004 的 bit2 → 别名 0x22000000 (4×32) (2×4) 0x22000084 ✓传统 vs 位带写 bit2 置 1; 传统3 条指令 读-改-写非原子 LDR R0, 0x20000000 LDR R1, [R0] ORR.W R1, #0x4 STR R1, [R0] ; 位带1 条 STR原子操作 LDR R0, 0x22000008 MOV R1, #1 STR R1, [R0]位带价值原子操作不受外部事件干扰可直接控制 GPIO 每盏 LED可把多个布尔量打包进一个字却像普通内存一样独立访问多任务中可实现共享资源的互锁访问。互锁多任务 / 主程序中断同时想访问同一共享资源时同一时刻只允许一个任务成功访问其余等待。位带的原子性天然支持这一点。6.3 端模式大小端Cortex-M3 同时支持小端和大端绝大多数芯片用小端高位字节存高地址。0x12345678 存于 0x4000 起小端0x400078, 0x400156, 0x400234, 0x400312大端0x400012, 0x400134, 0x400256, 0x400378七、异常与中断7.1 基本概念中断程序执行中遇突发事件需立即处理CPU 暂停当前程序转去处理处理完返回。异常打断程序顺序执行的事件外部中断、SVC、Reset 等都算异常中断只是异常的一种。中断与调子程序的区别中断发生时刻随机且既保护断点又保护现场入口地址由硬件确定调子程序是事先安排、可只保护断点、入口由程序编排。中断技术意义及时处理随机事件、解决快慢设备矛盾CPU 与外设并行、具备故障处理能力。7.2 NVIC 功能支持256 种异常和中断编号 1–15 为系统异常≥16 为外部中断。向量中断响应时自动从向量表按中断号取 ISR 入口地址。支持动态优先级调整、可嵌套、中断可屏蔽、延迟短。7.3 异常编号与优先级系统异常清单节选编号类型优先级简介0无—正常状态1复位-3最高复位2NMI-2不可屏蔽中断3硬 Fault-1所有被除能 Fault 上访处4MemManage可编程MPU / 非法访问5总线 Fault可编程总线错误响应6Usage Fault可编程程序错误11SVCall可编程系统服务调用14PendSV可编程可悬挂请求用于上下文切换15SysTick可编程系统节拍定时器优先级规则数值越小优先级越高高优先级可抢占低优先级。复位 / NMI / 硬 Fault 三个系统异常有固定负优先级高于一切可编程异常。原则上支持 3 个固定高级优先级 最多 256 级可编程、128 级抢占但多数芯片会裁掉低端有效位实际支持的级数更少如只用 3 位 → 8 级。优先级分组分为抢占优先级和副优先级副优先级至少 1 位抢占最多 7 位。例3 位中 2 位做抢占 → 4 级抢占每级内 2 个副优先级。7.4 向量表向量表用于在中断响应时查出对应 ISR 入口地址。起始地址对齐规则向量数向上取 2 的整数次幂起始地址对齐到「次幂 × 4」边界。例32 个中断 → 共 48 个向量 → 上取到 64 → 起始地址须被 64×4 256 整除如 0x0、0x100、0x200…。7.5 中断挂起Pending机制当前中断优先级较低CPU 正处理更高优先级或可屏蔽时该中断被置Pending标记排队等待。即使中断源撤销了请求信号只要 Pending 未清除且它成为最高等待者仍会被响应防止短脉冲中断丢失。响应前若软件清除 Pending则本次请求被撤销。服务例程开始执行时Pending 被硬件自动清除服务中可自我重新挂起。多个脉冲视为一次响应前以多个脉冲呈现只算一次请求多余脉冲忽略。7.6 中断的具体行为硬件自动完成响应中断时Cortex-M3硬件自动压栈 8 个寄存器xPSR、PC、LR、R12、R3、R2、R1、R0。若当前用 PSP 则压入 PSP进入服务例程后一律用 MSP。完整流程取向量从向量表取 ISR 入口与入栈并行。更新寄存器选 SP、更新 SP/LR/PC。自动入栈保存 8 个寄存器现场。执行 ISR。异常返回出栈恢复寄存器NVIC 活动位清除。触发返回指令BX LRLR EXC_RETURN 时、POP [PC]、LDR/LDM把 PC 作目的寄存器。7.7 中断嵌套控制通过优先级实施嵌套自动入/出栈保护寄存器嵌套时不损坏现场。相同异常的不可重入性异常处理期间同级或低优先级被阻塞同一异常须上次服务完才能响应新请求。7.8 高级中断技术咬尾Tail-chaining连续异常处理时复用上一次已 PUSH 的现场本次完成才统一恢复前后只做一次入/出栈。迟来Late arrival入栈阶段尚未执行 ISR 时收到更高优先级请求则本次入栈转为高优先级中断所用先执行高优先级 ISR。7.9 异常返回值EXC_RETURN进入异常后LR 被自动设为特殊值EXC_RETURN值含义0xFFFFFFF1返回处理模式使用 MSP0xFFFFFFF9返回线程模式使用 MSP0xFFFFFFFD返回线程模式使用 PSP0xFFFFFFF0 ~ 0xFFFFFFFF 被标记为「非可执行区域」不能作返回地址。7.10 Fault 类异常Fault诱因总线 FaultAHB 接口传送时收到错误响应存储器管理 Fault违反 MPU 保护策略等用法 Fault未定义指令、试图进 ARM 状态、无效中断返回、未对齐访问等硬 Fault上述三类 Fault 上访的结果应对复位 / 恢复问题 / 中止任务。各 FSR 状态寄存器写 1 清除处理后务必清除否则下次误判。八、复位序列程序映像从0x00000000开始开头就是向量表。向量表头 4 字节存MSP 初始值地址 0x00000004 存复位向量PC 初始值LSB 必须为 1。复位流程上电离开复位 → 从 0x0 取 MSP 初值 → 从 0x4 取复位向量Thumb 状态LSB1→ 从该地址取指执行。与多数架构不同传统单片机 0 地址放一条跳转指令Cortex-M3 的 0 地址放 MSP 初值紧跟着向量表向量是 32 位地址不是跳转指令。例0x00000004 存 0x00000101 → 因 LSB1 表示 Thumb实际入口地址为0x00000100。本章小结核心知识地图Cortex-M3 架构哈佛总线 统一编址、ARMv7-M、Thumb-2、三大总线 矩阵三级流水线取指/译码/执行、清洗、分支预测寄存器R0–R15、MSP/PSP、xPSR 三段、PRIMASK/FAULTMASK/BASEPRI、CONTROL、MRS/MSR工作模式与等级Handler/Thread、特权/用户、切换规则堆栈向下满栈、双堆栈保护、PUSH/POP存储器管理4GB 映射、位带原子操作与公式、大小端异常与中断NVIC、256 异常、优先级分组、Pending、自动压栈 8 寄存器、咬尾/迟来、EXC_RETURN复位序列向量表、MSP/PC 初始化。本文由课程课件与讲稿整理供学习交流使用。如需转载或用于教学请注明出处。欢迎在评论区交流讨论。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →