避免GPDMA双缓冲波形断裂的核心是确保DMA传输完成中断与缓冲区切换严格同步,并采用“半传输/全传输”中断机制。具体做法:1)配置GPDMA为循环模式,使用两个缓冲区(如buf1/buf2),使能半传输中断(HT)和传输完成中断(TC)。当HT触发时,CPU处理buf1(此时DMA正写buf2);当TC触发时,处理buf2(DMA正写buf1)。2)在中断服务程序中,通过检查当前DMA目标地址(如读取GPDMA的CUR_DST寄存器)或使用标志位,确保处理的是未写入的缓冲区,避免指针错位。3)若使用双缓冲模式(非循环),需在TC中断中手动切换目标地址,并确保切换前DMA已停止(或使用乒乓模式自动切换)。4)建议将缓冲区大小设为采样深度的整数倍,并利用内存屏障(如__DMB())防止编译器优化导致顺序错乱。实操时,先用逻辑分析仪验证中断时序,再调整采样率与缓冲区大小匹配。
mcuku 阿沐 · 2026-08-27