不管是软件触发还是硬件触发,通过DMA搬运时,通过函数Adc_Ipw_StartDmaOperation来初始化源地址和目的地址。
S32K344中每个ADC实例只能用一个DMA通道,当一个GROUP包含多个转换通道时,通过DMA的S/G功能实现。
多个ADC通道只有最后一个ADC通道会触发DMA请求,一个MAjor loop完成后,自动装载下一个TCD,也就是说一个硬件触发DMA请求以及通道-1软件DMA触发请求。
同时在设置多个通道TCD时候,也设置了不同触发源。
可以看出,第一个TCD的不允许软件出发,只允许硬件触发,不允许产生MAJOR LOOP 中断。
第2个TCD到n-1个TCD,只允许软件出发,不允许产生MAJOR LOOP中断。
最后一个TCD,只允许软件触发,允许产生MAJOR LOOP中断。所有通道搬运完后只产生一次中断
ADC结果搬运,源地址是一直不变的,变得是目的地址,TCD的更新是在中断中实现的。
如果通道数过多,消耗的时间越多。其他代码执行一会就又要处理中断,而且这个中断很耗时,这就导致其他代码执行很慢,无法适用于实时操作系统。