ADC是怎么通知DMA可以搬运了,或者说DMA怎么知道有数据可以搬运了。
我详细描述下我的测试, 用一个TIM产生一个50us的时标去定时触发ADC转换(用的是更新事件触发),ADC和DMA连接。 DMA正常传输模式(非循环模式),传输完512个数据后产生传输完成中断并将一个标志置位。 应用层监视这个标志,当检查到标志被置位时,说明采集到了512个数据。将数据处理后,置位TIM的UG事件(此时应该会立即产生一个更新事件,ADC有可能被触发开始转换) --》 清除TIM触发源--》判断ADC是否在空闲,如果不在空闲就等到空闲--》 清除ADC转换完成标志位 --》 失能DMA 重设DMA 源地址、目标地址、数量--》 使能DMA.
仿真现象是 一使能DMA 就立即搬运了一次数据。按理说应该延时50us才会搬运首次数据才对,因为置位UG后触发ADC的TIM是从0开始计数的,需要计数到溢出才会触发ADC转换。我想不明白的是 TIM已经复位从0开始计数了,TIM触发源也被清除掉了,ADC转换完成标志也被清除掉了。还有什么原因导致DMA立即搬运了一个数据,而不是等待TIM触发才搬运。
|