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.

[参考译文] MSP432P401R:需要解释 DMA 详细信息- ADC 多序列和乒乓缓冲

Guru**** 2575725 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/608194/msp432p401r-dma-detail-need-to-be-explained---adc-multisequence-and-ping-pong-buffering

器件型号:MSP432P401R

您好!

现在、我学习 MSP432并尝试编写代码来缓冲 ADC 样本。

有人能帮您找到合适的推荐方法来同时使用 ADC 多序列模式 和乒乓 DMA 吗?

(周期中的多个寄存器到 更长的数组)(通用化它-从数组到 具有不同大小的数组的循环 DMA)

我已阅读并理解示例、但未看到正确的解决方案。

或者、对于何为 DMA 控制器、我必须在处理中更改 DMA 设置(例如、在 DMA 完成中断处理程序中)?

谢谢、Iurii。

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

    当 ADC 使用多序列模式时、是否打算将数据从单个通道传输到 ADC 的多输出缓冲区、然后使用 DMA 将其移动到 SRAM 缓冲区? 请详述一下。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定我是否需要多个缓冲器或交错、但我的问题是如何以干净的方式从寄存器数量向 pri 和 alt 缓冲器进行传输(例如、一个到存储器或内存到一个)。 我希望像 EDUMKII 麦克风示例这样的代码只能有十几个通道。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lurii、

    感谢您的澄清。 我附加了一个示例代码、其中的乒乓缓冲器可读取多个 ADC 数据通道。 希望它对您的代码有用。

    e2e.ti.com/.../adc14_5F00_multiple_5F00_channel_5F00_no_5F00_repeat.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢、
    您能否解释 a)代码是正常的还是纯实例? b) dma_setChannelControl (... UDMA_SRC_INC_NONE…… 它是否通过 MEM0至 MEM7 -它似乎仅从 MEM0 (0x40012098) c) DMA 完成中断(如果... UDMA_PRI_SELECT...) 设置传输... UDMA_PRI_SELECT... 反之亦然?
    此致、Iurii
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Lurii

    是的、没错。 在源增量设置为无的情况下、只能从 MEM0读取数据。 如果您将其设置为 UDMA_SRC_INC_32、则数据将从 MEM0-MEM7中读取。 但是、在执行此操作时、DMA setChannelTransfer API 的最后一个参数必须设置为8、以指示仅需要读取8个位置、之后 DMA 必须切换到备用通道。

    该代码是正在开发的示例的一部分。 我们稍后切换到外设散聚模式。

    DMA 完成中断同时产生主任务和副任务完成。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    总之、不能重复读取 MEM0-MEMxx 来填充更大的缓冲器阵列、而是使用外设散聚或其他方法来切换正在进行的 DMA 设置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Lurii

    是的、没错。 这是 ADC 的 MEMx 寄存器被设计成一个独立可寻址寄存器的方式的函数。 散聚是允许更长序列的唯一方法。 只有当恰好有一个 MEM 通道被使用时、一个更大的缓冲器才会被填充。