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.

[参考译文] MSPM0G3507:当遇到 SPI RX_OVERFLOW 时、DMA 似乎会卡住

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1602511/mspm0g3507-dma-appears-to-gets-stuck-when-spi-rx_overflow-is-encountered

器件型号: MSPM0G3507

我有一个 SPI 外设使用 SPI0 和两个 DMA 通道接收数据、一个用于 Tx、另一个用于 Rx。 SPI 配置为 4 线模式、因此硬件控制 CS、并且我也在 CS 空闲时启用了清除移位计数器。 所有操作都正常、直到遇到 SPI RX_OVERFLOW、此时即使总线上有新数据、SPI 也不会再接收到任何数据。 即使在切换 CS 后也是如此。 SPI 外设指示 RX FIFO 已满、但 DMA 没有传输任何内容? 在 SPI0 ISR 中、我将使用 DL_SPI_clearInterruptStatus 清除 RX_overflow。 在这里、您可以看到 DMA 处于空闲状态、SPI 指示 Rx FIFO 已满。

image.png

在这种情况下、我是否需要采取其他步骤来恢复? 我期望在 RX_overflow 指示后 SPI 和 DMA 能够继续收到、但事实并非如此。 RX_OVERFLOW 中断在接收到的每个新字节时继续触发、然后在 CS 处于非活动状态时停止、然后重新启动、如以下捕获中所示。 蓝色外设溢出布线在进入 RX_OVERFLOW ISR 时设置为高电平、在退出时设置为低电平。

image.png

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

    我错误地在某些情况下关闭了 DMA、因此发生了溢出。