Hi,
I am using lpc55s28 evk , using the demo example of spi_HS_LSPI_dma_b2b_transfer_master as a reference and changed the default spi settings clock .to communicate to my slave mikroe click .
I am trying to read the spi slave id which is 0x60 but always getting 0xFF instead.
Kindly suggest any solution. Below is the code :
static void EXAMPLE_MasterInit(void)
{
/* SPI init */
uint32_t srcClock_Hz = 0U;
spi_master_config_t masterConfig;
srcClock_Hz = EXAMPLE_SPI_MASTER_CLK_FREQ;
SPI_MasterGetDefaultConfig(&masterConfig);
masterConfig.sselNum = (spi_ssel_t)EXAMPLE_SPI_SSEL;
masterConfig.sselPol = (spi_spol_t)EXAMPLE_MASTER_SPI_SPOL;
masterConfig.baudRate_Bps = 500000U;
masterConfig.polarity = kSPI_ClockPolarityActiveHigh;
masterConfig.phase = kSPI_ClockPhaseFirstEdge; //first
masterConfig.direction = kSPI_MsbFirst;
masterConfig.dataWidth = kSPI_Data8Bits;
masterConfig.sselNum = kSPI_Ssel1;
masterConfig.txWatermark = (uint8_t)kSPI_TxFifo0;
masterConfig.rxWatermark = (uint8_t)kSPI_RxFifo1;
masterConfig.sselPol = kSPI_SpolActiveAllLow;
SPI_MasterInit(EXAMPLE_SPI_MASTER, &masterConfig, srcClock_Hz);
}
static void EXAMPLE_MasterStartDMATransfer(void)
{
spi_transfer_t masterXfer;
uint32_t i = 0U;
/* Set up the transfer data */
/* SPI is configured for 8 bits transfer - set only lower 8 bits of buffers */
masterTxDatan[0] = 0xD0; //id register
masterRxDatan[0] = 0U;
/* Set up handle for spi master */
SPI_MasterTransferCreateHandleDMA(EXAMPLE_SPI_MASTER, &masterHandle, SPI_MasterUserCallback, NULL, &masterTxHandle,
&masterRxHandle);
/* Start master transfer */
masterXfer.txData = (uint8_t *)&masterTxDatan;
masterXfer.rxData = (uint8_t *)&masterRxDatan;
masterXfer.dataSize = TRANSFER_SIZE * sizeof(masterTxDatan[0]);
masterXfer.configFlags = kSPI_FrameAssert;
if (kStatus_Success != SPI_MasterTransferDMA(EXAMPLE_SPI_MASTER, &masterHandle, &masterXfer))
{
PRINTF("There is an error when start SPI_MasterTransferDMA \r\n ");
}
}
int main(void)
{
/* Initialize board setting. */
/* set BOD VBAT level to 1.65V */
POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv, kPOWER_BodHystLevel50mv, false);
/* attach 12 MHz clock to FLEXCOMM0 (debug console) */
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
CLOCK_SetClkDiv(kCLOCK_DivPll0Clk, 0U, true); /*!< Reset PLL0DIV divider counter and halt it */
CLOCK_SetClkDiv(kCLOCK_DivPll0Clk, 24U, false); /*!< Set PLL0DIV divider to value 24 */
/*!< Set up clock selectors - Attach clocks to the peripheries */
CLOCK_AttachClk(kPLL0_to_MAIN_CLK); /*!< Switch MAIN_CLK to PLL0 */
CLOCK_AttachClk(kPLL0_DIV_to_HSLSPI); /*!< Switch HSLSPI to PLL0_DIV */
/* reset FLEXCOMM for SPI */
RESET_PeripheralReset(kHSLSPI_RST_SHIFT_RSTn);
/* Print project information. */
PRINTF("This is SPI DMA transfer master example.\r\n");
PRINTF("This example will communicate with another slave SPI on the other board.\r\n");
/* Initialize SPI master with configuration. */
EXAMPLE_MasterInit();
/* Set up DMA for SPI master TX and RX channel. */
EXAMPLE_MasterDMASetup();
/* Prepare DMA and start SPI master transfer in DMA way. */
EXAMPLE_MasterStartDMATransfer();
while (!isTransferCompleted)
{
}
uint32_t i;
for(i = 0 ; i<TRANSFER_SIZE ; i++)
{
PRINTF("masterRxDataan[%d] = %x \r\n",i,masterRxDatan[i]);
}
SPI_Deinit(EXAMPLE_SPI_MASTER);
return 0;
}
Thanks