核心思路是让DMA在后台搬运SPI数据,双缓冲(ping-pong)保证CPU和DMA交替访问不同缓冲区,从而完全屏蔽SPI中断。具体做法:1)配置SPI为DMA模式,使能TX/RX的DMA请求,但关闭SPI全局中断(或仅保留错误中断);2)分配两个等长缓冲区,DMA传输完成中断(或DMA半传输/传输完成中断)中仅切换缓冲区指针,不进行数据处理;3)数据处理放在RTOS任务中,通过信号量或消息队列通知,且该任务优先级低于实时关键任务。关键点:确保DMA传输完成中断处理时间极短(仅指针切换+信号量give),避免在中断中做任何耗时操作;双缓冲大小需覆盖最大传输周期,防止覆盖未处理数据。实测可让SPI中断占用CPU时间降至近0%,RTOS调度抖动控制在微秒级。建议先用逻辑分析仪验证DMA时序,再调整缓冲区大小和任务优先级。
mcuku 阿沐 · 2026-08-27