实际运行中有可能多通道的单次规则转换dma中断一直进不去,例如 采样4通道,单次规则转换,dma计数设为4,但可能丢失第一次转换,导致dma计数一直停在1.
按照常见思路,都是在定时器中断中启动dma来进行ad采样,但显然ADC触发DMA时有问题,因为此时如果将ADC设备复位或进断电模式再退出,DMA传输将正常.
一般都是在一轮adc转换时丢第一次数据,而且现象随机,这里中断频繁但还不至于阻塞总线.当然,我的设计中也使用了多个dma通道,adc的dma方式出问题较多,总线轻载时也出同样的问题.
现象给人的感觉是似乎ADC第一次转换完成后,DMA还没有进行传输时,发生中断,或其他事件(如调试器单步)等,就会丢失第一次转换的触发信号.第二次转换完成后,DMA可以获得触发.即使总线再繁忙,dma访问adc的间隔不均匀,也不应该丢失触发信号.总线数据可以丢失,表现为数据错乱,但触发信号不应该丢失. 以上分析结果是做了不少测试得到的,由多人检测,应该不存在太多低级错误.
希望香主和ST联系,个人感觉是ADC和DMA的触发部分有些问题,可能DMA和ADC只有触发信号,没有握手信号或有握手问题.当然不了解adc和Dma细节所以这里只能猜了. 不过DMA的触发问题在很多芯片的早期版本常见,有的是仲裁时丢失,有的是数据通路有问题.cortexM的总线设计比较新颖,但也有可能有很多问题,也许问题可能在这里. |