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!