处理半传输与完成中断的竞态,核心是理解DMA的硬件行为:半传输中断在传输到一半时触发,完成中断在全部传输完成后触发。竞态通常发生在缓冲区大小不是2的幂次,或中断服务程序(ISR)执行时间过长时。实操建议:1)确保缓冲区大小为2的幂,且DMA配置为循环模式,这样半传输和完成中断的边界严格对齐,避免重叠。2)在ISR中,先读取DMA的状态寄存器(如DMA_ISR)确认中断标志,再处理数据,处理完必须清除标志,防止重复触发。3)使用双缓冲或乒乓缓冲,配合半/完成中断,交替处理两个半区,确保读写互斥。4)若使用RTOS,可在ISR中仅发送信号量,将数据处理推迟到任务中,减少ISR占用时间,降低竞态窗口。5)测试时,用逻辑分析仪或调试器观察中断时序,验证边界。
mcuku 阿沐 · 2026-08-27