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.

[参考译文] AM2431:有关 SDK 版本08.05中 SPI 读取逻辑的问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1198908/am2431-question-about-the-spi-read-logic-in-sdk-version-08-05

器件型号:AM2431

您好、例如
我将在最新版本的 SDK 中查看 mcspi_performance_8bit_am243x-lp_r5fs0-0_freertos_ti-arm-clang 示例代码。 在示例代码中、它在写入字节之前等待 Tx FIFO 为空、类似地、它在读取任何字节之前等待 Rx FIFO 为满。

我的问题是、为什么在写入字节之前必须等待 TX FIFO 为空? 如果 TXS (状态寄存器中的位1)为1、表示寄存器为空、它是否不能写入字节? 同样、在读取期间、它不仅可以等待 Rxs 位为1、还可以在字节显示时立即读取它吗? 如果我们这样做、会有什么不同?

以下是示例中的代码:

while (transferLengthTx!= 0)

if (0!=(MCSPI_readChStatusReg (baseAddr、chNum)&
CSL_MCSPI_CH0STAT_TXFFE_MASK))

/*写入有效 TX FIFO 深度*/
IF (transferLengthTx >= effTxFifoDepth)

transferLengthTx = effTxFifoDepth;

/*将数据写入 Tx FIFO。 *
对于(i = 0;i < transferLengthTx;i++)

MCSPI_writeTxDataReg (baseAddr、(uint8_t)(*txBuff++)、chNum);

numWordsWritten += transferLengthTx;
transferLengthTx =长度- numWordsWritten;

if (0!=(MCSPI_readChStatusReg (baseAddr、chNum)&
CSL_MCSPI_CH0STAT_RXFFF_MASK))

/*写入有效 TX FIFO 深度*/
if (transferLengthRx >= effTxFifoDepth)

transferLengthRx = effTxFifoDepth;

/*将数据写入 Tx FIFO。 *
对于(i = 0;i < transferLengthRx;i++)

*rxBuff++=(uint8_t) MCSPI_readRxDataReg (baseAddr、chNum);

numWordsRead += transferLengthRx;
transferLengthRx = length - numWordsRead;





谢谢
Rajeev

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

    您好、Rajeev、

    TXFFE 和 TXFFF 之间的差异是 FIFO 满或空。 如果您使用的是 CPU 轮询、我同意检查  TXFFF (未满)可以为您提供一些传输速度优势、但 CPU 与此任务完全相关。 当您使用中断模式或 DMA 时、根据 TXFFE 设置中断源或 DMA 事件更高效、并且 DMA 传输大小固定。

    同样的原理 也适用于 RXFFE 和 RXFFF。

    此致、

    Ming