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?