/*-----------------------------------------------*/
// Write control registers of LCD module
//
/*-----------------------------------------------*/
#if PH_CTRL_RS
void LCD_WR_REG(uint16_t cmd)
{
CLR_RS
EBI0_WRITE_DATA16(0x00000000, cmd);
SET_RS
}
#else
void LCD_WR_REG(uint16_t cmd)
{
EBI0_WRITE_DATA16(0x00000000, cmd);
}
#endif
/*-----------------------------------------------*/
// Write data to SRAM of LCD module
//
/*-----------------------------------------------*/
void LCD_WR_DATA(uint16_t dat)
{
EBI0_WRITE_DATA16(0x00030000, dat);
}
/*-----------------------------------------------*/
// Read data from SRAM of LCD module
//
/*-----------------------------------------------*/
uint16_t LCD_RD_DATA(void)
{
return EBI0_READ_DATA16(0x00030000);
}
/********************************************************************
*
* LcdWriteDataMultiple
*
* Function description:
* Writes multiple values to a display register.
*/
static void LcdWriteDataMultiple(uint16_t * pData, int NumItems)
{
while (NumItems--) {
EBI0_WRITE_DATA16(0x00030000,*pData++);
}
}
/********************************************************************
*
* LcdReadDataMultiple
*
* Function description:
* Reads multiple values from a display register.
*/
static void LcdReadDataMultiple(uint16_t * pData, int NumItems)
{
while (NumItems--) {
*pData++ = EBI0_READ_DATA16(0x00030000);
}
}
/*-----------------------------------------------*/
// Set cursor positon on the LCD screen
//
/*-----------------------------------------------*/
#if 0
void LCD_SetCursor(uint16_t x_s, uint16_t y_s)
{
uint16_t x_e = x_s+1;
uint16_t y_e = y_s+1;
/* X range */
LCD_WR_REG(0x2A);
LCD_WR_DATA(x_s>>8);
LCD_WR_DATA(x_s);
LCD_WR_DATA(x_e>>8);
LCD_WR_DATA(x_e);
/* Y range */
LCD_WR_REG(0x2B);
LCD_WR_DATA(y_s>>8);
LCD_WR_DATA(y_s);
LCD_WR_DATA(y_e>>8);
LCD_WR_DATA(y_e);
/* Memory write */
LCD_WR_REG(0x2C);
}
#endif
/*-----------------------------------------------*/
// Initial LIL9341 LCD driver chip
//
/*-----------------------------------------------*/
void ILI9341_Initial(void)
{
uint16_t Reg = 0;
/* Hardware reset */
SET_RST;
CLK_SysTickDelay(5000); // Delay 5ms
CLR_RST;
CLK_SysTickDelay(20000); // Delay 20ms
SET_RST;
CLK_SysTickDelay(40000); // Delay 40ms
/* Initial control registers */
LCD_WR_REG(0xCB);
LCD_WR_DATA(0x39);
LCD_WR_DATA(0x2C);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x34);
LCD_WR_DATA(0x02);
LCD_WR_REG(0xCF);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0xC1);
LCD_WR_DATA(0x30);
LCD_WR_REG(0xE8);
LCD_WR_DATA(0x85);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x78);
LCD_WR_REG(0xEA);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0xED);
LCD_WR_DATA(0x64);
LCD_WR_DATA(0x03);
LCD_WR_DATA(0x12);
LCD_WR_DATA(0x81);
LCD_WR_REG(0xF7);
LCD_WR_DATA(0x20);
LCD_WR_REG(0xC0);
LCD_WR_DATA(0x23);
LCD_WR_REG(0xC1);
LCD_WR_DATA(0x10);
LCD_WR_REG(0xC5);
LCD_WR_DATA(0x3e);
LCD_WR_DATA(0x28);
LCD_WR_REG(0xC7);
LCD_WR_DATA(0x86);
LCD_WR_REG(0x36);
LCD_WR_DATA(0x48);
LCD_WR_REG(0x3A);
LCD_WR_DATA(0x55);
LCD_WR_REG(0xB1);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x18);
LCD_WR_REG(0xB6);
LCD_WR_DATA(0x08);
LCD_WR_DATA(0x82);
LCD_WR_DATA(0x27);
LCD_WR_REG(0xF2);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x26);
LCD_WR_DATA(0x01);
LCD_WR_REG(0xE0);
LCD_WR_DATA(0x0F);
LCD_WR_DATA(0x31);
LCD_WR_DATA(0x2B);
LCD_WR_DATA(0x0C);
LCD_WR_DATA(0x0E);
LCD_WR_DATA(0x08);
LCD_WR_DATA(0x4E);
LCD_WR_DATA(0xF1);
LCD_WR_DATA(0x37);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x10);
LCD_WR_DATA(0x03);
LCD_WR_DATA(0x0E);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x00);
LCD_WR_REG(0xE1);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x0E);
LCD_WR_DATA(0x14);
LCD_WR_DATA(0x03);
LCD_WR_DATA(0x11);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x31);
LCD_WR_DATA(0xC1);
LCD_WR_DATA(0x48);
LCD_WR_DATA(0x08);
LCD_WR_DATA(0x0F);
LCD_WR_DATA(0x0C);
LCD_WR_DATA(0x31);
LCD_WR_DATA(0x36);
LCD_WR_DATA(0x0F);
LCD_WR_REG(0x11);
CLK_SysTickDelay(200000); // Delay 200ms
LCD_WR_REG(0x29); //Display on
LCD_WR_REG(0x0A);
Reg = LCD_RD_DATA();
Reg = LCD_RD_DATA();
printf("0Ah = %02x.\n", Reg);
LCD_WR_REG(0x0B);
Reg = LCD_RD_DATA();
Reg = LCD_RD_DATA();
printf("0Bh = %02x.\n", Reg);
LCD_WR_REG(0x0C);
Reg = LCD_RD_DATA();
Reg = LCD_RD_DATA();
printf("0Ch = %02x.\n", Reg);
printf("Initial ILI9341 LCD Module done.\n\n");
}
|