TMS320F28374S: 分别使用ADCA ADCB ADCC三个ADC的SOC0和SOC1,应该如何用DMA读取这6个结果?

Part Number: TMS320F28374S


    您好,我正设计采集三相电流和电压,分别使用ADCA ADCB ADCC三个ADC的SOC0和SOC1,显然如果使用一个DMA通道好像无法一次读取这六个结果??如果可以应该如何配置? 如果使用三个DMA通道分别读取这三个ADC的结果,虽然可以,但是我要如何确保我的控制算法执行在三个DMA都读取完毕后才开始? 感谢!

  • 您好

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待

  • 您好

    您说得对,由于 ADCA、ADCB 和 ADCC 的 SOC0/SOC1 寄存器地址不连续,因此如果没有 CPU 干预,您无法使用一个 DMA 通道同时处理所有三个 ADC。但是,如果使用了三个不同的 DMA 通道(一个用于 ADCA,一个用于 ADCB,一个用于 ADCC),您是否认为触发总是以相同的顺序发生?如果是这样,您可以直接在传输结束 ISR 中读取最后一个触发的 ADC 的六个结果。同时,请确保使用 DMA 的循环模式。例如:

    1. ADCA触发DMA CH1
    2. ADCB触发DMA CH2
    3. ADCC 触发 DMA CH3 - 启用 ISR 以结束 DMA CH3 上的传输并在此处读取所有数据
    4. ADCA触发DMA CH1
    5. ADCB触发DMA CH2
    6. ADCC 触发 DMA CH3 - 启用 ISR 以结束 DMA CH3 上的传输并在此处读取所有数据
  • 由于我3个ADC都来自同一触发源,所以我也不太确定哪个DMA会最先传输完成从而不知应该开启哪个中断

  • 您好

    除了用于读取ADC的3个DMA通道外,您还启用了其他DMA通道吗?如果没有,在设置轮询模式的情况下,DMA通道的服务顺序应该是确定的。你必须通过测试来确定顺序。

    我现在也在想,可以使用一个带有传输步长的单个通道,为每个ADC进行偏移。让我调查一下,然后再回复你。

  • 好的,非常感谢,期待你的回复。