Part Number: TMS320F28377D
Hello, I am interfacing TMS320F28377D microcontroller with spi flash (MX25L256), I am using FIFO with spi with following configurations:
SpibRegs.SPIFFTX.all = 0xC022; // Enable FIFOs, set TX FIFO level to 4
SpibRegs.SPIFFTX.bit.SPIFFENA = 1;
SpibRegs.SPIFFTX.bit.TXFIFO = 1;
SpibRegs.SPIFFTX.bit.TXFFIENA = 0;
SpibRegs.SPIFFRX.all = 0x0022; // Set RX FIFO level to 4
SpibRegs.SPIFFCT.all = 0x00;
SpibRegs.SPIFFTX.bit.TXFIFO=1;
SpibRegs.SPIFFRX.bit.RXFIFORESET=1;
SpibRegs.SPIFFCT.bit.TXDLY=0;
SpibRegs.SPICCR.bit.SPISWRESET = 0;
SpibRegs.SPICCR.bit.CLKPOLARITY= 0;
SpibRegs.SPICTL.bit.CLK_PHASE = 1;
SpibRegs.SPICCR.bit.SPICHAR = (8-1);
SpibRegs.SPICCR.bit.SPILBK = 0;
SpibRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpibRegs.SPICTL.bit.TALK = 1;
SpibRegs.SPICTL.bit.SPIINTENA = 0;
SpibRegs.SPIFFRX.bit.RXFFIENA = 0;
SpibRegs.SPIFFRX.bit.RXFFIL = 15; //16WORD RECEIVE FIFO LEVEL
// Set the baud rate
SpibRegs.SPIBRR.bit.SPI_BIT_RATE = 0; //100/4=25Mhz
// Set FREE bit
// Halting on a breakpoint will not halt the SPI
SpibRegs.SPIPRI.bit.FREE = 1;
// Release the SPI from reset
SpibRegs.SPICCR.bit.SPISWRESET = 1;
and my spi send code looks like:
uint8_t sFLASH_SendByte(uint8_t byte)
{
unsigned int temp = byte,timeout=0;
FRAM_TX = temp<<8;
while(SpibRegs.SPIFFRX.bit.RXFFST<1)
{
timeout++;
}
temp = FRAM_RX;
return temp & 0xff;
}
So my problem is while running the code sometimes, spi hangs and it stays in timeout++;
Please suggest me the solution.