工具/软件:TI-RTOS
您好!
我使用 TI 给出的示例代码成功进行了 SPI 回送测试。 现在、我尝试使用 EDMA 进行相同的环回测试。
已完成必要的更改。 我说
#ifdef SPI_DMA_ENABLE
if (dmaMode = true)
{
/*设置与 DMA 相关的 init 配置*/
spi_cfg.edmaHandle = MCSPIApp_edmaInit();
SPI_cfg.dmaMode = true;
}
其他
#endif
SPI_initconfig 代码中。
MCSPI_Params_init (&mcSpiParams);
mcSpiParams.transferTimeout =超时;
mcSpiParams.transferMode = SPI_MODE_CALLM;
CHN = testChNum;
cbSem[CHN]= SPI_osalCreateBlockingLock (0、&cbSemParams);
mcSpiParams.transferCallbackFxn = cbFxn[CHN];
SPI[CHN]= MCSPI_OPEN (实例、CHN、&mcSpiParams);
TxBuf[0]= 0xAAU;
memset (rxBuf、0、MCSPI_Xfer_LEN);
transaction.status= spi_transfer_started;
transaction.count = MCSPI_Xfer_LEN;
transaction.txBuf =&txBuf[0];
transaction.rxBuf =&rxBuf[0];
#ifdef SPI_DMA_ENABLE
IF (dmaMode)
{
CacheP_WB (((void *) txBuf、(int32_t) MCSPI_Xfer_LEN);
CacheP_WB (((void *) rxBuf、(int32_t) MCSPI_Xfer_LEN);
}
#endif
RetVal = MCSPI_TRANSFCTION ((MCSPI_Handle) SPI、事务);
#ifdef SPI_DMA_ENABLE
if (dmaMode = true)
{
CacheP_Inv ((void *) rxBuf、(int32_t) MCSPI_Xfer_LEN);
}
#endif
if (cbMode = true)
{
if (multChn =true)
{
sem = cbSem[testChNum];
}
其他
{
sem = cbSem[0];
}
IF (SPI_osalPendLock (SEM、超时)!= SemaphoreP_OK)
{
转至 Err;
}
}
RetVal = VerifyData (((uint8_t *)&txBuf[0]、&rxBuf[0]、MCSPI_Xfer_LEN);
但我没有进入回调函数、一旦我执行 MCSPI_transfer 、它就会停止、并且永远不会 出现在下一条语句中。
为了使 SPI 回送测试在 DMA 模式下工作、我需要进行哪些确切的更改。 如果您已经拥有带有 DMA 的测试应用程序、请分享。