处理半传输中断与传输完成中断的边界竞态,核心在于理解DMA中断的触发时机和缓冲区的读写指针管理。首先,确保DMA配置为循环模式,并启用半传输(HT)和传输完成(TC)中断。在中断服务程序中,分别更新读指针:HT中断时,读指针指向缓冲区前半部分的起始;TC中断时,指向后半部分的起始。为避免竞态,需在中断中禁用DMA中断(或使用临界区),处理完数据后再重新使能。同时,主循环中读写指针的比较需使用volatile变量,并考虑内存屏障(如__DMB())确保数据可见性。实操建议:使用双缓冲索引(如index ^= 1)代替指针运算,减少出错;在HT/TC中断中仅拷贝数据到用户缓冲区,不进行复杂处理;若数据速率高,可考虑使用DMA的FIFO或双缓冲模式(DBM)进一步降低中断频率。边界竞态的本质是中断嵌套或延迟,因此确保中断优先级合理(如高于其他外设),并在处理中保持原子性。
mcuku 阿沐 · 2026-08-27