Tool/software: Code Composer Studio
I have been reading through the code in the D:\ti\mmwave_sdk_03_02_00_04\packages\ti\drivers\spi\test area and have been trying to apply it to my own application.
in PlatformInit I do this:
/* Setup the PINMUX to bring out the UART-1 */ Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINN5_PADBE, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR68XX_PINN5_PADBE, SOC_XWR68XX_PINN5_PADBE_MSS_UARTA_TX); Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINN4_PADBD, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR68XX_PINN4_PADBD, SOC_XWR68XX_PINN4_PADBD_MSS_UARTA_RX); /* Setup the PINMUX to bring out the UART-3 */ Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINF14_PADAJ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR68XX_PINF14_PADAJ, SOC_XWR68XX_PINF14_PADAJ_MSS_UARTB_TX); /* Set up PINMUX to bring out SPIA CS1 = E15, CLK1 = E13, MOSI1 = D13, MISO1 = E14, pins 19, 21, 23, 25 on 60pin connector */ /* SPIA_MOSI */ Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PIND13_PADAD, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR68XX_PIND13_PADAD, SOC_XWR68XX_PIND13_PADAD_SPIA_MOSI); /* SPIA_MISO */ Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINE14_PADAE, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR68XX_PINE14_PADAE, SOC_XWR68XX_PINE14_PADAE_SPIA_MISO); /* SPIA_CLK */ Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINE13_PADAF, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR68XX_PINE13_PADAF, SOC_XWR68XX_PINE13_PADAF_SPIA_CLK); /* SPIA_CS */ Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINE15_PADAG, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR68XX_PINE15_PADAG, SOC_XWR68XX_PINE15_PADAG_SPIA_CSN); /* SPI_HOST_INTR - not used, reference code */ Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINP13_PADAA, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR68XX_PINP13_PADAA, SOC_XWR68XX_PINP13_PADAA_SPI_HOST_INTR); /********************************************************************** * Setup the PINMUX: * - GPIO Output: Configure pin K13 as GPIO_2 output **********************************************************************/ Pinmux_Set_OverrideCtrl(SOC_XWR68XX_PINK13_PADAZ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR68XX_PINK13_PADAZ, SOC_XWR68XX_PINK13_PADAZ_GPIO_2);
in initTask, I do this: /* Init SYSDMA params */ DMA_Params_init(&dmaParams); /* Open DMA driver instance 0 for SPI test */ gDmaHandle = DMA_open(0, &dmaParams, &retVal); if(gDmaHandle == NULL) { printf("Open DMA driver failed with error=%d\n", retVal); return; } /* Initialize the UART */ UART_init(); /* Initialize the GPIO */ GPIO_init(); /* Initialize Spi */ System_printf("Debug: SPI_init\n"); SPI_init(); /* Setup the default SPI Parameters */
SPI_Params_init(&spiParams);
spiParams.frameFormat = SPI_POL0_PHA0;
spiParams.shiftFormat = SPI_MSB_FIRST;
//spiParams.pinMode = SPI_PINMODE_3PIN;
spiParams.pinMode = SPI_PINMODE_4PIN_CS;
/* Enable DMA and set DMA channels */
spiParams.dmaEnable = 1U;
spiParams.dmaHandle = gDmaHandle;
//spiParams.dmaHandle = (DMA_Handle)NULL;
//spiParams.eccEnable = 1U;
spiParams.mode = SPI_MASTER;
spiParams.u.masterParams.bitRate = 10000000U;
spiParams.u.masterParams.numSlaves = 1;
spiParams.u.masterParams.slaveProf[0].chipSelect = 0;
spiParams.u.masterParams.slaveProf[0].ramBufLen = MIBSPI_RAM_MAX_ELEM;
spiParams.u.masterParams.slaveProf[0].dmaCfg.txDmaChanNum =1U;
spiParams.u.masterParams.slaveProf[0].dmaCfg.rxDmaChanNum =0U;
/* Enable output control for SPIA 3-pin Mode */
if(SOC_SPIOutputCtrl(gMmwMssMCB.socHandle, 0U, 0U, &errCode) < 0)
{
/* Debug Message: */
System_printf ("Debug: SOC_SPIOutputCtrl failed with Error [%d]\n", errCode);
return;
}
/* Open the Logging SPI Instance: */
System_printf("Opening SPI\n");
gMmwMssMCB.loggingSpiHandle = SPI_open(0, &spiParams);
if (!gMmwMssMCB.loggingSpiHandle) {
System_printf("SPI did not open");
}
I copied this function from the test code:
static bool Test_spiWrite(const SPI_Handle handle, void* buffer, uint32_t dataLen)
{
System_printf("datalen 0x%x\n", dataLen);
System_printf("0x%x 0x%x\n", buffer[0], buffer[1] );
SPI_Transaction transaction;
bool ret = true;
#if 1
//Configure Data Transfer
transaction.count = dataLen;
transaction.txBuf = buffer;
transaction.rxBuf = NULL;
//transaction.arg = NULL;
/* Start Data Transfer */
ret = SPI_transfer(handle, &transaction);
if (!ret) {
System_printf("Unsuccessful SPI transfer 0x%x\n", ret);
} else {
System_printf("Successful SPI transfer 0x%x\n", ret);
}
#else
uint32_t loop;
char * pBuff = buffer;
for (loop=0; loop<dataLen/2; loop++)
{
/* Configure Data Transfer */
transaction.count = 2;
transaction.txBuf = pBuff;
transaction.rxBuf = NULL;
//transaction.arg = NULL;
/* Start Data Transfer */
ret = SPI_transfer(handle, &transaction);
if (!ret) {
System_printf("Unsuccessful SPI transfer 0x%x, loop: 0x%x\n", ret, loop);
}
pBuff += 2;
}
#endif
return ret;
}
I call it from here:
Test_spiWrite(spiHandle, (uint8_t*)&header, sizeof(MmwDemo_output_message_header));
SPI_transfer always return 0, and I don't see any activity on the output pins of the device.
Can you tell what I am missing here?
Thanks