广告广告位招商此处招商 · ads@eeunion.comA5 · 728×90(移动端 320×100)了解详情 →

MCU ADC DMA 双缓冲丢数?半传输中断与缓存一致性排查

Started by EE_Notes · 2026-11-02 01:04 UTC · 6 views · 1 replies
E Member
ADC加DMA双缓冲看着稳,实际丢数常常丢得悄无声息,因为数据不是没采到,而是被覆盖了。第一步确认丢数位置:半传输中断和传输完成中断各记一个计数,跑一段时间对比两个计数的差值,差值在涨说明处理速度跟不上采集速度,问题在消费端不在采集端。第二步查中断处理时长:如果在中断里做了滤波、打印甚至浮点运算,处理时间一超半个缓冲周期,下一个半区的数据就会把还没处理完的数据覆盖掉,处理函数里只做搬运和置标志,计算全部挪到主循环。第三步查缓存一致性:带Cache的MCU上,DMA写内存后CPU读到的可能是Cache里的旧数据,表现为数据跳变或重复,处理前对相应Cache行做失效操作,或者把DMA缓冲放到非缓存区,这个坑在换了带Cache的芯片后最容易出现。第四步查DMA配置本身:循环模式有没有开、数据宽度和外设地址增量有没有配错、半传输中断有没有真正使能,配错一个,现象都像丢数。最后提醒:调试时先把采样率降下来,看丢数是否消失,降速后不丢基本可以锁定处理速度或中断延迟问题,降速还丢再去查配置和硬件。你们用ADC DMA双缓冲时,丢数问题最后查出来最多的是哪一类原因?
O Member
We scoped the waveform on this once and could see the anomaly clearly. Worth a look.
广告广告位招商此处招商 · ads@eeunion.comA6 · 728×90(移动端 320×100)了解详情 →
Log in or register to reply.