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.

[参考译文] TMD28X280049M:使用 DMA 将 Piccolo ADC 结果寄存器传输到 RAM

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/743724/tmdxdock280049m-piccolo-adc-result-registers-transfer-to-ram-using-dma

器件型号:TMD28X0049M

尊敬的 TI 团队:

我在 Piccolo 280049 MCU 的 C2000Ware 下找不到 ADC 到 RAM DMA 示例。  其他处理器有一些示例、但它们使用的功能不同。  但是示例之间的逻辑看起来非常相似:初始化器件、设置地址、设置突发、设置传输、设置模式、 我尝试遵循相同的逻辑流程、但到目前为止还不幸运。

我想配置一个 DMA 器件、在 ADC 转换结束时将 ADC 结果寄存器传输到内部 RAM 缓冲器、并在传输完成时让 DMA 触发一个中断、以便我可以连接到我的控制逻辑 ISR。

这就是我到目前为止所做的工作:

  • CPU 定时器0以10kHz 的频率驱动我的 ADC 转换 ADC 器件上的最后一个通道 C 生成一个 ADC 中断
  • 这正常工作。 我获取10kHz 中断、并且我的 ADC ISR 将数据从结果寄存器传输到内部缓冲器。  但是、这非常慢、需要由 DMA 完成
  • 然后、我修改了代码 A 位以删除 ADC 中断、并将 ADC C 信号上的最后一个通道发送给 DMA 器件
  • 我将 DMA 器件配置为在传输结束时生成中断。
  • ADC 与 DMA 之间的信令似乎工作正常。 ADC C 上的最后一个通道转换向 DMA 器件发出信号、然后触发 DMA 中断(我使用计数器和 GPIO 引脚进行监控以检查示波器上的频率和执行时间) 在中断发生时、我假设数据已传输、但我从未在目的缓冲区中看到任何数据。

因此、我怀疑配置 DMA 器件的方式有问题。  我创建了附加的测试文件、删除了 ADC 部分、并且只需在软件触发器上使用 DMA 在两个 RAM 缓冲区之间移动数据、但仍然看不到 DMA 从源缓冲区传输到目标缓冲区的任何数据。  

TI 能否提供一个工作示例代码来将这个通用 ADC 转换为具有用于 Piccolo 280049芯片的 DMA 的 RAM?e2e.ti.com/.../dmaTransferTest.c

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

    我们正在研究 F280049器件的其中一些示例。 但是、您可以轻松修改下面列出的 F2837xS 示例

    路径: \device_support\f2837xs+示例\CPU1\

    项目:
    ADC_SoC_Continuous_DMA
    sdfm_files_sync_dma
    SPI_LOOP_DMA

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让我看看我一直在看的示例并不是很有帮助。
    我的设置显然有根本的错误。
    我希望我提供的简单示例能让各位专家快速了解这个问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我刚刚收到了我们在 Demark 的 TI 代表发来的一封电子邮件、其中包含了我的问题的答案。

    我在 LSRAM 中声明缓冲区时出错、因为 DMA 无法访问这些缓冲区。

    将缓冲区放入 GSRAM 的简单 pragma 指令解决了该问题。

    //将缓冲区放置在 GSRAM 中
    #pragma DATA_SECTION (dmaXferTestSource、"ramgs0");
    #pragma DATA_SECTION (dmaXferTestDestination、"ramgs0");