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.

[参考译文] MSP430F5529:从不清除 SPI 忙

Guru**** 2596185 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/989417/msp430f5529-spi-busy-never-clears

器件型号:MSP430F5529

我将 MSP 作为从器件运行、并使用 DMA 完成数据传输。 我有一个在禁用 SS 时调用的 ISR。 与示例类似、我首先检查的是 SPI 是否繁忙。

 while ( USCI_A_SPI_isBusy ( USCI_A0_BASE ) == UCBUSY &&  WAIT_COUNT++ <  MAX_WAIT )
    {
        ;
    }
我添加了最长等待时间、因为它从不忙。 一切似乎都很顺利。 这是我应该关注的问题、还是我可以直接进行检查、因为我接下来要做的是禁用 DMA 和 SPI 以将其复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我从未尝试过这种方法、但我猜 DMA 已经预先加载了 TXBUF (->移位寄存器)、其中包含一个字节、在下一次传输之前不会发送该字节、因此它就在那里。 如果 DMA 长度大于主器件实际请求的字节数、则会发生这种情况。

    通常、这种预加载是一件好事、因为当主器件启动事务时、第一个字节会立即可用。 但这确实意味着每个人都必须正确地对字节进行计数。