I'm using the LPSPI periphery in an rt1052 as a slave and have some issues with the register access.
Any reads I do from the TCR register are quite inconsistent. Here is some example code:
slaveConfig.bitsPerFrame = 256;
slaveConfig.cpol = kLPSPI_ClockPolarityActiveHigh;
slaveConfig.cpha = kLPSPI_ClockPhaseFirstEdge;
slaveConfig.direction = kLPSPI_MsbFirst;
slaveConfig.whichPcs = kLPSPI_Pcs0;
slaveConfig.pcsActiveHighOrLow = kLPSPI_PcsActiveLow;
slaveConfig.pinCfg = kLPSPI_SdiInSdoOut;
slaveConfig.dataOutConfig = kLpspiDataOutTristate;
int err_reads = 0;
uint32_t ph_tcr = LPSPI_BASEADDR->TCR;
This gets stuck forever in the while loop. If I add a " LPSPI_FlushFifo(LPSPI_BASEADDR, true, true);" before the
TCR reads I seem to get more consistent behaviour and correct reads. This seems very weird to me as most of the provided drivers count on correct reading from the TCR and therefore don't work as expected, can you please clarify the correct access pattern for this register. I want to clarify that whatever I write in this register seems to be correctly applied, it is just that I cannot read it back correctly.
I have a second issue with this periphery - I'm reading the rx fifo in a Receive data interrupt and every other transfer, while I'm reading the FIFO the "receive error flag" goes up. My transfers are 32bytes (8 words in the FIFO) and I trigger them manually from the master side so it is absolutely impossible that the fifo overruns - furthermore whenever I read the status register I read the FIFO status register right after that and I never encounter value higher than 8 in the RXCOUNT field. Interestingly, I receive the data correctly - all the values and all are correct, it just bothers me that this error flag goes up all the time, and I cannot understand if there is an actual error.