Hi,
Now the SPI communication is working with some restriction
i.e.
Restriction 1 -- Frequency rate reduced from 4Mhz to 1Mhz
Restriction 2 -- After every transaction if i call the function setupMaster() then only it is working fine, otherwise it is giving wrong values. But for SPI communication this function( setupMaster() ) call is not required for every transmission of data because it is only needed at the time of initialization. So please suggest me your ideas whether it is required every time or not ?
The below function shows that implementation for your reference
void spi_tx_rx(uint8_t *tx_buffer,int32_t tx, uint8_t *rx_buffer, int32_t rx)
{
volatile uint8_t *mstate;
spiMasterXfer.cbFunc = master_cb;
spiMasterXfer.state = SPIS_XFER_STATE_IDLE;
spiMasterXfer.txBuff = tx_buffer;
spiMasterXfer.txCount = tx; ///sizeof(masterTXBuffer16);// / sizeof(uint16_t);/* Count is in transfer size */
spiMasterXfer.rxBuff = rx_buffer;
spiMasterXfer.rxCount = rx; //sizeof(masterRXBuffer16);// / sizeof(uint16_t);/* Count is in transfer size */
mstate = &spiMasterXfer.state;
/* Setup master transfer options - 8 data bits per transfer, EOT, EOF */
spiMasterXfer.options = SPIM_XFER_OPTION_SIZE(8) | SPIM_XFER_OPTION_EOT | SPIM_XFER_OPTION_EOF | 0;
Chip_SPI_FlushFifos(LPC_SPIMASTERPORT);
Chip_SPIM_XferBlocking(LPC_SPIMASTERPORT, &spiMasterXfer);
while ( (*mstate != SPIM_XFER_STATE_DONE)){}
setupMaster();
}
I am using the above function like below
SPI_CS_LOW();
spi_tx_rx(masterTXBuffer16,packet_size,masterRXBuffer16,packet_size) ;
SPI_CS_HIGH();
static void setupMaster()
{
SPI_CFGSETUP_T spiSetup;
SPIM_DELAY_CONFIG_T masterDelay;
/* Initialize SPI controller */
Chip_SPI_Init(LPC_SPIMASTERPORT);
/* Call to initialize first SPI controller for mode0, master mode, MSB first */
Chip_SPI_Enable(LPC_SPIMASTERPORT);
spiSetup.master = 1;
spiSetup.lsbFirst = 0;
spiSetup.mode = SPI_CLOCK_MODE0;
Chip_SPI_ConfigureSPI(LPC_SPIMASTERPORT, &spiSetup);
/* Setup master controller SSEL0 for active low select */
Chip_SPI_SetCSPolLow(LPC_SPIMASTERPORT, 0);
/* Setup master clock rate, slave clock doesn't need to be setup */
Chip_SPIM_SetClockRate(LPC_SPIMASTERPORT, SPI_CLOCKRATE);
/* Setup master delay (all chip selects) */
masterDelay.PreDelay = 0xD;
masterDelay.PostDelay = 0xD;
masterDelay.FrameDelay = 0xD;
masterDelay.TransferDelay = 0xD;
Chip_SPIM_DelayConfig(LPC_SPIMASTERPORT, &masterDelay);
/* For the SPI controller configured in master mode, enable SPI master interrupts
for interrupt service. Do not enable SPI_INTENSET_TXDYEN. */
#if 0
Chip_SPI_EnableInts(LPC_SPIMASTERPORT, (SPI_INTENSET_RXDYEN |
SPI_INTENSET_RXOVEN | SPI_INTENSET_TXUREN | SPI_INTENSET_SSAEN |
SPI_INTENSET_SSDEN));
#endif
}
Please let me know if there's anything you'd like me to clarify