This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28377D: spi hangs in tms3200 controller while reading from spi flash memory

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.