This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LC4357:ADC + DMA +硬件触发器

Guru**** 2468460 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1044088/tms570lc4357-adc-dma-hw-trigger

器件型号:TMS570LC4357

大家好、

我将使用由 HET 触发的 ADC1_GP1以及 DMA。  我尝试按以下方式将数据放入目标缓冲区。

uint16_t buf[40]:

我知道如何对一个通道执行此操作(想象一下图片中没有第三列中的蓝色部分):

  - ADC-DMA 配置设置为块传输,块大小是 ADC 通道的数量,只需一个。

   - DMA src 地址设置为   adcREG1->GxBUF[adcGROUP1 + 2 (0xFFF7C0B2),固定

   - DMA dest 地址设置为缓冲区的顶部,自动递增

   - DMA 帧计数器设置为20、元素 cnt 设置为1。  

   - 当半个/全块被传输时、DMA 中断被触发

  

x 通道( 对于 x = 2):

 -我是否仍然将 ADC-DMA 设置为阻止传输? =>将2个结果写入 ADC 的结果缓冲区后的一个 DMA 请求

 -帧大小仍然是20,但 现在每帧有2个元素?

 - 为了将 CH1的样本放置在左侧图示的蓝色位置、应该将 dest 元素偏移设置为20字节吗?

 -我是否仍然 将 DMA src 地址设置 为  adcREG1->GxBUF[adcGROUP1 + 2 (0xFFF7C0B2)? 它需要在读取一个元素后递增、我该怎么做?

提前感谢您的帮助

Juergen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Juergen、

    我将研究您的用例、稍后再回来。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Juergen、

    [引用 userid="53387" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1044088/tms570lc4357-adc-dma-hw-trigger "- 我是否仍要将 ADC-DMA 设置为阻止传输? =>将2个结果写入 ADC 的结果缓冲区后的一个 DMA 请求[/引用]

    您可以使用块传输。  您可以将块配置为2、因此 ADC 将在 CH1转换结束时生成 DMA 请求。

    您还可以将块计数配置为20、然后 ADC 模块将在 第20次转换结束时生成 DMA 请求。 DMA 控制器应在下一组20个转换完成之前完成对20个数据的读取。

    [引用 userid="53387" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1044088/tms570lc4357-adc-dma-hw-trigger "-帧大小仍为20、但 现在每个帧包含2个元素?

    帧大小为2、帧计数为20

    [引用 userid="53387" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1044088/tms570lc4357-adc-dma-hw-trigger "-  为了将 CH1的样本放置在左侧图示的蓝色位置、应该将 dest 元素偏移量设置为20字节吗?

    元素大小= 16位

    元件数= 2

    帧计数= 10

    元素索引= 20 (字节)

    帧索引= 2 (字节)

    [引用 userid="53387" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1044088/tms570lc4357-adc-dma-hw-trigger ]我是否仍 要将 DMA src 地址设置 为  adcREG1->GxBUF[adcGROUP1 + 2 (0xFFF7C0B2)? 读取一个元素后、它需要递增、如何执行此操作?[/quot]

    我认为 src 地址是  adcREG1->GxBUF[adcGROUP1].BUF0或 (0xFFF7C0B2)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    我实际上仍然有点困惑。 我简化了问题、然后更容易理解。

    我在双缓冲器方案中对两个 ADC 通道进行四次采样。 这意味着、我为半块完成和块完成设置中断。 应用程序与缓冲器的一部分一起工作、而 ADC/DMA 则填补了另一部分。  

    以下是达到 HBC 中断时的情况:

    看上去一切正常、ADC1_GP1_Buffer[0]现在已针对应用程序读取。

    以下是按 BC 中断时的情况:

    我希望 DMA 在 ADC1_GP1_Buffers[1][0]位置继续。 相反、它开始在 ADC1_GP1_Buffers[0][4]位置写入数据 。  

    ADC 的 DMA 控制寄存器设置为:

    G1_blocks:2.

    DMA_G1_END:1.

    G1_BLK_Xfer:1

    我希望它在 ADC 对两个通道进行采样后触发一个 DMA 请求。

    我不确定 G1_blocks 是如何连接到 ADC 的 FIFO 大小的、如果它连接了:

    感谢您再次提供帮助。

    此致、
    Juergen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这实际上并不令人困惑、但在  ADC1_GP1_Buffers[0][4]中、帧5将被传输到其他位置、否则会引起混淆。 我只是重新排列缓冲区。

    谢谢、

    Juergen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Juergen、

    您是否使其正常工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    至少我了解 DMA 的工作原理。 可能根本不是细节、但我理解基础知识。 发现我的方法由于元素偏移量的大量而不是真正可行的。 对于较大的采样深度而言、它不够大。 我将研究链接 DMA 请求、应该可以通过链接来排列数据。

    此致、
    Juergen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢  Juergen。 让我们在您使其正常工作后再了解一下。