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:通过其他 DMA 通道进行 DMA 配置

Guru**** 2673945 points

Other Parts Discussed in Thread: MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1590438/mspm0g3507-dma-configuration-by-other-dma-channels

器件型号: MSPM0G3507

您好!

我需要通过其他渠道配置 DMA、并有一些问题需要确定它是否是稳健的方法和已批准的实施、以便我们可以使用它并确保它 100%好。

我的工作台:

  • MSPM0G3507;
  • DMA ch0/1/2 是为配置写入提供服务的通道;
  • DMA ch3 是我们配置的通道。

我实施了下一个管道:

  1. DMA CH0 写入 DMAEN=0;
  2. DMA CH1 写入配置(I 仅更改 DMADA,不确定其他寄存器);
  3. DMA CH2 写入 DMAEN=1;
  4. DMA CH3 从软件触发开始;

结果: 已应用新配置并运行良好。
这里的主要思路是、在写入新配置时必须禁用可配置的 DMA 通道 (DMAEN=0)。

但我在 CCS 示例和文档中没有看到此类实现、因此我对它的有效优化流水线有疑问。

问题:

  1. 我能否找到有效的管道来实现此类目标?
  2. 如果 DMAEN 之后被放置在存储器中、那么我们是否可以在与其他 DMA 寄存器的一次传输中写入 DMAEN=0、因此在之后实际写入?
    即 DMACTL(具有 DMAEN 位)在 DMASA、DMADA、DMASZ 之前、因此在这里我们实际上设置 DMAEN=0 并且仅在写入 DMASA、DMADA、DMASZ 之后。
  3. 在针对锁存或其他情况进行 DMAEN 切换之前、我们是否需要一些延迟?

我已经检查了它,似乎很好,但我需要确定它是否真的是正确的,因为文档对于这些详细信息是很差的。

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

    尊敬的 Serhii:

    根据您的问题:

    主要思路是在写入新配置时必须禁用可配置的 DMA 通道 (DMAEN=0)。

    是、 请确保配置 DMA 时 DMAEN=0、则不会有任何问题。

    我能为这种实现找到有效的管道吗?

    我们没有用于通过 DMA 配置另一个 DMA 的流水线。  对于常规 DMA 配置、您可以在我们的 SDK 中找到相关示例演示。

    [引述 userid=“676302" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1590438/mspm0g3507-dma-configuration-by-other-dma-channels
    • 如果 DMAEN 之后被放置在存储器中、那么我们是否可以在与其他 DMA 寄存器的一次传输中写入 DMAEN=0、因此在之后实际写入?
      即 DMACTL(具有 DMAEN 位)在 DMASA、DMADA、DMASZ 之前、因此在这里我们实际上设置 DMAEN=0 并且仅在写入 DMASA、DMADA、DMASZ 之后。
    • 在针对锁存或其他情况进行 DMAEN 切换之前、我们是否需要一些延迟?
    [/报价]

    为了保持稳健性、需要设置延迟、 可能是由于 DMA 传输速度太快、寄存器尚未被锁存。

     

    此致、
    彼得

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了稳健性、需要设置延迟、 可能是由于 DMA 传输速度太快而尚未锁存寄存器。

    它是否指定在某个位置?
    稳健性意味着我们需要指定已知的延迟值,这些延迟值必须在以下情况之前进行记录,检查和验证:)

    要进行正常的 DMA 配置、您可以在我们的 SDK 中找到相关示例演示。

    我在  mspm0_sdk_2_08_00_03 中没有看到此类示例

    是的、 请确保配置 DMA 时 DMAEN=0、则不会出现任何问题。

    当 DMAEN=1 但寄存器向后写入时、DMA 通道的配置怎么样?

    因此、如果 DMA 存储器映射为:
    - DMACTL
    - DMASA
    - DMADA
    - DMASZ

    我们开始从 DMASZ 写入、DestAddr=decreal、所以实际的写入序列是 DMASZ-->DMADA-->DMASA-->DMACTL。

    我看到、当写入任何 DMACHAN 寄存器时、DMAEN 位将会自动清零、并且通道已解除武装。 但由于 DMACTL 是最后写的 — 它是武装的权利在移交结束。

    这允许仅使用一个通道在一次传输中重写其他通道。
    目前它正在我的工作台上,据我所知 — MSP43x 中有相同的行为、因此我期望 DMA 模块在 MSPM0 中具有相同的想法。