static void lcd_reset(void) { LCD_CON = 0xDB8; LCD_PHTIME = 0x22; LCD_RST_TIME = 0x7FFF; lcd_reset_delay(); LCD_DRV_RST = 0; lcd_reset_delay(); LCD_DRV_RST = 1; lcd_reset_delay(); LCD_DRV_RST = 0; lcd_reset_delay(); LCD_DRV_RST = 1; LCD_INTCON = 0; }
void lcd_begin_frame() { uint8_t flags = vram.flags; uint8_t mode = vram.mode; lcd_window_x = 0; lcd_window_y = vram.first_line; /* * Wake up the LCD controller, if necessary. */ if (!lcd_is_awake) { lcd_is_awake = 1; // First, we take the LCD controller out of reset. // Then we fully initialize it. We turn on the backlight // after both initialization is complete and the first // frame has finished rendering. CTRL_PORT = CTRL_IDLE & ~CTRL_LCD_DCX; CTRL_PORT = (CTRL_IDLE & ~CTRL_LCD_DCX) | CTRL_FLASH_LAT2; // Enter reset lcd_reset_delay(); CTRL_PORT = CTRL_IDLE; CTRL_PORT = CTRL_IDLE | CTRL_FLASH_LAT2; // Exit reset // Controller initialization lcd_cmd_table(lcd_setup_table); #ifdef LCD_MODEL_TIANMA_HX8353 lcd_lut_init(); #endif } LCD_WRITE_BEGIN(); // Set addressing mode LCD_CMD_MODE(); LCD_BYTE(LCD_CMD_MADCTR); LCD_DATA_MODE(); LCD_BYTE(LCD_MADCTR_NORMAL ^ (flags & LCD_MADCTR_VRAM)); // Set row/column addressing, and start RAMWR. lcd_address_and_write(); LCD_WRITE_END(); // Vertical sync #ifdef HAVE_LCD_TE if (flags & _SYS_VF_SYNC) while (!CTRL_LCD_TE); #endif }