尊敬的 TI:
问题:我尝试发送使能 SPI 通信、以将来自 IWR6843 SPI 从设备(在 MMWICBoost 板内)的消息发送到用作 SPI 主设备的外部微控制器。 这是我的代码片段,以及调用 SPI_TRANSF()时发生的错误的堆栈转储。
SPI 初始测试(不带雷达):我已在 mibspi_dma.c 中启用#define SPI_MULT_ICOUNT_support、并在计划通过 SPI 线路发送更多数据时重新编译毫米波 SPI 驱动器。 我尝试发送虚拟消息、如0、1、2、3 ... 它在2个 SPI 事务中发送的256 uint16_t 字上运行良好。
SPI 实际测试(使用雷达): 然后,我开始运行 IWR6843 DSS 以从常规演示中获取线性调频脉冲数据输出,然后在返回 MmwDemo_mboxReadTask()时,它首先通过 UART 发送数据,然后我再通过 SPI 通道发送数据。 这是我遇到问题的部分。
代码
void SPI_Init_Fcn (){ SPI_Params Params; DMA_Params dmaParams; /* Init SYSDMA 参数*/ dma_params_init (&dmaParams); /*为 SPI 打开 DMA 驱动程序实例0 */ dmaHandle = dma_open (0、&dmaParams、&errCode); if (dmaHandle ==空) { System_printf ("打开 DMA 驱动程序失败,错误=%d\n",错误代码); return;//jgi } spi_init(); /*设置 SPI 参数*/ SPI_PARAMS_INIT (params); params.frameFormat = SPI_POL0_PHA1;//jgi、您为何更改相位? //was SPI_POL0_PHA1 Params.pinMode = SPI_PINMODE_4PIN_CS; Params.ShiftFormat = SPI_MSB_FIRST; params.dataSize = 16; params.transferMode = SPI_MODE_BLOCKING;//jgi、已添加 /*启用 DMA 并设置要使用的 DMA 通道*/ params.dmaEnable = 1; params.dmaHandle = dmaHandle; params.eccEnable = 1; params.mode = SPI_SLAVE; params.u.slaveParams.chipSelect = 0; Params.U.slaveParams.dmaCfg.txDmaChanNum = 1U; Params.U.slaveParams.dmaCfg.rxDmaChanNum = 0U; //params.transferTime=TIMEOUT_MS;//SemaphoreP_PEND 描述说明设置超时(以 ms 为单位)、而不是像 TI 文档所说的//jgi:已启用时那样设置系统时钟 spiHandle = SPI_open (0、¶ms); } void SPI_Send_Transaction (){ SPI_Transaction 交易; //发送大型事务 TX_READY = LARGE_MSG; transaction.count=sizeof (TX_READY); transaction.txBuf=&TX_READY; transaction.rxBuf=&Rx_ready; spi_transfer (spiHandle、&transaction);//这是问题所在! }
让我了解一些见解或我可以尝试使其正常运行的事情。 非常感谢。