2. PIC32硬件架构与实时性基础
PIC32系列MCU的核心是MIPS M4K/M-Class内核,它决定了指令执行节拍、中断响应延迟以及外设访问的确定性。理解实时性,不能只看主频数字,而要把内核流水线、中断控制器、DMA、定时器和外设总线放在同一条响应路径上分析。本节围绕这条路径展开,先建立结构认识,再落到可配置、可测量的参数上。
MIPS M4K/M-Class内核的执行特征
M4K与M-Class均采用MIPS32架构,具备5级流水线:取指、译码、执行、访存、写回。理想情况下每个周期完成一条指令,但分支跳转、访存等待和中断插入都会打断流水。PIC32的实时性优势在于:大多数指令为单周期,且中断向量表可重定位,使中断服务程序(ISR)入口地址固定,减少跳转开销。M-Class在M4K基础上强化了中断优先级和向量化中断能力,允许高优先级中断直接跳转到专属向量,避免软件查询中断源。
需要区分两个概念:指令周期与系统时钟。PIC32的CPU时钟通常由系统时钟经分频得到,例如系统时钟80 MHz、CPU时钟80 MHz时,单周期指令耗时12.5 ns。若外设总线时钟为40 MHz,则访问外设寄存器可能需要多个等待周期。实时响应时间必须按最坏情况估算,而不是按平均情况。
中断控制器与响应路径
PIC32的中断控制器支持多级优先级和子优先级。以PIC32MX系列为例,中断源可分配到7个优先级(1最低,7最高),同优先级内再分4个子优先级。当多个中断同时到达时,硬件按优先级和子优先级裁决,高优先级可抢占低优先级ISR。中断响应路径大致为:外设事件置位中断标志→中断控制器裁决→CPU保存现场→跳转向量→执行ISR→清除标志→恢复现场。
其中,现场保存和恢复是固定开销。MIPS内核在中断入口会保存部分寄存器,若ISR使用更多寄存器,需由软件继续保存。因此,ISR应尽量短小,只做标志清除、数据搬运和事件通知,把耗时处理放到主循环或任务中。对于实时性要求高的信号,可让ISR直接写入缓冲区,由DMA或主循环后续处理。
DMA与定时器对实时性的贡献
DMA的价值在于把数据搬运从CPU手中剥离。以ADC连续采样为例,若每次转换完成都触发中断,CPU将频繁进出ISR,开销随采样率线性增长。配置DMA后,ADC结果可直接写入内存缓冲区,仅在缓冲区半满或全满时产生一次中断。这样CPU可以把时间用于控制算法,而不是搬运数据。
定时器则提供时间基准。PIC32的定时器可工作在定时、计数、输入捕获和输出比较模式。实时系统中常用周期定时器产生固定节拍,例如1 kHz控制周期。假设系统时钟80 MHz,预分频器设为1:64,则定时器计数频率为1.25 MHz,周期0.8 μs。要得到1 ms周期,重装载值为1000。配置时需注意:定时器中断优先级应高于非实时任务,但低于故障保护中断。
外设总线与等待周期
PIC32的外设总线时钟PBCLK由系统时钟分频得到,常见配置为系统时钟的一半。外设寄存器访问可能插入等待周期,尤其是当PBCLK低于CPU时钟时。实时响应路径中,ISR若频繁读写外设寄存器,等待周期会累积成可观的延迟。因此,关键外设应尽量分配较高PBCLK,或把批量数据交给DMA。
下面给出一个中断优先级分配的参考示例,用于说明如何把不同实时性要求的事件分层:
| 中断源 | 优先级 | 子优先级 | 典型响应要求 |
|---|---|---|---|
| 故障保护(过流/过压) | 7 | 3 | 立即关断PWM,延迟<1 μs |
| 控制周期定时器 | 6 | 2 | 固定1 ms节拍,抖动<5 μs |
| ADC DMA完成 | 5 | 1 | 缓冲区满后处理,延迟<50 μs |
| 通信接收(UART/SPI) | 4 | 0 | 按协议超时,延迟<100 μs |
| 按键/低速状态 | 2 | 0 | 人机响应,延迟<10 ms |
该表仅为示例,实际分配需结合具体芯片型号和中断向量数量。配置时通过IPCx寄存器设置优先级和子优先级,通过IECx使能中断,通过IFSx观察标志。调试时可用GPIO翻转法测量ISR执行时间:在ISR入口置高、出口置低,用示波器观察脉冲宽度,即可得到实际开销。
实时响应路径的分析方法
分析实时性时,建议按以下顺序建立量化认识:第一,确定事件源到中断标志的硬件延迟,通常为几个外设时钟周期;第二,确定中断控制器裁决时间,与当前是否在更高优先级ISR中有关;第三,确定CPU保存现场和跳转向量的固定开销,MIPS内核通常为十几个CPU周期;第四,确定ISR自身执行时间,包括外设访问等待;第五,确定恢复现场和返回的时间。五段相加即为最坏响应延迟。
以80 MHz CPU时钟为例,若固定开销约20个周期(250 ns),ISR执行约200个周期(2.5 μs),外设访问等待约10个周期(125 ns),则总延迟约3 μs量级。对于1 ms控制周期,这个开销占比很小;但对于10 μs级的高速保护,就必须进一步优化,例如使用向量中断、减少ISR内寄存器保存、把非关键动作移出ISR。
从架构到配置的落地要点
在具体工程中,可遵循以下检查顺序:确认系统时钟和PBCLK配置,确保关键外设时钟满足时序;为每个实时事件分配唯一优先级,避免同优先级竞争导致不确定裁决;把大数据搬运交给DMA,只在必要时产生中断;用定时器建立固定节拍,避免软件延时循环;在ISR中只做标志清除和最小数据操作,把复杂处理交给主循环;最后用GPIO翻转或定时器计数测量实际延迟,验证是否满足设计目标。
理解M4K/M-Class内核、中断控制器、DMA、定时器和外设总线之间的协作关系,是后续编写确定性实时程序的基础。只有把响应路径上的每一段开销都量化,才能在PIC32上做出可预测的实时系统。