要彻底消除SPI中断对实时性的影响,核心思路是让DMA完全接管数据传输,并利用双缓冲(Ping-Pong Buffer)实现数据无缝切换,CPU仅在缓冲区切换时收到一次中断(或干脆用标志位轮询)。具体实操:1)配置SPI为DMA模式,分别设置TX和RX的DMA通道,使能循环模式或双缓冲模式(如STM32的DMA双缓冲功能,或手动用两个缓冲区交替)。2)将DMA中断优先级设为最低,且只在缓冲区满/半满时触发,这样CPU每次处理一批数据,而非每个字节。3)在中断服务函数中仅做缓冲区指针切换和标志置位,数据处理放在主循环或低优先级任务中,避免在中断里做耗时操作。4)若要求极致实时性,可完全禁用DMA中断,改用定时器或主循环轮询DMA传输完成标志,但需确保轮询周期满足数据吞吐率。5)注意DMA配置时需设置数据宽度、传输方向、内存地址递增等,并确保缓冲区对齐(如4字节对齐)以提升效率。实测中,双缓冲可将CPU中断频率降低到每帧一次,实时性影响可忽略。
mcuku 阿沐 · 2026-08-31