工具/软件:
我从 TVALVM 板上移植到了带有 SOM 的完整 J721E 板、现在通过 GESI 板访问 MCSPI3 和 MCSPI6。 我将使用 MCU2_1、FreeRTOS、使用带 PDK 的 10.x TI SDK。
我观察到我可以成功地在每个上发送和接收、但在我尝试过的每种情况下、我只发送一个字节。 我希望整个信息都能传达出来。
任务已启动:
void spi_test_master_cb(void *arg0, void *arg1)
{
UART_printf("Starting SPI Master test. \n");
TaskP_sleepInMsecs(1000);
uint32_t terminateXfer = 1;
SPI_init();
// == Set up the SPI test for receive ==
SPI_Handle spi;
SPI_Params spiParams;
// Creates a callback semaphore
SPI_osalSemParamsInit(&cbSemParams);
cbSemParams.mode = SemaphoreP_Mode_BINARY;
cbSem[0] = SPI_osalCreateBlockingLock(0, &cbSemParams);
uint32_t instance = MCSPI3_CONFIG_IDX;
uint32_t domain = SPI_MCSPI_DOMAIN_MAIN;
// MCSPI_socInit();
SPI_HWAttrs spi_cfg;
SPI_socGetInitCfg(domain, instance, &spi_cfg);
spi_cfg.enableIntr = BFALSE;
spi_cfg.edmaHandle = NULL;
spi_cfg.dmaMode = BFALSE;
/* Set the SPI init configurations */
spi_cfg.chNum = 0;
spi_cfg.chnCfg[0].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_6;
spi_cfg.chnCfg[0].tcs = MCSPI_CS_TCS_0PNT5_CLK;
spi_cfg.chnCfg[0].trMode = MCSPI_TX_ONLY_MODE;
/* Set the SPI init configurations */
SPI_socSetInitCfg(domain, instance, &spi_cfg);
/* Initialize SPI handle */
SPI_Params_init(&spiParams);
spiParams.mode = SPI_MASTER;
spiParams.transferMode = SPI_MODE_BLOCKING;
spiParams.transferTimeout = SemaphoreP_WAIT_FOREVER;
spiParams.frameFormat = SPI_POL1_PHA0;
spiParams.dataSize = 8U; // 8 bits
spiParams.bitRate = 468750;
spi = SPI_open(domain, instance, &spiParams);
if (NULL == spi)
{
UART_printf("Error initializing SPI\n");
return;
}
uint32_t num_xfers = 0;
uint32_t xfer_len = SPI_MSG_LENGTH; //8
Osal_delay(500);
// Attempt a transfer
// uintptr_t addrMasterRxBuf = (uintptr_t)masterRxBuffer;
uintptr_t addrMasterTxBuf = (uintptr_t)masterTxBuffer;
bool transferOK = true;
// memset(masterRxBuffer, 0, sizeof(masterRxBuffer));
memset(masterTxBuffer, 0, sizeof(masterTxBuffer));
while (1)
{
memcpy(masterTxBuffer, "TEST1234", 8);
SPI_Transaction transaction;
transaction.count = xfer_len;
transaction.arg = (void *)&terminateXfer;
transaction.txBuf = (void *)addrMasterTxBuf;
transaction.rxBuf = NULL; // (void *)addrMasterRxBuf;
transferOK = SPI_transfer((SPI_Handle)spi, &transaction);
if (!transferOK)
{
UART_printf("Error in SPI transfer\n");
}
else
{
UART_printf("SPI transfer successful.\n");
}
Osal_delay(10);
}
}

我发现如果我启用 Turbo 模式、我会得到两个字节、但我永远不会收到整个消息。 此外、如果我在 SPI_Params 结构中更改“dataSize",“,它、它似乎扩展到两个字节、但对于较大的消息来说并不现实。
其他我做过调整但没有看到变化/无法正常工作的事情:
*增加比特率。
*调整 SPI_HWAttrs 中的 txTrigLvl。
有什么想法我还应该尝试什么,或者你看到这里的设置是不正确的吗?


