I am trying to control the LCD screen (a ST7735, unknown tab color, assuming green) on my Educational Boosterpack MKII with my TM4C129EXL on booster pack 1. I have been coding this for a while and cannot get anywhere. The closest I got was the screen have a few frames of black and white blocks. It happened once and then never again. I feel like the LCD screen glitched. I cannot find anywhere online where anyone has done this. I would love it if someone could look through my code and tell me where I made a mistake. There are no errors, but the code is still not working. Any help would be greatly appreciated.
I cannot upload the code files to StackOverflow, so here is the main code that I need to get fixed up; it is not the whole file, but the main beginning. Apologies for all the lines of code, but it is a LONG program.
Here is the main.c:
#include <stdint.h>
#include <stdbool.h>
#include "LCD_Defines.h"
void static writeCMD(uint8_t c){
TFT_CS = TFT_CS_LOW;
DC = DC_COMMAND;
SSI2[SSI_DR] = c;
while ((SSI2[SSI_SR] & 0x10) == 0x10){};
}
void static writeData(uint8_t c){
while ((SSI2[SSI_SR] & 0x02) == 0){};
DC = DC_COMMAND;
SSI2[SSI_DR] = c;
}
void static deselect(void){
while ((SSI2[SSI_SR] & 0x10) == 0x10){};
TFT_CS = TFT_CS_HIGH;
}
void static setAddr(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1){
writeCMD(CASET);
writeData(0x00);
writeData(x0+ColStart);
writeData(0x00);
writeData(x1+ColStart);
writeCMD(RASET);
writeData(0x00);
writeData(y0+RowStart);
writeData(0x00);
writeData(y1+RowStart);
writeCMD(RAMWR);
}
void static commandList(const uint8_t *addr){
uint8_t numCommand, numArgs;
uint16_t ms;
numCommand = *(addr++);
while (numCommand--){
writeCMD(*(addr++));
numArgs = *(addr++);
ms = numArgs & DELAY;
numArgs &= ~DELAY;
while (numArgs--)
writeData(*(addr++));
if (ms){
ms = *(addr++);
ms = (ms == 255) ? 500:ms;
for (int i = 0; i < ms; i++)
while((SysTick[STCTRL] & 0x10000) == 0){}
}
}
}
void setCursor(uint32_t newX, uint32_t newY){
if((newX > 20) || (newY > 12))
return;
StX = newX;
StY = newY;
}
void fillScreen(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color){
uint8_t hi = color >> 8, lo = color;
if((x >= width) || (y >= height)) return;
if((x + w - 1) >= width) w = width - x;
if((y + h - 1) >= height) h = height - y;
setAddr(x, y, x+w-1, y+h-1);
for(y=h; y>0; y--){
for(x=w; x>0; x--){
writeData(hi);
writeData(lo);
}
}
deselect();
}
void static commonInit(const uint8_t *cmdList){
ColStart = RowStart = 0;
SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTD;
SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTH;
SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTL;
SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTN;
SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTD;
SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTH;
SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTL;
SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTN;
SYSCTL[SYSCTL_RCGCSSI] |= 0x4;
while ((SYSCTL[SYSCTL_PRSSI] & 0x4) == 0){};
GPIO_PORTD[GPIO_FSEL] |= 0xA;
GPIO_PORTD[GPIO_PCTL] |= 0xF0F0;
GPIO_PORTD[GPIO_DEN] |= SPICl;
GPIO_PORTD[GPIO_DEN] |= SPIMOSI;
GPIO_PORTH[GPIO_DEN] |= SPIRST;
GPIO_PORTL[GPIO_DEN] |= SPIREG;
GPIO_PORTN[GPIO_DEN] |= SPICS;
GPIO_PORTH[GPIO_DIR] |= SPIRST;
GPIO_PORTL[GPIO_DIR] |= SPIREG;
GPIO_PORTN[GPIO_DIR] |= SPICS;
TFT_CS = TFT_CS_LOW;
while ((SYSCTL[SYSCTL_SRSSI] & 0x4) == 1){
RESET = RESET_HIGH;
for (int i = 0; i < 500; i++)
while((SysTick[STCTRL] & 0x10000) == 0){}
RESET = RESET_LOW;
for (int i = 0; i < 500; i++)
while((SysTick[STCTRL] & 0x10000) == 0){}
RESET = RESET_HIGH;
for (int i = 0; i < 500; i++)
while((SysTick[STCTRL] & 0x10000) == 0){}
}
SYSCTL[SYSCTL_SRSSI] &= ~0x4;
SSI2[SSI_CR1] &= ~0x2;
SSI2[SSI_CR1] &= ~0x4;
SSI2[SSI_CC] &= ~0xF;
SSI2[SSI_PS] = 30;
SSI2[SSI_CR0] &= ~(0xFF00 | 0x80 | 0x40);
SSI2[SSI_CR0] &= ~0x30;
SSI2[SSI_CR0] = 0x7;
SSI2[SSI_CR1] |= 0x2;
if (cmdList)
commandList(cmdList);
}
void static initS(enum initSFlags option){
commonInit(Scmd1);
if (option == INITS_GREENTAB){
commandList(Scmd2green);
ColStart = 2;
RowStart = 3;
}else
commandList(Scmd2red);
commandList(Scmd3);
if (option == INITS_BLACKTAB) {
writeCMD(MADCTL);
writeData(0xC0);
}
TabColor = option;
setCursor(0,0);
StTextColor = YELLOW;
fillScreen(0,0,width,height,0);
}
void pll(void){
uint32_t tmp;
SYSCTL[SYSCTL_MOSCCTL] &= ~(SYSCTL_MOSCCTL_NOXTAL | SYSCTL_MOSCCTL_PWRDN);
if (!(SYSCTL[SYSCTL_MOSCCTL] & SYSCTL_MOSCCTL_OSCRNG)){
SYSCTL[SYSCTL_MOSCCTL] |= SYSCTL_MOSCCTL_OSCRNG;
while (!(SYSCTL[SYSCTL_RIS] & SYSCTL_RIS_MOSCPUPRIS));
}
SYSCTL[SYSCTL_MISC] = SYSCTL_MISC_MOSCPUMIS;
SYSCTL[SYSCTL_RSCLKCFG] |= SYSCTL_RSCLKCFG_OSCSRC_MOSC | SYSCTL_RSCLKCFG_PLLSRC_MOSC;
SYSCTL[SYSCTL_PLLFREQ0] = (96 << SYSCTL_PLLFREQ0_MINT_S) | (0 << SYSCTL_PLLFREQ0_MFRAC_S);
SYSCTL[SYSCTL_PLLFREQ1] = 4;
tmp = SYSCTL[SYSCTL_MEMTIM0];
tmp &= ~(SYSCTL_MEMTIM0_EBCHT_M | SYSCTL_MEMTIM0_EWS_M | SYSCTL_MEMTIM0_EBCE);
tmp |= SYSCTL_MEMTIM0_FBCHT_3_5 | SYSCTL_MEMTIM0_EWS_6;
tmp &= ~(SYSCTL_MEMTIM0_FBCHT_M | SYSCTL_MEMTIM0_FWS_M | SYSCTL_MEMTIM0_FBCE);
tmp |= SYSCTL_MEMTIM0_FBCHT_3_5| SYSCTL_MEMTIM0_FWS_6;
SYSCTL[SYSCTL_MEMTIM0] = tmp;
SYSCTL[SYSCTL_PLLFREQ0] |= SYSCTL_PLLFREQ0_PLLPWR;
SYSCTL[SYSCTL_RSCLKCFG] |= SYSCTL_RSCLKCFG_NEWFREQ;
while (!SYSCTL[SYSCTL_PLLSTAT]);
tmp = SYSCTL[SYSCTL_RSCLKCFG];
tmp = (tmp & ~SYSCTL_RSCLKCFG_PSYSDIV_M) | SYSCTL_RSCLKCFG_PSYSDIV_3;
tmp |= SYSCTL_RSCLKCFG_USEPLL | SYSCTL_RSCLKCFG_MEMTIMU;
SYSCTL[SYSCTL_RSCLKCFG] = tmp;
}
void main(void)
{
pll();
SysTick[STCTRL] = 0;
SysTick[STCURRENT] = 0;
SysTick[STRELOAD] = 0x1D4BF;
SysTick[STCTRL] = 0x5;
initS(INITS_GREENTAB);
while(true){
}
}
Here is the needed .h file:
#define GPIO_PORTD ((volatile uint32_t *)0x4005B000)
#define GPIO_PORTH ((volatile uint32_t *)0x4005F000)
#define GPIO_PORTL ((volatile uint32_t *)0x40062000)
#define GPIO_PORTN ((volatile uint32_t *)0x40064000)
#define SYSCTL ((volatile uint32_t *)0x400FE000)
#define SSI2 ((volatile uint32_t *)0x4000A000)
#define SysTick ((volatile uint32_t *)0xE000E000)
#define SYSCTL_RCGCGPIO_PORTD (1 << 3)
#define SYSCTL_RCGCGPIO_PORTH (1 << 7)
#define SYSCTL_RCGCGPIO_PORTL (1 << 10)
#define SYSCTL_RCGCGPIO_PORTN (1 << 12)
#define GPIO_PIN_1 (1 << 1)
#define GPIO_PIN_2 (1 << 2)
#define GPIO_PIN_3 (1 << 3)
#define SYSCTL_MOSCCTL_PWRDN (1 << 3)
#define SYSCTL_MOSCCTL_NOXTAL (1 << 2)
#define SYSCTL_MOSCCTL_OSCRNG (1 << 4)
#define SYSCTL_RIS_MOSCPUPRIS (1 << 8)
#define SYSCTL_MISC_MOSCPUMIS (1 << 8)
#define SYSCTL_RSCLKCFG_OSCSRC_MOSC (3 << 20)
#define SYSCTL_RSCLKCFG_PLLSRC_MOSC (3 << 24)
#define SYSCTL_RSCLKCFG_NEWFREQ (1 << 30)
#define SYSCTL_RSCLKCFG_PSYSDIV_M (0x3ff >> 0)
#define SYSCTL_RSCLKCFG_PSYSDIV_3 3
#define SYSCTL_RSCLKCFG_USEPLL (1 << 28)
#define SYSCTL_RSCLKCFG_MEMTIMU (1 << 31)
#define SYSCTL_PLLFREQ0_MINT_S 0
#define SYSCTL_PLLFREQ0_MFRAC_S 10
#define SYSCTL_PLLFREQ0_PLLPWR (1 << 23)
#define SYSCTL_MEMTIM0_EBCHT_M (0b1111 << 22)
#define SYSCTL_MEMTIM0_EWS_M (0b1111 << 16)
#define SYSCTL_MEMTIM0_EBCE (1 << 21)
#define SYSCTL_MEMTIM0_FBCHT_3_5 (6 << 6)
#define SYSCTL_MEMTIM0_EWS_6 (6 << 16)
#define SYSCTL_MEMTIM0_FBCHT_M (0b1111 << 6)
#define SYSCTL_MEMTIM0_FWS_M (0b1111 >> 0)
#define SYSCTL_MEMTIM0_FBCE (1 << 5)
#define SYSCTL_MEMTIM0_FWS_6 (6 >> 0)
#define SPICl GPIO_PIN_3
#define SPICS GPIO_PIN_2
#define SPIMOSI GPIO_PIN_1
#define SPIRST GPIO_PIN_3
#define SPIREG GPIO_PIN_3
#define WIDTH 128
#define HEIGHT 128
//color constants red grn blu
#define BLACK 0x0000 // 0, 0, 0
#define BLUE 0x001F // 0, 0, 255
#define DARKBLUE 0x34BF // 50, 150, 255
#define RED 0xF800 // 255, 0, 0
#define GREEN 0x07E0 // 0, 255, 0
#define LIGHTGREEN 0x07EF // 0, 255, 120
#define ORANGE 0xFD60 // 255, 175, 0
#define CYAN 0x07FF // 0, 255, 255
#define MAGENTA 0xF81F // 255, 0, 255
#define YELLOW 0xFFE0 // 255, 255, 0
#define WHITE 0xFFFF // 255, 255, 255
#define GREY 0x8410 // 128, 128, 128
#define NOP 0x00
#define SWRESET 0x01
#define RDDID 0x04
#define RDDST 0x09
#define SLPIN 0x10
#define SLPOUT 0x11
#define PTLON 0x12
#define NORON 0x13
#define INVOFF 0x20
#define INVON 0x21
#define DISPOFF 0x28
#define DISPON 0x29
#define CASET 0x2A
#define RASET 0x2B
#define RAMWR 0x2C
#define RAMRD 0x2E
#define PTLAR 0x30
#define COLMOD 0x3A
#define MADCTL 0x36
#define FRMCTR1 0xB1
#define FRMCTR2 0xB2
#define FRMCTR3 0xB3
#define INVCTR 0xB4
#define DISSET5 0xB6
#define PWCTR1 0xC0
#define PWCTR2 0xC1
#define PWCTR3 0xC2
#define PWCTR4 0xC3
#define PWCTR5 0xC4
#define VMCTR1 0xC5
#define RDID1 0xDA
#define RDID2 0xDB
#define RDID3 0xDC
#define RDID4 0xDD
#define PWCTR6 0xFC
#define GMCTRP1 0xE0
#define GMCTRN1 0xE1
#define MADCTL_MY 0x80
#define MADCTL_MX 0x40
#define MADCTL_MV 0x20
#define MADCTL_ML 0x10
#define MADCTL_RGB 0x00
#define MADCTL_BGR 0x08
#define MADCTL_MH 0x04
#define TFT_CS GPIO_PORTN[0x10]
#define TFT_CS_LOW 0
#define TFT_CS_HIGH 0x4
#define DC GPIO_PORTL[0x20]
#define DC_COMMAND 0
#define RESET GPIO_PORTH[0x20]
#define RESET_LOW 0
#define RESET_HIGH 0x8
#define DELAY 0x80
static const uint8_t Font[] = {
0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
0x18, 0x3C, 0x7E, 0x3C, 0x18,
0x1C, 0x57, 0x7D, 0x57, 0x1C,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C,
0x00, 0x18, 0x3C, 0x18, 0x00,
0xFF, 0xE7, 0xC3, 0xE7, 0xFF,
0x00, 0x18, 0x24, 0x18, 0x00,
0xFF, 0xE7, 0xDB, 0xE7, 0xFF,
0x30, 0x48, 0x3A, 0x06, 0x0E,
0x26, 0x29, 0x79, 0x29, 0x26,
0x40, 0x7F, 0x05, 0x05, 0x07,
0x40, 0x7F, 0x05, 0x25, 0x3F,
0x5A, 0x3C, 0xE7, 0x3C, 0x5A,
0x7F, 0x3E, 0x1C, 0x1C, 0x08,
0x08, 0x1C, 0x1C, 0x3E, 0x7F,
0x14, 0x22, 0x7F, 0x22, 0x14,
0x5F, 0x5F, 0x00, 0x5F, 0x5F,
0x06, 0x09, 0x7F, 0x01, 0x7F,
0x00, 0x66, 0x89, 0x95, 0x6A,
0x60, 0x60, 0x60, 0x60, 0x60,
0x94, 0xA2, 0xFF, 0xA2, 0x94,
0x08, 0x04, 0x7E, 0x04, 0x08,
0x10, 0x20, 0x7E, 0x20, 0x10,
0x08, 0x08, 0x2A, 0x1C, 0x08,
0x08, 0x1C, 0x2A, 0x08, 0x08,
0x1E, 0x10, 0x10, 0x10, 0x10,
0x0C, 0x1E, 0x0C, 0x1E, 0x0C,
0x30, 0x38, 0x3E, 0x38, 0x30,
0x06, 0x0E, 0x3E, 0x0E, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5F, 0x00, 0x00,
0x00, 0x07, 0x00, 0x07, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14,
0x24, 0x2A, 0x7F, 0x2A, 0x12,
0x23, 0x13, 0x08, 0x64, 0x62,
0x36, 0x49, 0x56, 0x20, 0x50,
0x00, 0x08, 0x07, 0x03, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00,
0x2A, 0x1C, 0x7F, 0x1C, 0x2A,
0x08, 0x08, 0x3E, 0x08, 0x08,
0x00, 0x80, 0x70, 0x30, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08,
0x00, 0x00, 0x60, 0x60, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02,
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x00, 0x42, 0x7F, 0x40, 0x00, // 1
0x72, 0x49, 0x49, 0x49, 0x46, // 2
0x21, 0x41, 0x49, 0x4D, 0x33, // 3
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x3C, 0x4A, 0x49, 0x49, 0x31, // 6
0x41, 0x21, 0x11, 0x09, 0x07, // 7
0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x46, 0x49, 0x49, 0x29, 0x1E, // 9
0x00, 0x00, 0x14, 0x00, 0x00,
0x00, 0x40, 0x34, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41,
0x14, 0x14, 0x14, 0x14, 0x14,
0x00, 0x41, 0x22, 0x14, 0x08,
0x02, 0x01, 0x59, 0x09, 0x06,
0x3E, 0x41, 0x5D, 0x59, 0x4E,
0x7C, 0x12, 0x11, 0x12, 0x7C, // A
0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x3E, 0x41, 0x41, 0x51, 0x73, // G
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x20, 0x40, 0x41, 0x3F, 0x01, // J
0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x7F, 0x02, 0x1C, 0x02, 0x7F, // M
0x7F, 0x04, 0x08, 0x10, 0x7F, // N
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x3E, 0x41, 0x51, 0x21, 0x5E, // Q
0x7F, 0x09, 0x19, 0x29, 0x46, // R
0x26, 0x49, 0x49, 0x49, 0x32, // S
0x03, 0x01, 0x7F, 0x01, 0x03, // T
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x3F, 0x40, 0x38, 0x40, 0x3F, // W
0x63, 0x14, 0x08, 0x14, 0x63, // X
0x03, 0x04, 0x78, 0x04, 0x03, // Y
0x61, 0x59, 0x49, 0x4D, 0x43, // Z
0x00, 0x7F, 0x41, 0x41, 0x41,
0x02, 0x04, 0x08, 0x10, 0x20,
0x00, 0x41, 0x41, 0x41, 0x7F,
0x04, 0x02, 0x01, 0x02, 0x04,
0x40, 0x40, 0x40, 0x40, 0x40,
0x00, 0x03, 0x07, 0x08, 0x00,
0x20, 0x54, 0x54, 0x78, 0x40, // a
0x7F, 0x28, 0x44, 0x44, 0x38, // b
0x38, 0x44, 0x44, 0x44, 0x28, // c
0x38, 0x44, 0x44, 0x28, 0x7F, // d
0x38, 0x54, 0x54, 0x54, 0x18, // e
0x00, 0x08, 0x7E, 0x09, 0x02, // f
0x18, 0xA4, 0xA4, 0x9C, 0x78, // g
0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x20, 0x40, 0x40, 0x3D, 0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x7C, 0x04, 0x78, 0x04, 0x78, // m
0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x38, 0x44, 0x44, 0x44, 0x38, // o
0xFC, 0x18, 0x24, 0x24, 0x18, // p
0x18, 0x24, 0x24, 0x18, 0xFC, // q
0x7C, 0x08, 0x04, 0x04, 0x08, // r
0x48, 0x54, 0x54, 0x54, 0x24, // s
0x04, 0x04, 0x3F, 0x44, 0x24, // t
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x44, 0x28, 0x10, 0x28, 0x44, // x
0x4C, 0x90, 0x90, 0x90, 0x7C, // y
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x00,
0x00, 0x00, 0x77, 0x00, 0x00,
0x00, 0x41, 0x36, 0x08, 0x00,
0x02, 0x01, 0x02, 0x04, 0x02,
0x3C, 0x26, 0x23, 0x26, 0x3C,
0x1E, 0xA1, 0xA1, 0x61, 0x12,
0x3A, 0x40, 0x40, 0x20, 0x7A,
0x38, 0x54, 0x54, 0x55, 0x59,
0x21, 0x55, 0x55, 0x79, 0x41,
0x21, 0x54, 0x54, 0x78, 0x41,
0x21, 0x55, 0x54, 0x78, 0x40,
0x20, 0x54, 0x55, 0x79, 0x40,
0x0C, 0x1E, 0x52, 0x72, 0x12,
0x39, 0x55, 0x55, 0x55, 0x59,
0x39, 0x54, 0x54, 0x54, 0x59,
0x39, 0x55, 0x54, 0x54, 0x58,
0x00, 0x00, 0x45, 0x7C, 0x41,
0x00, 0x02, 0x45, 0x7D, 0x42,
0x00, 0x01, 0x45, 0x7C, 0x40,
0xF0, 0x29, 0x24, 0x29, 0xF0,
0xF0, 0x28, 0x25, 0x28, 0xF0,
0x7C, 0x54, 0x55, 0x45, 0x00,
0x20, 0x54, 0x54, 0x7C, 0x54,
0x7C, 0x0A, 0x09, 0x7F, 0x49,
0x32, 0x49, 0x49, 0x49, 0x32,
0x32, 0x48, 0x48, 0x48, 0x32,
0x32, 0x4A, 0x48, 0x48, 0x30,
0x3A, 0x41, 0x41, 0x21, 0x7A,
0x3A, 0x42, 0x40, 0x20, 0x78,
0x00, 0x9D, 0xA0, 0xA0, 0x7D,
0x39, 0x44, 0x44, 0x44, 0x39,
0x3D, 0x40, 0x40, 0x40, 0x3D,
0x3C, 0x24, 0xFF, 0x24, 0x24,
0x48, 0x7E, 0x49, 0x43, 0x66,
0x2B, 0x2F, 0xFC, 0x2F, 0x2B,
0xFF, 0x09, 0x29, 0xF6, 0x20,
0xC0, 0x88, 0x7E, 0x09, 0x03,
0x20, 0x54, 0x54, 0x79, 0x41,
0x00, 0x00, 0x44, 0x7D, 0x41,
0x30, 0x48, 0x48, 0x4A, 0x32,
0x38, 0x40, 0x40, 0x22, 0x7A,
0x00, 0x7A, 0x0A, 0x0A, 0x72,
0x7D, 0x0D, 0x19, 0x31, 0x7D,
0x26, 0x29, 0x29, 0x2F, 0x28,
0x26, 0x29, 0x29, 0x29, 0x26,
0x30, 0x48, 0x4D, 0x40, 0x20,
0x38, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x38,
0x2F, 0x10, 0xC8, 0xAC, 0xBA,
0x2F, 0x10, 0x28, 0x34, 0xFA,
0x00, 0x00, 0x7B, 0x00, 0x00,
0x08, 0x14, 0x2A, 0x14, 0x22,
0x22, 0x14, 0x2A, 0x14, 0x08,
0xAA, 0x00, 0x55, 0x00, 0xAA,
0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x00, 0x00, 0x00, 0xFF, 0x00,
0x10, 0x10, 0x10, 0xFF, 0x00,
0x14, 0x14, 0x14, 0xFF, 0x00,
0x10, 0x10, 0xFF, 0x00, 0xFF,
0x10, 0x10, 0xF0, 0x10, 0xF0,
0x14, 0x14, 0x14, 0xFC, 0x00,
0x14, 0x14, 0xF7, 0x00, 0xFF,
0x00, 0x00, 0xFF, 0x00, 0xFF,
0x14, 0x14, 0xF4, 0x04, 0xFC,
0x14, 0x14, 0x17, 0x10, 0x1F,
0x10, 0x10, 0x1F, 0x10, 0x1F,
0x14, 0x14, 0x14, 0x1F, 0x00,
0x10, 0x10, 0x10, 0xF0, 0x00,
0x00, 0x00, 0x00, 0x1F, 0x10,
0x10, 0x10, 0x10, 0x1F, 0x10,
0x10, 0x10, 0x10, 0xF0, 0x10,
0x00, 0x00, 0x00, 0xFF, 0x10,
0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, 0x10, 0xFF, 0x10,
0x00, 0x00, 0x00, 0xFF, 0x14,
0x00, 0x00, 0xFF, 0x00, 0xFF,
0x00, 0x00, 0x1F, 0x10, 0x17,
0x00, 0x00, 0xFC, 0x04, 0xF4,
0x14, 0x14, 0x17, 0x10, 0x17,
0x14, 0x14, 0xF4, 0x04, 0xF4,
0x00, 0x00, 0xFF, 0x00, 0xF7,
0x14, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, 0xF7, 0x00, 0xF7,
0x14, 0x14, 0x14, 0x17, 0x14,
0x10, 0x10, 0x1F, 0x10, 0x1F,
0x14, 0x14, 0x14, 0xF4, 0x14,
0x10, 0x10, 0xF0, 0x10, 0xF0,
0x00, 0x00, 0x1F, 0x10, 0x1F,
0x00, 0x00, 0x00, 0x1F, 0x14,
0x00, 0x00, 0x00, 0xFC, 0x14,
0x00, 0x00, 0xF0, 0x10, 0xF0,
0x10, 0x10, 0xFF, 0x10, 0xFF,
0x14, 0x14, 0x14, 0xFF, 0x14,
0x10, 0x10, 0x10, 0x1F, 0x00,
0x00, 0x00, 0x00, 0xF0, 0x10,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
0xFF, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x38, 0x44, 0x44, 0x38, 0x44,
0x7C, 0x2A, 0x2A, 0x3E, 0x14,
0x7E, 0x02, 0x02, 0x06, 0x06,
0x02, 0x7E, 0x02, 0x7E, 0x02,
0x63, 0x55, 0x49, 0x41, 0x63,
0x38, 0x44, 0x44, 0x3C, 0x04,
0x40, 0x7E, 0x20, 0x1E, 0x20,
0x06, 0x02, 0x7E, 0x02, 0x02,
0x99, 0xA5, 0xE7, 0xA5, 0x99,
0x1C, 0x2A, 0x49, 0x2A, 0x1C,
0x4C, 0x72, 0x01, 0x72, 0x4C,
0x30, 0x4A, 0x4D, 0x4D, 0x30,
0x30, 0x48, 0x78, 0x48, 0x30,
0xBC, 0x62, 0x5A, 0x46, 0x3D,
0x3E, 0x49, 0x49, 0x49, 0x00,
0x7E, 0x01, 0x01, 0x01, 0x7E,
0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
0x44, 0x44, 0x5F, 0x44, 0x44,
0x40, 0x51, 0x4A, 0x44, 0x40,
0x40, 0x44, 0x4A, 0x51, 0x40,
0x00, 0x00, 0xFF, 0x01, 0x03,
0xE0, 0x80, 0xFF, 0x00, 0x00,
0x08, 0x08, 0x6B, 0x6B, 0x08,
0x36, 0x12, 0x36, 0x24, 0x36,
0x06, 0x0F, 0x09, 0x0F, 0x06,
0x00, 0x00, 0x18, 0x18, 0x00,
0x00, 0x00, 0x10, 0x10, 0x00,
0x30, 0x40, 0xFF, 0x01, 0x01,
0x00, 0x1F, 0x01, 0x01, 0x1E,
0x00, 0x19, 0x1D, 0x17, 0x12,
0x00, 0x3C, 0x3C, 0x3C, 0x3C,
0x00, 0x00, 0x00, 0x00, 0x00,
};
uint32_t StX=0;
uint32_t StY=0;
uint16_t StTextColor = MAGENTA;
static uint8_t ColStart, RowStart;
static uint8_t rot;
static int16_t width = WIDTH;
static int16_t height = HEIGHT;
static enum initSFlags TabColor;
char Message[12];
uint32_t Messageindex;
int TimeIndex; // horizontal position of next point to plot on graph (0 to 99)
int32_t Ymax, Ymin, Yrange; // vertical axis max, min, and range (units not specified)
uint16_t PlotBGColor;
static const uint8_t
Scmd1[] = { // Init for 7735R, part 1 (red or green tab)
15, // 15 commands in list:
SWRESET, DELAY, // 1: Software reset, 0 args, w/delay
150, // 150 ms delay
SLPOUT , DELAY, // 2: Out of sleep mode, 0 args, w/delay
255, // 500 ms delay
FRMCTR1, 3 , // 3: Frame rate ctrl - normal mode, 3 args:
0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D)
FRMCTR2, 3 , // 4: Frame rate control - idle mode, 3 args:
0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D)
FRMCTR3, 6 , // 5: Frame rate ctrl - partial mode, 6 args:
0x01, 0x2C, 0x2D, // Dot inversion mode
0x01, 0x2C, 0x2D, // Line inversion mode
INVCTR , 1 , // 6: Display inversion ctrl, 1 arg, no delay:
0x07, // No inversion
PWCTR1 , 3 , // 7: Power control, 3 args, no delay:
0xA2,
0x02, // -4.6V
0x84, // AUTO mode
PWCTR2 , 1 , // 8: Power control, 1 arg, no delay:
0xC5, // VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
PWCTR3 , 2 , // 9: Power control, 2 args, no delay:
0x0A, // Opamp current small
0x00, // Boost frequency
PWCTR4 , 2 , // 10: Power control, 2 args, no delay:
0x8A, // BCLK/2, Opamp current small & Medium low
0x2A,
PWCTR5 , 2 , // 11: Power control, 2 args, no delay:
0x8A, 0xEE,
VMCTR1 , 1 , // 12: Power control, 1 arg, no delay:
0x0E,
INVOFF , 0 , // 13: Don't invert display, no args, no delay
MADCTL , 1 , // 14: Memory access control (directions), 1 arg:
0xC8, // row addr/col addr, bottom to top refresh
COLMOD , 1 , // 15: set color mode, 1 arg, no delay:
0x05 }; // 16-bit color
static const uint8_t
Scmd2green[] = { // Init for 7735R, part 2 (green tab only)
2, // 2 commands in list:
CASET , 4 , // 1: Column addr set, 4 args, no delay:
0x00, 0x02, // XSTART = 0
0x00, 0x7F+0x02, // XEND = 127
RASET , 4 , // 2: Row addr set, 4 args, no delay:
0x00, 0x01, // XSTART = 0
0x00, 0x7F+0x01 }; // XEND = 127
static const uint8_t
Scmd2red[] = { // Init for 7735R, part 2 (red tab only)
2, // 2 commands in list:
CASET , 4 , // 1: Column addr set, 4 args, no delay:
0x00, 0x00, // XSTART = 0
0x00, 0x7F, // XEND = 127
RASET , 4 , // 2: Row addr set, 4 args, no delay:
0x00, 0x00, // XSTART = 0
0x00, 0x7F }; // XEND = 127
static const uint8_t
Scmd3[] = { // Init for 7735R, part 3 (red or green tab)
4, // 4 commands in list:
GMCTRP1, 16 , // 1: Magical unicorn dust, 16 args, no delay:
0x02, 0x1c, 0x07, 0x12,
0x37, 0x32, 0x29, 0x2d,
0x29, 0x25, 0x2B, 0x39,
0x00, 0x01, 0x03, 0x10,
GMCTRN1, 16 , // 2: Sparkles and rainbows, 16 args, no delay:
0x03, 0x1d, 0x07, 0x06,
0x2E, 0x2C, 0x29, 0x2D,
0x2E, 0x2E, 0x37, 0x3F,
0x00, 0x00, 0x02, 0x10,
NORON , DELAY, // 3: Normal display on, no args, w/delay
10, // 10 ms delay
DISPON , DELAY, // 4: Main screen turn on, no args w/delay
100 }; // 100 ms delay
enum initSFlags{
none,
INITS_GREENTAB,
INITS_REDTAB,
INITS_BLACKTAB
};
enum {
SSI_CC = (0xFC8 >> 2),
SSI_PS = (0x010 >> 2),
SSI_SR = (0x00C >> 2),
SSI_DR = (0x008 >> 2),
SSI_CR1 = (0x004 >> 2),
SSI_CR0 = (0x000 << 2),
STCTRL = (0x010 >> 2),
STRELOAD = (0x014 >> 2),
STCURRENT = (0x018 >> 2),
SYSCTL_RCGCGPIO = (0x608 >> 2),
SYSCTL_RCGCSSI = (0x61C >> 2),
SYSCTL_MOSCCTL = (0x07C >> 2),
SYSCTL_RIS = (0x050 >> 2),
SYSCTL_MISC = (0x058 >> 2),
SYSCTL_RSCLKCFG = (0x0B0 >> 2),
SYSCTL_PLLFREQ0 = (0x160 >> 2),
SYSCTL_PLLFREQ1 = (0x164 >> 2),
SYSCTL_MEMTIM0 = (0x0C0 >> 2),
SYSCTL_PLLSTAT = (0x168 >> 2),
SYSCTL_PRSSI = (0xA1C >> 2),
SYSCTL_SRSSI = (0x51C >> 2),
GPIO_FSEL = (0x420 >> 2),
GPIO_PCTL = (0x52c >> 2),
GPIO_DEN = (0x51c >> 2),
GPIO_DIR = (0x400 >> 2)
};
After all this, I expect the LCD to turn black. It turns on white and stays white after debugging. Thank you for your help.