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.

[参考译文] RTOS/AM5728:McSPI EDMA 环回测试失败

Guru**** 2603705 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/651035/rtos-am5728-mcspi-edma-loopback-test-fails

器件型号:AM5728

工具/软件: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 的测试应用程序、请分享。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。