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.

[参考译文] MSPM0G3507:两个 ADC 的 DMA 延迟外部 ADC 触发完成 — 竞态?

Guru**** 2554460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1527835/mspm0g3507-latency-external-adc-trigger-to-dma-complete-for-two-adcs---race

器件型号:MSPM0G3507


工具/软件:

你好。

我认为我遇到了 ADC/DMA 和触发延迟问题。

我通过事件分离器从外部 GPIO 触发了两个 ADC。

两个 ADC 都在 40MHz 处使用 ULPCLK。

两个 ADC 都加载了 DMA 样本计数=1、且加载了 DMA 触发器 MEM0 结果。

两个 ADC 单次重复模式。

两个 ADC 均为 8 位。

两个 DMA 写入两个单独的缓冲区。

DMA 优先级为:

ADC1(通道 3)

ADC0(通道 4)

有时、ADC1 的缓冲器中的数据会损坏。

此处报告了类似的问题

即使在 1MHz 外部触发时、我也收到了这个问题、似乎有足够的时间来完成 DMA。

我尝试计算出的是以下延迟:

到 DMA 完成的外部触发上升沿。

TRM 8.1.5 显示 4 个 ULPCLK(对于触发事件)= 100ns

图 21-2 表明由于使用 ULPCLK、采样开始没有延迟。

...这没有足够的信息供我计算-> 从外部触发上升沿到 DMA 完成。

“感觉“像 DMA 正在从 ADC 传输无效的数据……这里是否有比赛?

谢谢

Phil

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

    尊敬的 Phil:

    请分享如何配置 DMA 从 ADC 到 SRAM 缓冲器。

    我们有两个不同的 ADC memroy 映射、使用第二个可能对您有用:

    B.R.

    Sal

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

    你好。

    我不需要存储器映射。

    这只是上面描述的两个 DMA 可以正常工作、但我有时会得到损坏的数据。

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

    尊敬的 Phil:

    并且、我假设您使用一个 GPIO 触发器两个 ADC 和事件 (1:2) 通道、对吧?

    有时、ADC1 的缓冲区中的数据已损坏。

    损坏的数据是什么样子、无有效值、更大、更小、更少的数据数、 还是其他情况?

    即使在 1MHz 外部触发器、我也会遇到这个问题、这似乎是足够的时间来完成 DMA。

    您使用的采样时间是多久?

    我认为 DMA 延迟不会使数据中断。 我怀疑在 DMA 访问数据时、正在进行转换、因此传输的数据可能不会满且损坏。

    图 21-2 显示由于使用 ULPCLK、从样本启动开始没有延迟。

    请分享您参考的数据、我在最新的 TRM 中找不到这一个。

    从外部触发上升沿到 DMA 完成。

    我们没有这方面的基准测试数据。 也许您可以手动测试。

    B.R.

    Sal

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

    我怀疑在 DMA 访问数据时、正在进行转换、因此传输的数据可能不会满且损坏。“

    怎么会这样呢?

    DMA 会在加载的 memres0 时启动、因此 ADC 转换完成。

    采样 时间在 50ns - 200ns 之间没有差异、仍然会出现问题。

    此致

    Phil

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

    尊敬的 Phil:

    误解你的情况,我得到了你的点 DMA 传输. 我将设置一个演示来进行测试和检查。

    [引述 userid=“522967" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1527835/mspm0g3507-latency-external-adc-trigger-to-dma-complete-for-two-adcs---race/5876439 #5876439“]
    有时、ADC1 的缓冲器中的数据会损坏。

    损坏的数据是什么样子、无有效值、更大、更小、更少的数据数、 还是其他情况?

    [/报价]

    损坏的数据是什么样子的?

    B.R.

    Sal

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

    谢谢。

    在 2:1 分离器上尝试 100ns 采样时间和外部触发正边沿。

    外部触发器位于 1MHz 处

    8 位、字节传输到无符号字符数组。

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

    我的意思是 1:2 分离器...

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

    您好 Philip:

    损坏的数据是什么样子的、无效值(较大,较小)较少的数据数、或者在其他情况下?

    B.R.

    Sal

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

    嗨、目前我正在将 ADC 用于“愤怒“和真实信号。

    我确实需要向两个 ADC 输入恒定电压、以便为您找到合适的答案。

    但它“看起来像“、如您所述、数据是转换完成之前的 DMA ...

    类似的问题 here...it 是一场比赛..

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

    您好  Philip:

    对 答复太晚表示歉意。 下面是一个演示供参考:
    演示设置:
    -计时器:32MHz、  每个 1µs 触发两次 ADC 采样。
    -由 ADC 存储器 0 负载触发的 ADC 数据传输:
       传输大小= 1(8 位值);
       存储在 uint_16 缓冲器中(每次传输一个值);

    -流程重复 32 次。

    e2e.ti.com/.../adc12_5F00_max_5F00_freq_5F00_dma_5F00_8bit_5F00_LP_5F00_MSPM0G3507_5F00_nortos_5F00_ticlang.zip

    如果有任何误解,请告诉我。

    此致、

    Jenney

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

    我入侵 Jenney Ni 的程序、使用 TRIGGER-NEXT、并使用 DMA 传输触发计时器计时器 (TimG0) CTR 寄存器(范围[0:31])、而不是 ADC 样本。

    在几个启动 wiggles 之后,我看到了

    1) 对于 ADC0 (DMA CH4):重复使用值 31

    2) 对于 ADC1 (DMA CH3):重复值 21

    我将计时器触发周期减慢到 2us [0:63]、得到相同的结果、这表明 CTR 在第一轮之后没有溢出。

    我将 ADC1 重新分配给 DMA CH5(优先级较低)、结果被反转。

    观察结果:

    a) 对于一次近似计算、DMA 传输似乎需要大约 10 个时钟。

    b) 两个 ADC 的 1us ADC 周期非常接近 超限。

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

    谢谢、这是一个优雅的实验。

    因此、使用 40MHz DMA (25ns)……250ns X 2 = 500ns
    加上转换触发和采样时间的延迟…

    很惊讶,这是这么长的。

    两个问题:

    1.为什么两个频道不同?

    2.如果我做了一个 FIFO DMA,那么每次采样的速度是否会更快,例如,一个 DMA “设置“用于在 FIFO 中进行的 12 次转换?

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

    1) DMA 通道具有不同的优先级 (ROUNDROBIN=0)。 通过颠倒优先级、我对 ADC 确实同时触发 DMA 充满信心。

    2) FIFO 可能有用,但您可能必须反转您的逻辑。 [免责声明:我对 ADC FIFO 没有太多的经验、但论坛上有一些向导。]

    10 个时钟比我预期的要多。 但这也是一个特定的上下文(和“实验样本大小 1“)。 我希望能尽快用计时器做一些类似的事情。

    我忘了提到:我没有看到你描述的症状在线程的顶部(之前,我得到分心)。