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.

Can't read SSI in slave mode

Other Parts Discussed in Thread: TM4C1230H6PM

I'm using a TM4C1230H6PM on a custom board and have already made use of three of the SSI peripherals in master mode for both Tx and Rx. The remaining SSI (SSI1) I want to read 16 bit data in slave mode with output disabled. It is currently set to use MOTO_MODE_3. The data currently comes in the form of blocks of 20 back-to-back transfers.

I've set up the interrupts to trigger when the Rx FIFO is at least half full. These trigger as they should for the 20x16 bit block. Only problem is, it looks like only zeros are being read. In the ISR I have:

SSIDataGet(SSI1_BASE, &RxBuff[buffCount]);

But this array only gets filled with zeros. Looking at the SSI1 data register in CCS I also see zeros. The SSI is configured as:

GPIOPinConfigure(GPIO_PF2_SSI1CLK);
GPIOPinConfigure(GPIO_PF3_SSI1FSS);
GPIOPinConfigure(GPIO_PF0_SSI1RX);

GPIOPinTypeSSI(GPIO_PORTF_BASE,GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3);

SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(),SSI_FRF_MOTO_MODE_3, SSI_MODE_SLAVE_OD,990000, SSI_CR0_DSS_16);

Some things I have tried:

  • Checking the Rx pin to make sure the signal reaches the MCU
  • Checking logic levels - logic high is at 3V for Clk, Fss and Rx, but the datasheet says this should be fine
  • Checking the pin used is correct (#28/ PF0)
  • Disabling the LED also on GPIOF
  • Setting data size to one byte - the interrupts triggered twice as fast as expected

Any ideas where the problem's root could be?

Thanks,

Kieran