diff --git a/radio/src/bootloader/Makefile b/radio/src/bootloader/Makefile index 8ebc1362b..dcbfb2afd 100644 --- a/radio/src/bootloader/Makefile +++ b/radio/src/bootloader/Makefile @@ -251,7 +251,7 @@ LIBS = $(DLIBS) $(ULIBS) MCFLAGS = -mcpu=$(MCU) #ASFLAGS = $(MCFLAGS) -g -gdwarf-2 -Wa,-amhls=$(OBJDIR)/$(notdir $(<:.s=.lst)) $(ADEFS) -CPFLAGS = $(MCFLAGS) $(OPT) -gdwarf-2 -mthumb -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm $(DEFS) +CPFLAGS = $(MCFLAGS) $(OPT) -fdata-sections -ffunction-sections -gdwarf-2 -mthumb -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm $(DEFS) LDFLAGS = $(MCFLAGS) -mthumb -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(FULL_PRJ).map,--cref,--no-warn-mismatch $(LIBDIR) CPPFLAGS = $(MCFLAGS) $(OPT) -gdwarf-2 -mthumb -fomit-frame-pointer -Wall -fverbose-asm $(DEFS) diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 082e725c5..9d19f48ab 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -257,7 +257,7 @@ // LCD #if defined(REVPLUS) - #define RCC_AHB1Periph_LCD RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD + #define RCC_AHB1Periph_LCD (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD) #define GPIO_LCD_SPI GPIOC #define GPIO_LCD_NCS GPIOA #define GPIO_LCD_RST GPIOD diff --git a/radio/src/targets/taranis/lcd_driver.cpp b/radio/src/targets/taranis/lcd_driver.cpp index fa423f8cf..e132a4a1b 100644 --- a/radio/src/targets/taranis/lcd_driver.cpp +++ b/radio/src/targets/taranis/lcd_driver.cpp @@ -13,8 +13,48 @@ #define WriteData(x) AspiData(x) #define WriteCommand(x) AspiCmd(x) -#define CONTRAST_OFS 5 +#if defined(REVPLUS) + #define CONTRAST_OFS 120 +#else + #define CONTRAST_OFS 5 +#endif + +#if defined(REVPLUS) +static void LCD_Init() +{ + AspiCmd(0x25); //(5) Temperature compensation curve definition: 0x25 = -0.05%/oC + AspiCmd(0x2b); //(6) Panel loading set ,Internal VLCD. + AspiCmd(0xEA); //(27) set bias=1/10 + AspiCmd(0x81); //(11) Set Vop + next byte +#if defined(BOOT) + AspiCmd(CONTRAST_OFS+25); +#else + AspiCmd(CONTRAST_OFS+g_eeGeneral.contrast); +#endif + AspiCmd(0xA6); //inverse display off + AspiCmd(0xA1); //line rates,24 Klps + AspiCmd(0x84); //Disable Partial Display + AspiCmd(0xC8); //SET N-LINE INVERSION + AspiCmd(0x00); //Disable NIV + AspiCmd(0xF1); //Set CEN + AspiCmd(0x3F); // 1/64DUTY + AspiCmd(0xC0); //(21) Set mapping + AspiCmd(0x05); // MY=1, MX=0, MSF=0 + AspiCmd(0x89); //(15) WA=1,column (CA) increment (+1) first until CA reaches CA boundary, then RA will increment by (+1). + AspiCmd(0xF8); //Set Window Program Enable ,inside modle + AspiCmd(0xD0); //(23) SET 4 bits/pixel, pattern 0 + AspiCmd(0xF4); //starting column address of RAM program window. + AspiCmd(0x00); + AspiCmd(0xF5); //starting row address of RAM program window. + AspiCmd(0x00); + AspiCmd(0xF6); //ending column address of RAM program window. + AspiCmd(0xD3); + AspiCmd(0xF7); //ending row address of RAM program window. + AspiCmd(0x3F); + AspiCmd(0xAF); // Active and 16-grey scale +} +#else static void LCD_Init() { AspiCmd(0x2b); //Panel loading set ,Internal VLCD. @@ -47,40 +87,6 @@ static void LCD_Init() AspiCmd(0x47); AspiCmd(0xF7); //ending row address of RAM program window. AspiCmd(0x9F); - - -} - -#if 0 // to be removed later if nobody complains! -static void lcdRefreshInit() -{ - AspiCmd(0x2b); //Panel loading set ,Internal VLCD. - AspiCmd(0x25); //Temperature compensation curve definition: 0x25 = -0.05%/oC - AspiCmd(0xEA); //set bias=1/10 :Command table NO.27 - AspiCmd(0x81); //Set Vop - AspiCmd(g_eeGeneral.contrast+CONTRAST_OFS); //0--255 - AspiCmd(0xA6); //inverse display off - AspiCmd(0xD1); //SET RGB:Command table NO.21 .SET RGB or BGR. D1=RGB - AspiCmd(0xD5); //set color mode 4K and 12bits :Command table NO.22 - AspiCmd(0xA0); //line rates,25.2 Klps - AspiCmd(0xC8); //SET N-LINE INVERSION - AspiCmd(0x1D); //Disable NIV - AspiCmd(0xF1); //Set CEN - AspiCmd(0x3F); // 1/64DUTY - AspiCmd(0x84); //Disable Partial Display - AspiCmd(0xC4); //MY=1,MX=0 - AspiCmd(0x89); //WA=1,column (CA) increment (+1) first until CA reaches CA boundary, then RA will increment by (+1). - - AspiCmd(0xF8); //Set Window Program Enable ,inside modle - AspiCmd(0xF4); //starting column address of RAM program window. - AspiCmd(0x00); - AspiCmd(0xF5); //starting row address of RAM program window. - AspiCmd(0x60); - AspiCmd(0xF6); //ending column address of RAM program window. - AspiCmd(0x47); - AspiCmd(0xF7); //ending row address of RAM program window. - AspiCmd(0x9F); - AspiCmd(0xAF); } #endif @@ -105,6 +111,73 @@ const uint8_t lcdPalette[4] = { 0, 0x03, 0x06, 0x0F }; __no_operation(); \ LCD_CLK_HIGH(); +#if defined(REVPLUS) +void lcdRefresh() +{ + for (uint32_t y=0; y>3)*LCD_W]; + uint8_t mask = (1 << (y%8)); + + Set_Address(0, y/2); + AspiCmd(0xAF); + + LCD_CLK_HIGH(); + LCD_A0_HIGH(); + LCD_NCS_LOW(); + + for (uint32_t x=0; x>1) & mask ) { + val |= 0x10 ; + } + + b = p[2*DISPLAY_PLAN_SIZE+x] ; + if ( b & mask ) { + val |= 2 ; + } + if ( (b>>1) & mask ) { + val |= 0x20 ; + } + + c = p[DISPLAY_PLAN_SIZE+x] ; + if ( c & mask ) { + val |= 4 ; + } + if ( (c>>1) & mask ) { + val |= 0x40 ; + } + + c = p[x] ; + if ( c & mask ) { + val |= 8 ; + } + if ( (c>>1) & mask ) { + val |= 0x80 ; + } + + LCD_WRITE_BIT(val & 1); + LCD_WRITE_BIT(val & 2); + LCD_WRITE_BIT(val & 4); + LCD_WRITE_BIT(val & 8); + LCD_WRITE_BIT(val & 0x10); + LCD_WRITE_BIT(val & 0x20); + LCD_WRITE_BIT(val & 0x40); + LCD_WRITE_BIT(val & 0x80); + } + + LCD_NCS_HIGH(); + LCD_A0_HIGH(); + + WriteData(0); + } +} +#else void lcdRefresh() { for (uint32_t y=0; y