工具/软件:
我从 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。
有什么想法我还应该尝试什么,或者你看到这里的设置是不正确的吗?