ADC工作在连续扫描模式下需要DMA协同搬运数据,软件或外部触发一次ADC便会循环连续转换数据,当数据转换完成时,ADC发出DMA请求信号,DMA收到请求立马开始执行数据搬移任务,以上是连续工作模式时,ADC和DMA协同工作流程。但当连续转换时需要多次切换ADC工作状态或进入休眠前DISABLE ADC时,会出现再一下次使能DMA通道的瞬间就有ADC数据搬移过来,导致整体数据向下偏移一位。
造成整个现象的原因很简单,连续转换模式下DISABLE ADC/DMA时,如果ADC刚好转换完成,但数据还没搬移,此时adc_dma_request信号会一直存在,当下一次使能DMA通道时,DMA会立马执行这个请求搬移ADC->DAT的数据。
为了避免这种情况,可以:
1. 连续工作模式下,需要多次ADC状态切换时,可以在下一次ADC ON之前,先重新初始化ADC,再重新初始化DMA;
2. DMA的长度增加一个,第一次转换时取前第0~n-1的数据,之后取第1~n的数据。
|