So i have two devices using SPI, a LCD screen and SD card (both have the same MOSI, MISO, SCK lines). I was looking at the card which came with my device and I noticed that SSI3 and SSI1 both share the same pins. However I can set a different CS. With that in mind I set up my code as follows:
#define LCD_SSI_BASE SSI3_BASE
#define NRF_SSI_BASE SSI2_BASE
#define SDC_SSI_BASE SSI1_BASE
#define LCD_DC_SYSCTL_PERIPH SYSCTL_PERIPH_GPIOE
#define SSI1_GPIO_PORT_BASE_CS GPIO_PORTF_BASE
#define SSI1_GPIO_PORT_BASE GPIO_PORTD_BASE
#define SSI3_GPIO_PORT_BASE GPIO_PORTD_BASE
#define SSI1SCK GPIO_PD0_SSI1CLK
#define SSI1CS GPIO_PF3_SSI1FSS
#define SSI1MISO GPIO_PD2_SSI1RX
#define SSI1MOSI GPIO_PD3_SSI1TX
#define SSI3SCK GPIO_PD0_SSI3CLK
#define SSI3CS GPIO_PD1_SSI3FSS
#define SSI3MISO GPIO_PD2_SSI3RX
#define SSI3MOSI GPIO_PD3_SSI3TX
#define LCD_DC_PORT_BASE GPIO_PORTE_BASE
#define LCD_DC_PIN GPIO_PIN_4
// clock
#define LCD_SCLK_PIN GPIO_PIN_0
#define LCD_MOSI_PIN GPIO_PIN_3
#define LCD_MISO_PIN GPIO_PIN_2
#define LCD_CS_PIN GPIO_PIN_1
void initTivaForLCD()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); // LCD
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); //LCD
SysCtlPeripheralEnable (LCD_DC_SYSCTL_PERIPH);
GPIOPinTypeGPIOOutput (LCD_DC_PORT_BASE, LCD_DC_PIN);
GPIOPinConfigure(SSI3SCK);
GPIOPinConfigure(SSI3CS);
GPIOPinConfigure(SSI3MISO);
GPIOPinConfigure(SSI3MOSI);
GPIOPinTypeSSI(SSI3_GPIO_PORT_BASE, LCD_SCLK_PIN | LCD_MOSI_PIN | LCD_MISO_PIN | LCD_CS_PIN);
ROM_SSIConfigSetExpClk (LCD_SSI_BASE, ROM_SysCtlClockGet (),
SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 16000000, 8);
ROM_SSIEnable (LCD_SSI_BASE);
while(SSIDataGetNonBlocking(LCD_SSI_BASE, &ui32RcvDat))
{
}
}
void initTivaForSDC(void)
{
SysCtlPeripheralDisable(SYSCTL_PERIPH_SSI3);
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1); // SDC
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); //LCD
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); // SDC CS
GPIOPinConfigure(SSI1SCK);
GPIOPinConfigure(SSI1CS);
GPIOPinConfigure(SSI1MISO);
GPIOPinConfigure(SSI1MOSI);
GPIOPinTypeSSI(SSI1_GPIO_PORT_BASE, LCD_SCLK_PIN | LCD_MOSI_PIN | LCD_MISO_PIN | LCD_CS_PIN);
GPIOPinTypeSSI(SSI1_GPIO_PORT_BASE_CS, SDC_CS_PIN);
ROM_SSIConfigSetExpClk (SDC_SSI_BASE, ROM_SysCtlClockGet (),
SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 400000, 8);
ROM_SSIEnable (SDC_SSI_BASE);
while(SSIDataGetNonBlocking(LCD_SSI_BASE, &ui32RcvDat))
{
}
}
My plan was to call one of the two above functions prior to using SPI. Note that they share MOSI, MISO and SCK pins but the CS is different.
However when i try to run this I end up in `FaultISR()` When I call `GPIOPinConfigure()` on a pin that has already been configured. Do i need to do a reconfigure or something?
