Other Parts Discussed in Thread: EK-TM4C123GXL
I cant seem to port a program that was working for me on a tm4c123gxl launchpad. I am trying to control the Nokia 5110 LCD using SSI0 on a TM4C1294XL launchpad. The application looks pretty straight forward but I doing something wrong. Can someone please provide some feedback? I don't see anything coming up on the LCD.
int main(void)
{
uint32_t l_ui32SysClock = 0;
// Run from the PLL at 10 MHz and save off setting
l_ui32SysClock = ROM_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 10000000);
// enable portA and SSI0
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
// enable SSI pins
ROM_GPIOPinConfigure(GPIO_PA2_SSI0CLK); // clk pa2
ROM_GPIOPinConfigure(GPIO_PA3_SSI0FSS); // fss pa3
ROM_GPIOPinConfigure(GPIO_PA5_SSI0XDAT1); // tx, pa5
ROM_GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5);
// enable DC pin
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_6); //dc, pa6
// Disable SSI0
ROM_SSIDisable(SSI0_BASE);
// Configure SSI0
ROM_SSIConfigSetExpClk(SSI0_BASE, l_ui32SysClock, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8);
// Enable SSI0
ROM_SSIEnable(SSI0_BASE);
// wait on any prior transaction
while(ROM_SSIBusy(SSI0_BASE)){}
// set DC pin for commands (low)
ROM_GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_6, 0);
// pin setup time
ROM_SysCtlDelay(10);
// LCD INIT
ROM_SSIDataPut(SSI0_BASE, 0x21);// chip active
ROM_SSIDataPut(SSI0_BASE, 0x13);// LCD bias mode 1:48
ROM_SSIDataPut(SSI0_BASE, 0xB8);// 0xB8 (for 3.3V blue SparkFun)
ROM_SSIDataPut(SSI0_BASE, 0x20);// send 0x20 before modifying the display control mode
ROM_SSIDataPut(SSI0_BASE, 0x0C);// set display control to normal mode
ROM_SSIDataPut(SSI0_BASE, 0x80);// x origin 0
ROM_SSIDataPut(SSI0_BASE, 0x40);// y origin 0
// wait on any prior transaction
while(ROM_SSIBusy(SSI0_BASE)){}
// set DC pin for data (high)
ROM_GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_6, GPIO_PIN_6);
// pin setup time
ROM_SysCtlDelay(10);
// data
ROM_SSIDataPut(SSI0_BASE, 0x00);//
ROM_SSIDataPut(SSI0_BASE, 0x52);// 'R'
ROM_SSIDataPut(SSI0_BASE, 0x00);//
ROM_SysCtlDelay(10000);
while (1){}
}
Pin setup on LCD side:
- RST - empty
- CE - PA3
- DC - PA6
- DIN - PA5
- CLK - PA2
- Vcc - +3V3
- Gnd - GND
Thanks in advance!