void lcd_copy_RGB565_frameBuffer( uint32_t *buffer ) { int i, j; uint8_t *p_byte = (uint8_t*) buffer; for(i=0; i<240; i++) { for(j=0; j<320; j++) { ili9341_WriteData(*p_byte++); ili9341_WriteData(*p_byte++); } } return; }
void lcd_init_Gram( uint8_t r, uint8_t g, uint8_t b ) { int i=0, j=0; #ifdef LCD_RGB_565 // 16bits color depth uint8_t val1, val2; val1 = (r << 3); val1 |= ((g >> 3) & 0x7); val2 = (g << 5); val2 |= (b & 0x1F); /* Set WRX to send data */ //LCD_WRX_HIGH(); /* Reset LCD control line(/CS) and Send data */ //LCD_CS_LOW(); for(i=0; i<240; i++) { for(j=0; j<320; j++) { ili9341_WriteData(val1); ili9341_WriteData(val2); //SPIx_Write((uint16_t) val1); //SPIx_Write((uint16_t) val2); } } /* Deselect: Chip Select high */ //LCD_CS_HIGH(); #else // 18bits color depth for(i=0; i<240; i++) { for(j=0; j<320; j++) { ili9341_WriteData(r<<2); ili9341_WriteData(g<<2); ili9341_WriteData(b<<2); } } #endif return; }
/** * @brief Power on the LCD. * @param None * @retval None */ void ili9341_Init(void) { if (Is_ili9341_Initialized == 0) { Is_ili9341_Initialized = 1; /* Initialise ILI9341 low level bus layer --------------------------------*/ LCD_IO_Init(); /*Configure LCD*/ ili9341_WriteReg(0xCA); ili9341_WriteData(0xC3); ili9341_WriteData(0x08); ili9341_WriteData(0x50); ili9341_WriteReg(LCD_POWERB); ili9341_WriteData(0x00); ili9341_WriteData(0xC1); ili9341_WriteData(0x30); ili9341_WriteReg(LCD_POWER_SEQ); ili9341_WriteData(0x64); ili9341_WriteData(0x03); ili9341_WriteData(0x12); ili9341_WriteData(0x81); ili9341_WriteReg(LCD_DTCA); ili9341_WriteData(0x85); ili9341_WriteData(0x00); ili9341_WriteData(0x78); ili9341_WriteReg(LCD_POWERA); ili9341_WriteData(0x39); ili9341_WriteData(0x2C); ili9341_WriteData(0x00); ili9341_WriteData(0x34); ili9341_WriteData(0x02); ili9341_WriteReg(LCD_PRC); ili9341_WriteData(0x20); ili9341_WriteReg(LCD_DTCB); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_FRMCTR1); ili9341_WriteData(0x00); ili9341_WriteData(0x1B); ili9341_WriteReg(LCD_DFC); ili9341_WriteData(0x0A); ili9341_WriteData(0xA2); ili9341_WriteReg(LCD_POWER1); ili9341_WriteData(0x10); ili9341_WriteReg(LCD_POWER2); ili9341_WriteData(0x10); ili9341_WriteReg(LCD_VCOM1); ili9341_WriteData(0x45); ili9341_WriteData(0x15); ili9341_WriteReg(LCD_VCOM2); ili9341_WriteData(0x90); ili9341_WriteReg(LCD_MAC); ili9341_WriteData(0xC8); ili9341_WriteReg(LCD_3GAMMA_EN); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_RGB_INTERFACE); ili9341_WriteData(0xC2); ili9341_WriteReg(LCD_DFC); ili9341_WriteData(0x0A); ili9341_WriteData(0xA7); ili9341_WriteData(0x27); ili9341_WriteData(0x04); /* colomn address set */ ili9341_WriteReg(LCD_COLUMN_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0xEF); /* Page Address Set */ ili9341_WriteReg(LCD_PAGE_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x01); ili9341_WriteData(0x3F); ili9341_WriteReg(LCD_INTERFACE); ili9341_WriteData(0x01); ili9341_WriteData(0x00); ili9341_WriteData(0x06); ili9341_WriteReg(LCD_GRAM); LCD_Delay(200); ili9341_WriteReg(LCD_GAMMA); ili9341_WriteData(0x01); ili9341_WriteReg(LCD_PGAMMA); ili9341_WriteData(0x0F); ili9341_WriteData(0x29); ili9341_WriteData(0x24); ili9341_WriteData(0x0C); ili9341_WriteData(0x0E); ili9341_WriteData(0x09); ili9341_WriteData(0x4E); ili9341_WriteData(0x78); ili9341_WriteData(0x3C); ili9341_WriteData(0x09); ili9341_WriteData(0x13); ili9341_WriteData(0x05); ili9341_WriteData(0x17); ili9341_WriteData(0x11); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_NGAMMA); ili9341_WriteData(0x00); ili9341_WriteData(0x16); ili9341_WriteData(0x1B); ili9341_WriteData(0x04); ili9341_WriteData(0x11); ili9341_WriteData(0x07); ili9341_WriteData(0x31); ili9341_WriteData(0x33); ili9341_WriteData(0x42); ili9341_WriteData(0x05); ili9341_WriteData(0x0C); ili9341_WriteData(0x0A); ili9341_WriteData(0x28); ili9341_WriteData(0x2F); ili9341_WriteData(0x0F); ili9341_WriteReg(LCD_SLEEP_OUT); LCD_Delay(200); ili9341_WriteReg(LCD_DISPLAY_ON); /* GRAM start writing */ ili9341_WriteReg(LCD_GRAM); } }
/** * @brief Power on the LCD. * @param None * @retval None */ bool ili9341_Init(void* pDisplay) { tDisplay* _pDisplay = (tDisplay *) pDisplay; ILI9341_t *structure = (ILI9341_t *)_pDisplay->UserData; gpio.out(structure->CS, 0); gpio.out(structure->CS, 1); gpio.out(structure->RW, 1); gpio.out(structure->RD, 1); ili9341_WriteReg(_pDisplay, 0xCA); ili9341_WriteData(_pDisplay, 0xC3); ili9341_WriteData(_pDisplay, 0x08); ili9341_WriteData(_pDisplay, 0x50); ili9341_WriteReg(_pDisplay, LCD_POWERB); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0xC1); ili9341_WriteData(_pDisplay, 0x30); ili9341_WriteReg(_pDisplay, LCD_POWER_SEQ); ili9341_WriteData(_pDisplay, 0x64); ili9341_WriteData(_pDisplay, 0x03); ili9341_WriteData(_pDisplay, 0x12); ili9341_WriteData(_pDisplay, 0x81); ili9341_WriteReg(_pDisplay, LCD_DTCA); ili9341_WriteData(_pDisplay, 0x85); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x78); ili9341_WriteReg(_pDisplay, LCD_POWERA); ili9341_WriteData(_pDisplay, 0x39); ili9341_WriteData(_pDisplay, 0x2C); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x34); ili9341_WriteData(_pDisplay, 0x02); ili9341_WriteReg(_pDisplay, LCD_PRC); ili9341_WriteData(_pDisplay, 0x20); ili9341_WriteReg(_pDisplay, LCD_DTCB); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteReg(_pDisplay, LCD_FRMCTR1); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x1B); ili9341_WriteReg(_pDisplay, LCD_DFC); ili9341_WriteData(_pDisplay, 0x0A); ili9341_WriteData(_pDisplay, 0xA2); ili9341_WriteReg(_pDisplay, LCD_POWER1); ili9341_WriteData(_pDisplay, 0x10); ili9341_WriteReg(_pDisplay, LCD_POWER2); ili9341_WriteData(_pDisplay, 0x10); ili9341_WriteReg(_pDisplay, LCD_VCOM1); ili9341_WriteData(_pDisplay, 0x45); ili9341_WriteData(_pDisplay, 0x15); ili9341_WriteReg(_pDisplay, LCD_VCOM2); ili9341_WriteData(_pDisplay, 0x90); ili9341_WriteReg(_pDisplay, LCD_MAC); ili9341_WriteData(_pDisplay, 0xC8); ili9341_WriteReg(_pDisplay, LCD_3GAMMA_EN); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteReg(_pDisplay, LCD_RGB_INTERFACE); ili9341_WriteData(_pDisplay, 0xC2); ili9341_WriteReg(_pDisplay, LCD_DFC); ili9341_WriteData(_pDisplay, 0x0A); ili9341_WriteData(_pDisplay, 0xA7); ili9341_WriteData(_pDisplay, 0x27); ili9341_WriteData(_pDisplay, 0x04); /* Colomn address set */ ili9341_WriteReg(_pDisplay, LCD_COLUMN_ADDR); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0xEF); /* Page address set */ ili9341_WriteReg(_pDisplay, LCD_PAGE_ADDR); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x01); ili9341_WriteData(_pDisplay, 0x3F); ili9341_WriteReg(_pDisplay, LCD_INTERFACE); ili9341_WriteData(_pDisplay, 0x01); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x06); ili9341_WriteReg(_pDisplay, LCD_GRAM); sys_delay(200); ili9341_WriteReg(_pDisplay, LCD_GAMMA); ili9341_WriteData(_pDisplay, 0x01); ili9341_WriteReg(_pDisplay, LCD_PGAMMA); ili9341_WriteData(_pDisplay, 0x0F); ili9341_WriteData(_pDisplay, 0x29); ili9341_WriteData(_pDisplay, 0x24); ili9341_WriteData(_pDisplay, 0x0C); ili9341_WriteData(_pDisplay, 0x0E); ili9341_WriteData(_pDisplay, 0x09); ili9341_WriteData(_pDisplay, 0x4E); ili9341_WriteData(_pDisplay, 0x78); ili9341_WriteData(_pDisplay, 0x3C); ili9341_WriteData(_pDisplay, 0x09); ili9341_WriteData(_pDisplay, 0x13); ili9341_WriteData(_pDisplay, 0x05); ili9341_WriteData(_pDisplay, 0x17); ili9341_WriteData(_pDisplay, 0x11); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteReg(_pDisplay, LCD_NGAMMA); ili9341_WriteData(_pDisplay, 0x00); ili9341_WriteData(_pDisplay, 0x16); ili9341_WriteData(_pDisplay, 0x1B); ili9341_WriteData(_pDisplay, 0x04); ili9341_WriteData(_pDisplay, 0x11); ili9341_WriteData(_pDisplay, 0x07); ili9341_WriteData(_pDisplay, 0x31); ili9341_WriteData(_pDisplay, 0x33); ili9341_WriteData(_pDisplay, 0x42); ili9341_WriteData(_pDisplay, 0x05); ili9341_WriteData(_pDisplay, 0x0C); ili9341_WriteData(_pDisplay, 0x0A); ili9341_WriteData(_pDisplay, 0x28); ili9341_WriteData(_pDisplay, 0x2F); ili9341_WriteData(_pDisplay, 0x0F); ili9341_WriteReg(_pDisplay, LCD_SLEEP_OUT); sys_delay(200); ili9341_WriteReg(_pDisplay, LCD_DISPLAY_ON); /* GRAM start writing */ ili9341_WriteReg(_pDisplay, LCD_GRAM); return true; }
/** * @brief Power on the LCD. * @param None * @retval None */ void ili9341_Init(void) { /* Initialize ILI9341 low level bus layer ----------------------------------*/ LCD_IO_Init(); /* Configure LCD */ ili9341_WriteReg(0xCA); ili9341_WriteData(0xC3); ili9341_WriteData(0x08); ili9341_WriteData(0x50); ili9341_WriteReg(LCD_POWERB); ili9341_WriteData(0x00); ili9341_WriteData(0xC1); ili9341_WriteData(0x30); ili9341_WriteReg(LCD_POWER_SEQ); ili9341_WriteData(0x64); ili9341_WriteData(0x03); ili9341_WriteData(0x12); ili9341_WriteData(0x81); ili9341_WriteReg(LCD_DTCA); ili9341_WriteData(0x85); ili9341_WriteData(0x00); ili9341_WriteData(0x78); ili9341_WriteReg(LCD_POWERA); ili9341_WriteData(0x39); ili9341_WriteData(0x2C); ili9341_WriteData(0x00); ili9341_WriteData(0x34); ili9341_WriteData(0x02); ili9341_WriteReg(LCD_PRC); ili9341_WriteData(0x20); ili9341_WriteReg(LCD_DTCB); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_FRMCTR1); ili9341_WriteData(0x00); ili9341_WriteData(0x1B); ili9341_WriteReg(LCD_DFC); ili9341_WriteData(0x0A); ili9341_WriteData(0xA2); ili9341_WriteReg(LCD_POWER1); ili9341_WriteData(0x10); ili9341_WriteReg(LCD_POWER2); ili9341_WriteData(0x10); ili9341_WriteReg(LCD_VCOM1); ili9341_WriteData(0x45); ili9341_WriteData(0x15); ili9341_WriteReg(LCD_VCOM2); ili9341_WriteData(0x90); ili9341_WriteReg(LCD_MAC); #if 1 // test ili9341_WriteData(0x28); #else ili9341_WriteData(0xC8); #endif ili9341_WriteReg(LCD_3GAMMA_EN); ili9341_WriteData(0x00); #ifndef LCD_IF_MCU_ONLY ili9341_WriteReg(LCD_RGB_INTERFACE); ili9341_WriteData(0xC2); #endif ili9341_WriteReg(LCD_DFC); ili9341_WriteData(0x0A); ili9341_WriteData(0xA7); ili9341_WriteData(0x27); ili9341_WriteData(0x04); #if 1 // test /* Colomn address set */ ili9341_WriteReg(LCD_COLUMN_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x01); ili9341_WriteData(0x3F); /* Page address set */ ili9341_WriteReg(LCD_PAGE_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0xEF); #else /* Colomn address set */ ili9341_WriteReg(LCD_COLUMN_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0xEF); /* Page address set */ ili9341_WriteReg(LCD_PAGE_ADDR); ili9341_WriteData(0x00); ili9341_WriteData(0x00); ili9341_WriteData(0x01); ili9341_WriteData(0x3F); #endif #ifdef LCD_IF_MCU_ONLY ili9341_WriteReg(LCD_INTERFACE); ili9341_WriteData(0x01); ili9341_WriteData(0x00); ili9341_WriteData(0x00); #ifdef LCD_RGB_565 ili9341_WriteReg(LCD_PIXEL_FORMAT); ili9341_WriteData(0x55); #endif #else ili9341_WriteReg(LCD_INTERFACE); ili9341_WriteData(0x01); ili9341_WriteData(0x00); ili9341_WriteData(0x06); #endif ili9341_WriteReg(LCD_GRAM); LCD_Delay(200); ili9341_WriteReg(LCD_GAMMA); ili9341_WriteData(0x01); ili9341_WriteReg(LCD_PGAMMA); ili9341_WriteData(0x0F); ili9341_WriteData(0x29); ili9341_WriteData(0x24); ili9341_WriteData(0x0C); ili9341_WriteData(0x0E); ili9341_WriteData(0x09); ili9341_WriteData(0x4E); ili9341_WriteData(0x78); ili9341_WriteData(0x3C); ili9341_WriteData(0x09); ili9341_WriteData(0x13); ili9341_WriteData(0x05); ili9341_WriteData(0x17); ili9341_WriteData(0x11); ili9341_WriteData(0x00); ili9341_WriteReg(LCD_NGAMMA); ili9341_WriteData(0x00); ili9341_WriteData(0x16); ili9341_WriteData(0x1B); ili9341_WriteData(0x04); ili9341_WriteData(0x11); ili9341_WriteData(0x07); ili9341_WriteData(0x31); ili9341_WriteData(0x33); ili9341_WriteData(0x42); ili9341_WriteData(0x05); ili9341_WriteData(0x0C); ili9341_WriteData(0x0A); ili9341_WriteData(0x28); ili9341_WriteData(0x2F); ili9341_WriteData(0x0F); ili9341_WriteReg(LCD_SLEEP_OUT); LCD_Delay(200); ili9341_WriteReg(LCD_DISPLAY_ON); /* GRAM start writing */ ili9341_WriteReg(LCD_GRAM); }