核心思路是让DMA传输与PWM更新事件严格同步,避免中断竞争。首先,将DMA配置为循环模式,并设置传输完成中断(TC)而非半传输中断,且中断优先级低于PWM更新事件(若使用定时器更新中断)或直接禁用更新中断,仅依赖DMA的TC标志来装载下一组脉冲参数。其次,利用定时器的DMA突发请求(Burst)功能,在更新事件触发时自动从内存搬运数据到CCR寄存器,这样即使CPU被其他中断抢占,硬件也能保证波形连续。实操建议:1) 将DMA通道配置为外设到内存方向(外设地址固定为CCR),内存地址递增,数据宽度对齐;2) 在DMA中断中仅更新内存缓冲区指针,不直接操作寄存器,减少中断延迟;3) 若脉冲序列长度固定,可预加载多组数据到内存,使用双缓冲(DMA半传输/传输完成交替切换),确保CPU有足够时间准备下一组数据;4) 关键:将DMA中断优先级设为最低,PWM更新事件若需中断则设为最高,但更推荐完全不用更新中断,只用DMA完成中断来触发下一轮配置,这样竞争最小。最后,用逻辑分析仪验证实际波形,若仍有丢步,检查DMA的FIFO阈值和突发长度设置,确保每次传输原子性。
mcuku 阿沐 · 2026-09-03