从流水线到低功耗:Cortex-M0 + 如何成为微控制器的 “性价比之王” Cortex-M0 内核内核是微控制器芯片的核心运算大脑​芯片的所有程序执行、数据运算、任务调度最终都由内核完成内核直接决定了芯片的核心能力边界比如运算速度、功耗水平、能支持的功能​是判断芯片 “适合什么场景”比如低功耗设备 / 复杂运算设备、“能做什么任务” 的基础。ARM Cortex-M0 处理器是一款支持 ARMv6M 指令集的超低功耗、低成本微处理器。芯片具有如下特性使用的是 2 级流水线结构(取指 预解析解析 执行)支持单周期 I/O 访问“单周期” 指访问 GPIO 等外设时只需要 1 个时钟周期就能完成一次读写操作IO 访问速度极快、响应延迟极低适合对 IO 时序要求高的场景比如快速控制 LED 闪烁、高频信号输出。集成睡眠模式的低功耗睡眠模式是处理器 “临时暂停工作、降低能耗” 的状态核心会关闭部分电路、降低时钟频率只保留必要的唤醒检测功能大幅减少芯片空闲时的功耗是电池供电设备比如智能手环、无线传感器的核心需求。具有确定性的、固定延迟、中断处理的能力“确定性” 是指中断响应时间是固定的无论处理器当前在做什么处理中断的延迟从收到中断信号到开始执行中断程序的时间不会忽长忽短在实时系统”比如工业控制、电机调速中能保证紧急任务如传感器触发被及时、稳定响应不会因延迟波动导致故障。Thumb-2 技术Thumb-2 是 ARM 的指令集技术它混合了 16 位短指令和 32 位长指令普通 ARM 指令是 32 位既让代码体积更小16 位指令占空间少又能保留 32 位指令的执行效率平衡了 “代码存储占用” 和 “执行速度”。32 位单周期硬件乘法器“硬件乘法器” 是芯片里专门负责乘法运算的硬件模块区别于 “软件乘法”—— 用代码模拟乘法“单周期” 指一次 32 位数字的乘法只需要 1 个时钟周期就能完成让乘法运算的速度大幅提升软件乘法可能需要十几个周期适合需要快速计算的场景比如数据滤波、简单数学运算。C 应用程序与二进制接口兼容的异常模型允许使用纯 C 函数作为中断处理程序“异常模型” 是处理中断、故障等突发情况的规则这个特性让开发者可以​用 C 语言写中断处理程序​不用写底层汇编代码大幅降低了中断程序的开发难度让普通开发者不用精通汇编也能轻松编写中断逻辑。使用等待中断WFI、等待事件WFE指令或从退出时中断休眠返回功能的低功率休眠模式输入这是进入 “低功耗睡眠模式” 的触发方式WFIWait For Interrupt执行后核心进入睡眠直到收到中断信号才唤醒WFEWait For Event执行后核心进入睡眠直到收到事件信号才唤醒让开发者能灵活控制芯片进入低功耗状态进一步降低空闲时的能耗延长电池设备的续航。常用于以下应用一般的数据处理和 I/O 控制任务超低功耗应用8 位/16 位微控制器的更新/替代低成本 ASIC、ASSP系统单元框图如下图 2.16 ARM Cortex-M0 内核系统单元架构框图我们可以看到内核正常运行工作需要不同模块负责给内核提供电源、时钟、中断、调试等基础保障让内核稳定运行​功耗与时钟 PMU​给内核提供不同的时钟信号HCLK/FCLK/DCLK同时控制内核的功耗状态比如休眠时降低时钟或断电是实现 “超低功耗” 的核心模块。​复位控制 RESET CTRL​负责内核的重启当程序卡死、芯片异常时触发复位让内核回到初始状态重新运行。内存与访问 MPU Bus Interface​MPU内存保护单元​管理内核的内存访问权限防止程序错误访问非法内存比如应用程序碰内核专属内存提升系统稳定性​Bus Interface总线接口​是内核与芯片其他模块SRAM、外设通信的 “桥梁”—— 内核通过它读内存、控外设。中断与低功耗 NVIC WIC​嵌套向量中断控制器 NVIC​管理中断请求IRQ调度中断的优先级让内核及时响应紧急任务​唤醒中断控制器 WIC​是 “休眠唤醒器”—— 内核深度休眠时普通中断无法唤醒WIC 能检测中断信号把内核从低功耗状态拉回工作状态。调试断点/观察点单元 DAP​断点/观察点单元​调试程序的 “抓手”—— 断点让内核执行到指定代码时暂停观察点让内核访问指定内存 / 寄存器时暂停方便找程序 BUG​DAP调试访问端口​是外部调试器比如电脑与内核通信的入口通过 SWD 接口串行线调试可以控制内核运行、查看内核状态。