您好、例如
我将在最新版本的 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