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.

F28027 SPI FIFO LEVEL problem

Hi,

I have a problem achieving an SPI transmit with FIFO level of 7 as a master on F28027. Basically, I want to send seven bytes in a row, because my SPI slave needs 1 byte with address and then 6 bytes of data to write to this address. I used PICCOLO SPI loopback example as a template to modify my code, but I'm getting only 5 bytes on SPISIMO. Modifying FIFO level doesn't take effect, it's always on 5 for some reason. I don't use interrupts and don't use RX. Here's the problematic code:

void delay_loop(void);
void spi_fifo_init(void);


void main(void)
{

typedef struct {
Uint16 Txdata1;
Uint16 Txdata2;
Uint16 Txdata3;
Uint16 Txdata4;
Uint16 Txdata5;
Uint16 Txdata6;
Uint16 Txdata7;
} REG1;

REG1 REG01;

REG01.Txdata1 = 0x07;
REG01.Txdata2 = 0x10;
REG01.Txdata3 = 0x24;
REG01.Txdata4 = 0x01;
REG01.Txdata5 = 0x01;
REG01.Txdata6 = 0x00;
REG01.Txdata7 = 0x00;

   InitSysCtrl();

   InitSpiaGpio();

   DINT;

   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;

   InitPieVectTable();

   spi_fifo_init();  // Initialize the Spi FIFO

SpiaRegs.SPITXBUF = REG01.Txdata1<<8; 
SpiaRegs.SPITXBUF = REG01.Txdata2<<8; 
SpiaRegs.SPITXBUF = REG01.Txdata3<<8;
SpiaRegs.SPITXBUF = REG01.Txdata4<<8;
SpiaRegs.SPITXBUF = REG01.Txdata5<<8;
SpiaRegs.SPITXBUF = REG01.Txdata6<<8;
SpiaRegs.SPITXBUF = REG01.Txdata7<<8;

delay_loop();

}

void delay_loop()
{
long i;
for (i = 0; i < 35000; i++) {} //10000000
}

void spi_fifo_init()
{
// Initialize SPI FIFO registers
// SpiaRegs.SPIFFTX.bit.SPIRST = 1;
// SpiaRegs.SPIFFTX.bit.SPIFFENA = 1; // enable fifo enhancements
// SpiaRegs.SPIFFTX.bit.TXFIFO = 1; // re-enable tx fifo



SpiaRegs.SPICCR.all=0x0007; //8-bit
SpiaRegs.SPIFFTX.all=0xC006; // Enable FIFO's, set TX FIFO level to 7
SpiaRegs.SPICTL.all=0x0006; //Interrupt enabled, Master/Slave XMIT enabled -17
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.SPIBRR=0x0063; // Baud rate
SpiaRegs.SPIFFCT.all=0x00; // No time delay between packets
SpiaRegs.SPIPRI.all=0x0010; //Priority control - transmit until FIFOTX empty
SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SPI

SpiaRegs.SPIFFTX.bit.TXFIFO=1;

}