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.

[参考译文] TMS320F28379D:通过 DMA 读取 SPI 输入引脚

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/983707/tms320f28379d-reading-the-spi-input-pin-through-dma

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

大家好、

我的代码中有周期性中断、需要通过 SPI 输入引脚读取编码器提供的角度。 但是、我想通过 DMA 访问 SPI 寄存器来实现这一点。 我希望数据从 SPI 引脚输入、并且无论我的周期性中断如何、都能通过 DMA 持续传输。 然后、每次我希望在中断内部使用时、代码都可以访问通过 DMA 传输的最新数据(角度)。

有人会告诉我  我应该对 DMA 使用什么配置吗? 例如、我应该启用 DMA 中断吗? 我应该使用连续模式吗?

此致。

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

    你好、Jake、

    如果您只想访问当前周期性中断中的数据、则无需配置 DMA 中断。 这仅在需要在传输或接收到一定数量的数据后立即进行处理的应用程序中完成。 连续模式可能最适合您尝试实现的目标。

    我建议查看我们在 C2000中提供的 SPI DMA 示例、以帮助您进行以下设置:

    C:\ti\c2000\C2000Ware_version\device_support\f2837xd\examples\cpu1\spi_loopback_dma

     

    此致、

    Marlyn

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

    您好、Marlyn、

    感谢你的答复。 在这几天内、我在 SPI DMA 下测试了我的代码、而不启用中断。  

    我对"spi_loopback_dma_cpu01"示例有一些疑问:

    -  为什么在本示例中,当禁用 SPI 中断时,TXFFIL 被配置为8?  

    SpiaRegs.SPIFFTX.bit.TXFFIL = FIFO_LVL; //设置 TX FIFO 电平

    -为什么突发大小应小于8?

    #define burst      (FIFO_LVL-1)  //突发大小应小于8

    此致。

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

    你好、Jake、

    [引用 userid="476919" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/983707/tms320f28379d-reading-the-spi-input-pin-through-dma/3637485 #3637485]\n 在本示例中、禁用 SPI 中断时为什么将 TXFFIL 配置为8 ?  [/报价]

    为了生成 DMA 触发器、SPI 必须启用 FIFO 增强功能。  

    [引用 userid="476919" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/983707/tms320f28379d-reading-the-spi-input-pin-through-dma/3637485 #3637485"]为什么突发大小应小于8?

    将 DMA 与 TX FIFO 搭配使用时、DMA 突发大小(DMA_BURST_SIZE)不应大于16–TXFFIL (在本例中为8)、以防止 DMA 写入已满的 FIFO。 这将导致数据丢失、不建议这样做。

    此致、

    Marlyn

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

    Marlyn、

    感谢您的回复。

    [引用 userid="315358" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/983707/tms320f28379d-reading-the-spi-input-pin-through-dma/3638472 #3638472"]为了使 DM[/quot]能够启用 SPI 的 FIFO 增强功能

    我知道应启用 FIFO。 但是、我不知道为什么虽然中断被禁用、TXFFIL 被配置为8?

    SpiaRegs.SPIFFTX.bit.TXFFIL = FIFO_LVL; //设置 TX FIFO 电平

    此致

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

    你好、Jake、

    DMA 事件通过配置 SPIFFTX.TXFFIL 和 SPIFFRX.RXFFIL 位来控制。 当 TXFFST 小于中断电平(TXFFIL)时、SPITXDMA 激活。  这就是为什么即使 SPI 中断本身被禁用、也需要设置 TX FIFO 水平。

    至于其配置为8的原因、该示例设置为发送和接收128个字。

    如果选择的 TXFILL 为8、那么在给定示例字数的情况下、计算 DMA 传输大小和突发大小就很简单。 下面的代码片段可在技术参考手册的"使用带有 DMA 的 SPI 发送数据"部分找到。

    num_words:128

    TXFFIL:8.

    dma_transfer_size:(num_words /TXFFIL)–1 =(128/8)–1 = 15 (16次传输)

    DMA_BURST_SIZE:(16–TXFFIL)–1 =(16–8)–1 = 7 (每个突发8个字)

    此致、

    Marlyn