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.

[参考译文] MSP432E401Y:使用 GPIO 触发器触发 SPI DMA

Guru**** 2576215 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/776926/msp432e401y-triggering-spi-dma-using-a-gpio-trigger

器件型号:MSP432E401Y

您好!

GPIO 事件发生后、我需要尽快在 SSI3外设上传输18个字节的序列。  我正在使用 UDMA。  如果我使用中断监视 GPIO、我可以从中断例程内启动序列、相关缓冲区的内容将传输到完成。  我想通过直接从 GPIO 触发 DMA 而不是在 GPIO 中断例程内触发 SSI3发送来消除这种小开销。  我有一个 GPIO 触发事件启动发送序列、但当 GPIO 触发时、仅传输4字节的缓冲区内容(4字节等于仲裁值)。

下一个 GPIO 触发器发出缓冲器中的下四个字节、并且每个后续触发器遵循相同的操作、直到缓冲器完全传输。  因此、我现在需要5个 GPIO 触发事件来发送完整的缓冲区、而不是一个触发事件来发出18字节的数据。

那么、我的问题是、是否可以使用单个 GPIO 触发器从 SSI 连续发送18个字节?  如果是、我如何实现这一目标、是否有任何示例说明这可能会如何工作?

此致、

Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没有人建议过一种优雅的方式、因此我建议稍微采用 Rube-Goldberg-ish 的方式。

    最重要的是、您确实希望 SPI DMA 由 SPI 信号(而不是"开始"信号)起搏(触发)。 因此、您创建了第二个 DMA、它在 START 信号上触发、并对一些相关字执行一个字的存储器-存储器副本以启动操作。

    我在 P 系列上执行了此操作;它通过将一个带有开始转换位的字复制到适当的 ADC 控制寄存器中来启动 ADC、之后、ADC+DMA 以其自己的速度运行。 由于 P 系列没有 GPIO 触发器、"启动"DMA 由 DMAE0触发。 在您的情况下、将具有相应位的字 DMA 写入 DMAENASET 可能会实现这一目的?

    我想我不清楚为什么您不能为每个使能端发送超过4个字节。 在 P 系列上、UDMA 能够作为一个组进行18个单字节传输(起搏为例如 TXEmpty)、E 系列 DMA 似乎与 FIFO 配合使用。 我现在请 E 系列专家就这一个问题进行讨论。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bob、您好!

    对延迟答复表示歉意。

    您是否可以尝试将仲裁大小增加到大于18 (UDMA_ARB_32)?

    您还尝试在自动模式下设置传输、因为在此模式下、只要数据可用、数据就会传输。 此模式通常用于软件触发的传输。

    如果上述两种方法失败、则可以使用散聚法(类似于 Bruce 建议的方法)。

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

    感谢您的回答。 我遇到的问题是、当 FIFO 满一半时、不管仲裁大小如何、SPI 传输的 FIFO 都会触发 SPI 事件。 我可以顺利传输16个字节(8个字的 FIFIO 长度、半满是4个字乘以32位字长度、总共16个字节)。 我可以蛮力地强制执行另一个事件、但这会导致比从 GPIO 中断处理程序内部触发更长的延迟。 因此、我现在不是直接从 GPIO 事件本身触发 SPI DMA 传输、而是调用事件处理程序、该处理程序随后设置 SPI DMA 传输、该传输随后完成到我选择的任何缓冲器长度的整个传输。 我开始时有一个很小的延迟、但我得到144个连续 SCLK、两者之间没有中断。 从事件到 SCLK 的初始延迟仍然存在,但似乎一切正常,并且可以按照我的方式进行扩展。

    此致、
    Bob B