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.

[参考译文] TMS320F28388D:在主模式下、从 CPU1到 SPI Tx FIFO 的 TMS320F28388 DMA 传输

Guru**** 2535150 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/929654/tms320f28388d-tms320f28388-dma-transfer-from-cpu1-to-spi-tx-fifo-in-master-mode

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARE

您好!

我正在尝试在主模式下实现从 CPU1可访问存储器到 SPI Tx FIFO 的软件强制 DMA。 我不希望触发任何 CPU 中断、因此我没有执行 ISR 例程。 我已将 DMA 置于单次触发模式启用和连续模式禁用、并且 AM 会监视 RUNSTS 位以确定传输何时完成。 我已经设置了256 16位字传输、突发为8、传输为32。  

当我强制传输为1时、我在 SPI 接口上得到8个字。  

当我强制传输为2时、我在 SPI 接口上得到16个字。  

根据突发次数和已编程的传输次数、2以上的任何数据传输似乎会丢失数据、我可以从接口中获得17到48个字、而不是预期的256个字。  

如果感觉 DMA 和 Tx FIFO 缓冲区之间的握手设置不正确。

在 TRM 中、它特别指出我需要设置 FIFO 增强位以使 DMA 正常工作、但奇怪的是、TI 没有提供这样的命令、所以我已经编写了自己的、这允许传输= 1和2模式工作。  

我还发现,没有提供监测方面的职能,这一点很奇怪。 我们仍在使用 C2000Ware_3_01_00_00版本的工具、因为我们即将推出重要的工具。 这会影响 DMA 功能吗?

我已使用 SPI_ex4_loopback_dma.c 作为示例、该示例似乎可以正常运行、但在不同的模式下运行。  

在下面的配置中、我在 SPI 接口上得到29个字、而不是256个字。  

如果有任何帮助,我们将不胜感激。

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

    Jennifer、

    启用 OneShot 模式后:

    对于您尝试执行的操作、您应该禁用 OneShot 模式。 如果我是您、我将具有 SPI 触发 DMA、而不是软件触发器。 这将消除您所面临的握手问题。 如果您不想接受 EPIE 中断、只需禁用它们。 相反、您可以轮询 BURSTSTS 和 TRANSFERSTS 以了解 DMA 突发和传输状态。

    此致、

    曼诺伊

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

    感谢您的回答、但它没有回答我的问题。 在我的应用中、SPI 不适合触发 DMA。 此外、我希望使用单个触发器发送整个数据批次、因此单次触发模式绝对是我想要的模式。 如果禁用一次性、则必须多次触发 DMA 事件才能获取所有数据。

    我仍在寻找建议、为什么只有29个字节输出、而不是预期的256字节输出。  

    提前感谢、

    Jennifer

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

    Jennifer、

    启用 OneShot 模式后、它会将所有256个字、16位字传输到 SPI TX 缓冲区、而不考虑 SPI 是否已完成发送先前写入的内容。 这会反复破坏 SPI TX FIFO 的内容。

    简而言之、DMA 确实将所有256个字传输到 SPI TX 缓冲区。  但是、SPI TX 缓冲区已损坏(使用来自 DMA 的新数据进行覆盖)、因为 DMA 不希望足够长的时间让 SPI 传输之前的 SPI TX FIFO 内容。 如果您检查 SPI TX 的第29个字节、您会看到、最后一个字节是第256个字 DMA 要传输的字节。

    此致、

    曼诺伊

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

    如果 SPI FIFO 不对 DMA 施加背压、为什么我必须对 Tx FIFO 水平进行编程并从 FIFO 深度中减去其值来对突发操作进行编程。  

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

    TRM 第37.3.8.1节规定

    "当使用带有 TX FIFO 的 DMA 时、DMA 突发大小(DMA_BURST_SIZE)不应大于

    TXFFIL、以防止 DMA 写入已满的 FIFO。 这将导致数据
    损耗、不建议使用。"

    这意味着 DMA 将在启动前检查 FIFO 状态?

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

    Manoj、

    我已进行了您建议的更改。 但是、现在 DMA 控制器处于运行状态、没有任何触发器、也没有数据输出。 TXFFIL < TXFFST 且 SPIFFENA 被设定为1。  

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

    我需要执行一个软件触发事件来启动传输、这与示例代码中完成的操作不同、但现在似乎在正确的数字中输出字节。  

    谢谢、

    Jennifer