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.
工具与软件:
我正在使用 spi_controller_fifo_dma_interrupts 示例代码、但进行了一些小改动。 最佳做法是将 TX 长度设置为要发送的字节数、将 RX 长度设置为要接收的字节数。 我非常确信能够按预期运行。 我更改了一些代码、将示例转变为传递 TX 和 RX 长度的函数、现在它将无法接收并挂起、等待 DL_SPI_IIDX_DMA_DONE_RX 中断。 我可以通过将 RX 长度添加到 TX 长度来解决此问题、从而强制使用更多的 SPI 时钟、但我以前不必这样做、这样我就很确定我损坏了某个东西。
我有这样的说法吗?如果我告诉 DMA 控制器接收10个字节、它将自动为这些数据生成 SPI 时钟。 或者、我是否必须通过向 TX 长度添加虚拟字节来手动创建所需的时钟、以便从外设为数据计时?
谢谢!
Chris
SCLK 周期由(控制器) Tx 侧生成。 Tx 和 Rx 大小应相同。
对于仅 Tx 或仅 Rx 事务、一种选择是将相反端(您不感兴趣的事务)指向某个位置的单字节并使用非递增(DMASRCINCR=0或 DMADSTINCR=0)。
因此、为了清楚地说明我发送了一个4字节的命令、然后需要读取10字节响应、我必须将 TX 和 Rx 长度设置为14、并接受 TX 将需要10个虚拟填充字节、并且 Rx 的前4个字节也是虚拟/填充。 并非完美的解决方案。 我最终重写了 spi_controller_fifo_dma_interrupts。 由于4线模式中的一项"功能"在使用模式0时会在两个字节之间发出 CS 高脉冲、因此我还必须手动控制 CS 引脚并使用3线模式。 这肯定看起来像一个错误、除非你能解释它吗? 我看到至少有一个报告称它是"故障",但它肯定是做它(贫穷?) 大家电。
下面是一个用户更加友好的函数、用于发送 XX 字节和接收 YY 字节而不进行虚拟填充。