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.

TMS320F28027: Not reading received SPI data

Part Number: TMS320F28027


Hello!

SPI seems to be working in Loopback mode.  I send data and see it returned via SPIRXBUF.

When I try connecting to a real device, I see the expected data at the MISO pin (using a logic analyzer), but I am not seeing it via the reads from SPIRXBUF. 

I am configuring GPIO17 as

// GPIO-17 - PIN FUNCTION = SPI MISO
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // 0=GPIO, 1=SPISOMI-A, 2=Resv, 3=TZ3
GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 0x3; // Async
GpioCtrlRegs.GPADIR.bit.GPIO17 = 0; // 1=OUTput, 0=INput

I am configuring SPI with

// SPI Reset
SpiaRegs.SPICCR.bit.SPISWRESET = 0x0;
SpiaRegs.SPICCR.bit.SPISWRESET = 0x1;

SpiaRegs.SPICCR.bit.SPICHAR = 0x7; // 8-bit
SpiaRegs.SPICTL.bit.TALK = 0x1; // Transmit enable
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0x1; // Master
SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0x1; // Enable SPI Overrun INT


SpiaRegs.SPIBRR = 29; // 1Mbaud @ LSPCLK = 30 MHz

SpiaRegs.SPICTL.bit.CLK_PHASE = 0x1; // SPI_ClkPhase_Delayed

SpiaRegs.SPICCR.bit.SPILBK = 0x0; // Enable/disable Loopback

SpiaRegs.SPIFFTX.bit.SPIFFENA = 0x1; // SPI FIFO Enhancements enable

SpiaRegs.SPIFFTX.bit.SPIRST = 0;
SpiaRegs.SPIFFTX.bit.SPIRST = 1;


SpiaRegs.SPIFFTX.bit.TXFIFO = 0x0; // Reset transmit FIFO
SpiaRegs.SPIFFTX.bit.TXFFINTCLR = 0x1;

SpiaRegs.SPIFFRX.bit.RXFIFORESET = 0x0; // Reset receive FIFO
SpiaRegs.SPIFFRX.bit.RXFFIL = 0x3; // Interrupt level at 3 words
SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 0x1;
SpiaRegs.SPIFFRX.bit.RXFFIENA = 0x1; // Enable Rx FIFO Interrupt

SpiaRegs.SPIFFTX.bit.TXFIFO = 0x1;

SpiaRegs.SPIFFRX.bit.RXFIFORESET = 0x1;

I am setting the interrupt for receiving at three words

When entering the SPI ISR, SPIFFRX = 0x23A3, and after I read from the SPIRXBUF three times, SPIFFRX = 0x20A3

I'm reading SPIRXBUF by

volatile uint16_t data;

 data = SpiaRegs.SPIRXBUF;

This read works as expected in loopback mode

Any ideas on why I am not seeing the data get from the pin to SPIRXBUF?  Or other things to try?