Hi,
We work with SPI driver that has the following configuration:
SPI_TX_READY,SpiaRegs.SPICCR.bit.SPISWRESET = 0
SpiaRegs.SPICCR.bit.CLKPOLARITY=1
SpiaRegs.SPICCR.bit.SPICHAR=16
SpiaRegs.SPICCR.bit.SPILBK=0
SpiaRegs.SPICTL.bit.OVERRUNINTENA =0
SpiaRegs.SPICTL.bit.CLK_PHASE=0
SpiaRegs.SPICTL.bit.MASTER_SLAVE=1
SpiaRegs.SPICTL.bit.TALK=1,
SpiaRegs.SPICTL.bit.SPIINTENA=0,
SpiaRegs.SPIBRR=19
SPI_INTERRUPT_DISABLE,
SpiaRegs.SPIPRI.bit.FREE = 1;
SpiaRegs.SPIPRI.bit.SOFT =0
and transfer via spi each time 32bits:
write: 8bits-commandWrite+8-bits address+16bits data
read:8bits-commandRead+ 8-bits address+16bits dummy data and here we read 16bit-data
Read doesn't work stable. sometimes chipSelect is down after 16 bits and not after 32 bits.
In the Write command it ChipSelect work property: down after 32 bits always.
what could be the reason of this problem?
void CSPIInterface::spi_fifo_init()
{
SpiaRegs.SPIFFCT.all=0xFF;
SpiaRegs.SPIFFTX.bit.SPIRST = 1;
SpiaRegs.SPIFFTX.bit.TXFIFO = 1;
SpiaRegs.SPIFFTX.bit.TXFFINTCLR = 0
SpiaRegs.SPIFFTX.bit.TXFFIENA = 1;
SpiaRegs.SPIFFTX.bit.TXFFIL = 4;
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1
SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 0
SpiaRegs.SPIFFRX.bit.RXFFIENA = 1;
SpiaRegs.SPIFFTX.bit.RXFFIENA = 1;
SpiaRegs.SPIFFTX.bit.RXFFIL = 4;
}
void spi_transmit_and_wait(Uint16 data)
{
SpiaRegs.SPICTL.bit.TALK = 1; // Enable Transmit path
SpiaRegs.SPITXBUF = data; // Master transmits data
while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG !=0) {} // Waits until data rx’d
}
Uint16 spi_receive_and_wait(void)
{
Uint16 rdata = 0; Uint16 dummy = 0; Uint16 i = 0;
SpiaRegs.SPITXBUF = dummy; // Send dummy to start tx
for (i =0; i< 100; i++)
{
if(SpiaRegs.SPIFFRX.bit.RXFFST > 0)
{
break;
}
}
rdata = SpiaRegs.SPIRXBUF;
return rdata;
}
Uint16 TransmitSpiMessage2Words(Uint16 *Buff)
{
spi_transmit_and_wait(Buff[0]);
spi_transmit_and_wait(Buff[1]);
return NO_ERROR;
}
Uint16 ReceiveSpiMessage1Words(Uint16 *Buff)
{
spi_transmit_and_wait(Buff[0]);
Buff[1] = spi_receive_and_wait();
return NO_ERROR;
}
Could you please help usto solve this problem?
thanks,Sabina