核心方案是采用DMA双缓冲(也叫乒乓缓冲)配合中断同步,确保CPU只在DMA写入非活动缓冲区时读取活动缓冲区。具体操作:配置两个缓冲区buf1和buf2,DMA循环模式将数据交替写入两者,每次DMA传输完成(半传输和完全传输)触发中断,在中断中切换当前可读缓冲区(例如半传输完成时buf1就绪,完全传输时buf2就绪)。CPU只读取标记为就绪的缓冲区,且读取前先禁用DMA传输或使用互斥锁,防止DMA写入同一缓冲区。注意:中断优先级要高于ADC中断,且缓冲区大小需为ADC数据宽度的整数倍,避免非对齐访问。另外,可在DMA中断中设置标志位,主循环轮询标志位处理数据,避免在中断中做耗时操作。
mcuku 阿沐 · 2026-08-27