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.

[参考译文] TMS570LS3137:具有 DMA 的 SPI 从器件

Guru**** 2484615 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/728876/tms570ls3137-spi-slave-with-dma

器件型号:TMS570LS3137

你好。

我已经将 SPI1设置为从器件。 我还设置了一个 DMA 通道将接收到的数据传输到存储器缓冲区、另一个 DMA 通道将数据从另一个存储器缓冲区传输到 SPITX 寄存器进行发送。 我可以通过将 GPIO 引脚拉至高电平来触发 SPI 主器件发送1040字节。
这在 SPI 传输期间发生干扰之前一直有效。 然后、我会在接收存储器缓冲区中看到一个多一个位(通常还有更多字节)的偏移量。 如果下一个数据包将再次从偏移零开始、这是可以的。 但它不会。 由于新的干扰、偏移将保持恒定或增加。
我的想法是在拉 GPIO 引脚进行新的传输之前重置 DMA 通道。


但是、我该怎么做呢? 我不想复位整个 DMA 控制器、因为其他外设也会使用它。

我希望我已经足够好地解释了我的问题。

谢谢、致以诚挚的问候
Christian

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

    您可以禁用分配给 SPI1 TX 和 RX 事件的 DMA 通道、重新配置这些事件的控制数据包、然后重新启用 DMA 通道。 以这种方式禁用通道时、DMA 传输只会在当前块传输完成后停止。

    这是您要问的、还是我不理解您的问题?

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

    你(们)好,Sunil。

    是的、这就是我需要的。
    但是、如果我在块传输尚未完成时禁用 DMA 通道、重新启用是否也起作用? 因为如果干扰发生、我的项目就会出现这种情况。
    我认为会发生以下情况:
    1) 1)偏移量例如为10字节。
    2) DMA 正在等待剩余的1030字节(因为数据长度始终为1040字节)
    3)接下来的1040字节到达。
    4) 1030字节后、块传输完成。
    5) 5) DMA 使自动初始化并接收最后10字节。 =>如果禁用和重新启用不起作用、偏移将始终保持不变。

    此致
    Christian

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

    当您禁用正在服务的 DMA 通道时、它仅在当前块传输完成后停止。 应用程序应等待通道处于非活动状态、然后再重新配置控制数据包并再次启用 DMA 通道。

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

    在我还禁用并重新启用 SPI 之后、我已经解决了这个问题。
    感谢你的帮助。

    此致、
    Christian