0

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.

0 Answers0