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.

[参考译文] LP-MSPM0G3507:LP-MSPM0G3507

Guru**** 1788580 points
Other Parts Discussed in Thread: MSPM0G3507, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1396379/lp-mspm0g3507-lp-mspm0g3507

器件型号:LP-MSPM0G3507
主题中讨论的其他器件:MSPM0G3507SysConfig

工具与软件:

大家好!

我目前正在处理一个项目、使用 DMA 和 FIFO 进行数据传输、但遇到了时序问题。 之前、我在没有 DMA 和 FIFO 的情况下读取多个通道、并且 LED 在完成读取操作后以预期的速率切换。 但是、启用 FIFO 和 DMA 后、LED 切换明显变慢。

我正在努力了解这种减速的原因。 DMA 和 FIFO 的配置是否会对数据传输速度产生负面影响? 我可能忽略了哪些特定设置或注意事项可以改善时间安排吗?

感谢您的支持!

此致、

Ali

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

    尊敬的 Ali:

    您是将其中一个 FIFO 用于我们的外设、如 UART/I2C/SPI、还是使用自己创建的软件 FIFO?

    此外、您将使用什么机制在新的 DMA + FIFO 实现中切换 LED? 是否确定要按照之前在没有 DMA + FIFO 的情况下执行的相同操作进行切换?

    我问一下、因为一般来说、使用 DMA 会导致数据传输速度至少相同(如果不加快)。 我怀疑您的实现中有什么东西导致了延迟或出现延迟。

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

    我正在 ADC  ADC12->ULLMEM.CTL2 |=(ADC12_CTL2_FIFOEN_ENABLE)中使用 FIFO;

    我尝试执行类似于 adc12_max_freq_dma_lp_MSPM0G3507_nortos_ticlang 工程的操作、但使用多个通道  

    对于每次 设置 ADC12_IIDX_DMA_DONE 标志时切换机械方式、LED 会切换  

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

    我假设 DMA 是在其中一个 MEMx 结果加载标志上触发的、那么您让 DMA 通道发布事件、GPIO 订阅了该事件? 或者 DMA 完成标志被用作一个中断并且 LED 与软件切换?  

    DMA 是否可以一次传输所有 ADC 转换数据、因此现在您只能在所有 x (不确定要转换的通道数量)通道完成其转换和 DMA 传输时看到 LED 切换、而在您在每个通道完成传输之前切换?  

    展开"SysConfig"选项卡(如果您使用它)并在此处发布图像可能会有所帮助。 否则代码片段也可能会有所帮助。

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

    "我假设 DMA 是在其中一个 MEMx 结果加载标志上触发的、那么你让 DMA 通道发布一个事件、GPIO 订阅了该事件吗?"

    不可以。我使用计时器作为发布者、使用 ADC 作为订阅者、然后我检查 ADC 的标志(如果是 DL_ADC12_IIDX_DMA_DONE)、当我将标志设置为 true 并在 while (1)循环中切换 LED 时。 当我使用一个或多个通道而没有 DMA 时、计时器每100ms 触发一次 ADC、这是正确的、在本例中我检查了 DL_ADC12_IIDX_MEM1_RESULT_LOADD 标志。

    在 DMA 传输数据时、我检查了  DL_ADC12_IIDX_DMA_DONE 标志、计时不准确。  

    我现在在 code composer 中尝试在 DMA 通道0和 GPIO 引脚 PA0之间创建发布者订阅者、但不幸的是我无法执行该操作。

    此致、

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

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

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

    查看这些内容、我主要想知道 DMA 是否设置正确、尤其是因为此时配置不起作用。

    在 SysConfig 的 ADC12选项卡中有一个 DMA 配置选项卡、可让此操作更简单一些、可能就是您以前那样做的。

    此外、查看这些设置、看起来计时器完全决定了 LED 的闪烁频率。 我完全不希望 DMA 的添加会改变这里的频率。  除非您也更改了定时器设置或系统时钟设置、否则 LED 频率不应改变。  

    我也不知道你在哪里检查 DMA 完成标志或者它的时序、所以我不清楚你是如何检查这个时序的。  

    如果我在这里遗漏了什么或者您有更多的信息、请告诉我。 谢谢

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

    我认为这是与 FIFO 有关的、因为现在我只使用计时器 G0、当我禁用 FIFO 时、每100ms 触发一次 ADC、那么切换 LED 的时间正确、100ms、但当我启用 FIFO 时、切换 LED 的时序不正确

     

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

    而且我只使用两个通道

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

    最初、您将计时器发布到 ADC 和 LED、因此 ADC 行为不会影响 LED 闪烁速率、只有计时器会影响。  

    在最新的屏幕截图中、您不再使用计时器发布到 LED、那么哪个事件发布到 LED? 如果您更改了设置、请向我展示所有设置、以便我可以看到这些设置是如何连接的。

    请检查您用于触发 LED 的信号以及您用于使用 DMA 清空 ADC FIFO 的事件、因为这可能会说明 LED 切换速度变慢的原因。 这些应该都显示在 SysConfig 中。 我还建议在"ADC"选项卡中配置 DMA、以便为您完成其中的一些设置。

    我怀疑每组 ADC 转换都会触发一次 LED 切换、而不是每次转换触发一次、这会使 LED 切换速度变慢(尽管数据速率更高)。

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

    通过阅读 main()代码和初始化代码、我仍然看不到我希望降低 LED 闪烁速度的任何内容。 下周早些时候,我将需要尝试在我的结束运行这个复制和进一步调查。 考虑到同样的中断设置了校验 ADC 标志、且同一定时器正在启动转换、时序扩展的唯一可能地方似乎是在两次 ADC 转换之间。 考虑到这是重复模式下的序列转换、我不认为 FIFO 模式会延长该时间。 请给我留出几天的时间对此进行测试、我将回复此帖子并提供更多详细信息。

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

    好的、谢谢

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

    尊敬的 Ali:

    感谢您的耐心。

    到目前为止、我在我的测试中完全复制了您的代码(完全复制粘贴了上述代码)、并尝试进行了一些调整以确保有效地测试时序。 在这两种情况下、我得到了相同的结果。

    在禁用 FIFO 时、GPIO 引脚切换至4kHz

    启用 FIFO 时、GPIO 引脚的切换频率为24kHz

    因此我看到启用 FIFO 时的切换速率有所增加、考虑到 FIFO 允许 ADC 继续采样而不是执行一次采样、然后等待读取其结果、这是合理的。 我无法理解您在描述什么、当您启用 FIFO 时、切换速度会变慢、即使我直接复制您最近提供的代码也是如此。 您是否确定您没有将这两者混为一谈?

    我甚至对其进行了编辑、以使用 MEM0结果加载事件来切换 GPIO、因此切换会基于硬件、并且时序完全相同。 我也有一点困惑、因为您可以利用 timerG0实例来触发 ADC、但您将 ADC 置于重复模式、因此只有第一个计时器零事件对转换产生影响、进而影响 GPIO 切换。 ADC 不会等待额外的计时器事件来执行后续转换。 这是预期行为吗?