📄 lcd.c
字号:
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(2);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(10);
SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
SET_LCD_ROI_CTRL_CMD_LATENCY(10);
#if (defined(MT6226)||defined(MT6227)|| defined(MT6226M))
#ifdef LCD_18BIT_MODE
GPIO_ModeSetup(55, 1);
*((volatile unsigned short *) 0x801201B0) |= 0x4000;
*((volatile unsigned short *) 0x801201D0) |= 0x0001;
#endif
SET_LCD_PARALLEL_DATA_BUS_WIDTH;
SET_LCD_PARALLEL_GAMMA_R_TABLE(LCD_PARALLEL_GAMMA_DISABLE);
SET_LCD_PARALLEL_GAMMA_G_TABLE(LCD_PARALLEL_GAMMA_DISABLE);
SET_LCD_PARALLEL_GAMMA_B_TABLE(LCD_PARALLEL_GAMMA_DISABLE);
#endif
#if (defined(MT6219))
DISABLE_LCD_PARALLEL_SYNC;
#endif
#endif
SET_LCD_CTRL_RESET_PIN;
Delay_ms(10);
}
#endif // MT6217, MT6218B, MT6219
/**************************************************************************
*
* MAIN LCD: 176x220, 262k color, Parallel Interface
*
***************************************************************************/
void Write_REG_HCD667B89RBP(kal_uint16 reg, kal_uint16 data)
{
LCD_CtrlWrite_HCD667B89RBP(reg);
LCD_DataWrite_HCD667B89RBP(data);
}
void LCD_Set_Y_Addr_HCD667B89RBP(kal_uint16 start_row, kal_uint16 end_row)
{
Write_REG_HCD667B89RBP(0x45, start_row);
Write_REG_HCD667B89RBP(0x45, end_row);
}
void LCD_Set_X_Addr_HCD667B89RBP(kal_uint16 start_column, kal_uint16 end_column)
{
Write_REG_HCD667B89RBP(0x44, start_column );
Write_REG_HCD667B89RBP(0x44, end_column );
}
void LCD_blockClear_HCD667B89RBP(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
{
kal_uint16 LCD_x, LCD_y;
Write_REG_HCD667B89RBP(0x0044,x1| (x2 <<8));
Write_REG_HCD667B89RBP(0x0045,y1| (y2 <<8));
Write_REG_HCD667B89RBP(0x0021,x1| (y1 <<8));
LCD_CtrlWrite_HCD667B89RBP(0x0022);
for(LCD_y=y1; LCD_y<=y2; LCD_y++)
{
for(LCD_x=x1; LCD_x<=x2; LCD_x++)
{
*(volatile kal_uint8 *)LCD_HCD667B89RBP_DATA_ADDR = (data&0xFF00)>>8;
Delay_us(1);
*(volatile kal_uint8 *)LCD_HCD667B89RBP_DATA_ADDR= data&0xFF;
}
}
}
void LCD_Init_HCD667B89RBP(kal_uint32 bkground, void **buf_addr)
{
Write_REG_HCD667B89RBP(0x0000,0x0001);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0001,0x091B);
Delay_us(30000);
// Write_REG_HCD667B89RBP(0x0002,0x0701);
Write_REG_HCD667B89RBP(0x0002,0x0700);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0003,0x1030);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0004,0x0730);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0005,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0008,0x0202);
// Write_REG_HCD667B89RBP(0x0008,0x0808);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0009,0x000F);
// Write_REG_HCD667B89RBP(0x0009,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0040,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0041,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0042,0xDB00);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0043,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0044,0xAF00);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0045,0xDB00);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0007,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0012,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0013,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0011,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0012,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0013,0x151D);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0010,0x0000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0010,0x6040);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0012,0x0013);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0013,0x2D18);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x000B,0x4000);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0010,0x0040);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0010,0x6060);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0007,0x0025);
Delay_us(30000);
Write_REG_HCD667B89RBP(0x0007,0x0037);
LCD_blockClear_HCD667B89RBP(0,0, LCD_WIDTH-1,LCD_HEIGHT-1,bkground);
}
void LCD_BlockWrite_HCD667B89RBP(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
kal_uint16 l_startx=startx, l_starty=starty+96, l_endx=endx, l_endy=endy+96;
#ifdef LCD_CMD_DMA_MODE
SET_LCD_CMD_PARAMETER(0, LCD_CMD, 00);
SET_LCD_CMD_PARAMETER(1, LCD_CMD, 0x44);
SET_LCD_CMD_PARAMETER(2, LCD_DATA, endx);
SET_LCD_CMD_PARAMETER(3, LCD_DATA, startx);
SET_LCD_CMD_PARAMETER(4, LCD_CMD, 0x00);
SET_LCD_CMD_PARAMETER(5, LCD_CMD, 0x45);
SET_LCD_CMD_PARAMETER(6, LCD_DATA, endy);
SET_LCD_CMD_PARAMETER(7, LCD_DATA, starty);
SET_LCD_CMD_PARAMETER(8, LCD_CMD, 0x00);
SET_LCD_CMD_PARAMETER(9, LCD_CMD, 0x21);
SET_LCD_CMD_PARAMETER(10, LCD_DATA, starty);
SET_LCD_CMD_PARAMETER(11, LCD_DATA, startx);
SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x00);
SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x22);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14 );
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#else
LCD_Set_X_Addr_HCD667B89RBP(l_startx, l_endx);
LCD_Set_Y_Addr_HCD667B89RBP(l_starty, l_endy);
Write_REG_HCD667B89RBP(LCD_INDEX_R20H_HCD667B89RBP, l_startx);
Write_REG_HCD667B89RBP(LCD_INDEX_R21H_HCD667B89RBP, l_starty);
LCD_CtrlWrite_HCD667B89RBP(LCD_INDEX_R22H_HCD667B89RBP);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
DISABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#endif
}
void LCD_EnterSleep_HCD667B89RBP(void)
{
Write_REG_HCD667B89RBP(0x0010,0x4242);
Delay_us(2000);
}
void LCD_ExitSleep_HCD667B89RBP(void)
{
Write_REG_HCD667B89RBP(0x0010,0x4240);
Delay_us(10000);
}
void LCD_Size_HCD667B89RBP(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
*out_LCD_width = LCD_WIDTH;
*out_LCD_height = LCD_HEIGHT;
}
void LCD_PWRON_HCD667B89RBP(kal_bool on)
{
if(on)
{
LCD_ExitSleep_HCD667B89RBP();
}
else
{
LCD_EnterSleep_HCD667B89RBP();
Write_REG_HCD667B89RBP(0x13, 0x0000);
Write_REG_HCD667B89RBP(0x10, 0x0210);
Delay_ms(4);
Write_REG_HCD667B89RBP(0x10, 0x0200);
Write_REG_HCD667B89RBP(0x12, 0x3f08);
}
}
void LCD_ON_HCD667B89RBP(kal_bool on)
{
if(on)
{
LCD_ExitSleep_HCD667B89RBP();
}
else
{
LCD_EnterSleep_HCD667B89RBP();
}
}
void LCD_SetContrast_HCD667B89RBP(kal_uint8 level)
{
}
void LCD_Partial_On_HCD667B89RBP(kal_uint16 start_page,kal_uint16 end_page)
{
}
void LCD_Partial_Off_HCD667B89RBP(void)
{
}
kal_uint8 LCD_Partial_line_HCD667B89RBP(void)
{
return 1;
}
//Engineering mode
kal_uint8 LCD_GetParm_HCD667B89RBP(lcd_func_type type)
{
switch(type)
{
case lcd_Bais_func:
return 1;
case lcd_Contrast_func:
return 1;
case lcd_LineRate_func:
return 4;
case lcd_Temperature_Compensation_func:
return 4;
default:
ASSERT(0);
return 100;
}
}
void LCD_SetBias_HCD667B89RBP(kal_uint8 *bias)
{
}
void LCD_Contrast_HCD667B89RBP(kal_uint8 *contrast)
{
}
void LCD_LineRate_HCD667B89RBP(kal_uint8 *linerate)
{
}
void LCD_Temp_Compensate_HCD667B89RBP(kal_uint8 *compensate)
{
}
LCD_Funcs LCD_SM261_HCD667B89RBP = {
LCD_Init_HCD667B89RBP,
LCD_PWRON_HCD667B89RBP,
LCD_SetContrast_HCD667B89RBP,
LCD_ON_HCD667B89RBP,
LCD_BlockWrite_HCD667B89RBP,
LCD_Size_HCD667B89RBP,
LCD_EnterSleep_HCD667B89RBP,
LCD_ExitSleep_HCD667B89RBP,
LCD_Partial_On_HCD667B89RBP,
LCD_Partial_Off_HCD667B89RBP,
LCD_Partial_line_HCD667B89RBP,
// Engineering mode
LCD_GetParm_HCD667B89RBP,
LCD_SetBias_HCD667B89RBP,
LCD_Contrast_HCD667B89RBP,
LCD_LineRate_HCD667B89RBP,
LCD_Temp_Compensate_HCD667B89RBP
};
#endif // __MIKI_SM264_TRULY_GG3342__
#ifdef __SM264_MIKI_DRV_LCD_TRULY_GG3800__
#if (defined(MT6218B)||defined(MT6219)||defined(MT6217)||defined(MT6226)|| defined(MT6226M))
void init_lcd_interface(void)
{
REG_LCD_ROI_CTRL=0;
CLEAR_LCD_CTRL_RESET_PIN;
Delay_ms(10);
#if (defined(MT6219)||defined(MT6226)||defined(MT6227)|| defined(MT6226M))
SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)2);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(2);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(2);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(10);
SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
SET_LCD_ROI_CTRL_CMD_LATENCY(10);
#if (defined(MT6226)||defined(MT6227)|| defined(MT6226M))
#ifdef LCD_18BIT_MODE
GPIO_ModeSetup(55, 1);
*((volatile unsigned short *) 0x801201B0) |= 0x4000;
*((volatile unsigned short *) 0x801201D0) |= 0x0001;
#endif
SET_LCD_PARALLEL_DATA_BUS_WIDTH;
SET_LCD_PARALLEL_GAMMA_R_TABLE(LCD_PARALLEL_GAMMA_DISABLE);
SET_LCD_PARALLEL_GAMMA_G_TABLE(LCD_PARALLEL_GAMMA_DISABLE);
SET_LCD_PARALLEL_GAMMA_B_TABLE(LCD_PARALLEL_GAMMA_DISABLE);
#endif
#if (defined(MT6219))
DISABLE_LCD_PARALLEL_SYNC;
#endif
#endif
SET_LCD_CTRL_RESET_PIN;
Delay_ms(10);
}
#endif // MT6217, MT6218B, MT6219
void LCD_blockClear_HX8309(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
{
kal_uint16 LCD_x;
kal_uint16 LCD_y;
data =0x2222;
Write_REG_HX8309(0x0044,x1| (x2 <<8));
Write_REG_HX8309(0x0045,y1| (y2 <<8));
Write_REG_HX8309(0x0021,x1| (y1 <<8));
LCD_CtrlWrite_HX8309(0x0022);
for(LCD_y=y1; LCD_y<=y2; LCD_y++)
{
for(LCD_x=x1; LCD_x<=x2; LCD_x++)
{
*(volatile kal_uint8 *)LCD_HX8309_DATA_ADDR = (data&0xFF00)>>8;
Delay_us(1);
*(volatile kal_uint8 *)LCD_HX8309_DATA_ADDR= data&0xFF;
}
}
}
void LCD_Init_HX8309(kal_uint32 bkground, void **buf_addr)
{
Write_REG_HX8309(0x0001,0x011B);
Write_REG_HX8309(0x0002,0x0700);
Write_REG_HX8309(0x0003,0x7030);
Write_REG_HX8309(0x0004,0x0000);
Write_REG_HX8309(0x0005,0x0000);
Delay_us(30000);
Write_REG_HX8309(0x0007,0x0003);
Delay_us(30000);
Write_REG_HX8309(0x0008,0x0202);
Write_REG_HX8309(0x0009,0x0000);
Write_REG_HX8309(0x000B,0x0000);
Write_REG_HX8309(0x000C,0x0003);
Write_REG_HX8309(0x0040,0x0000);
Write_REG_HX8309(0x0041,0x00EF);
Write_REG_HX8309(0x0042,0xDB00);
Write_REG_HX8309(0x0043,0xDB00);
Write_REG_HX8309(0x0044,0xB001);
Write_REG_HX8309(0x0045,0xDB00);
Write_REG_HX8309(0x0021,0x00AF);
Delay_us(10000);
Write_REG_HX8309(0x0000,0x0001);
Write_REG_HX8309(0x0010,0x0000);
Write_REG_HX8309(0x0011,0x0000);
Write_REG_HX8309(0x0012,0x0000);
Write_REG_HX8309(0x0013,0x0000);
Write_REG_HX8309(0x0011,0x0000);
Write_REG_HX8309(0x0013,0x1517);
Delay_us(30000);
Write_REG_HX8309(0x0012,0x0008);
Delay_us(30000);
Write_REG_HX8309(0x0010,0x4040);
Delay_us(30000);
Write_REG_HX8309(0x0011,0x0000);
Delay_us(30000);
Write_REG_HX8309(0x0010,0x0054);
Delay_us(30000);
Write_REG_HX8309(0x0012,0x0011);
Delay_us(30000);
Write_REG_HX8309(0x0010,0x4140);
Delay_us(30000);
Write_REG_HX8309(0x0013,0x3208);
Delay_us(30000);
Write_REG_HX8309(0x0030,0x0100);
Write_REG_HX8309(0x0031,0x0505);
Write_REG_HX8309(0x0032,0x0002);
Write_REG_HX8309(0x0033,0x0300);
Write_REG_HX8309(0x0034,0x0707);
Write_REG_HX8309(0x0035,0x0017);
Write_REG_HX8309(0x0036,0x0707);
Write_REG_HX8309(0x0037,0x0002);
Write_REG_HX8309(0x0038,0x0200);
Write_REG_HX8309(0x0039,0x0000);
Delay_us(30000);
Write_REG_HX8309(0x0007,0x0045);
Delay_us(30000);
Write_REG_HX8309(0x0007,0x0065);
Delay_us(30000);
Write_REG_HX8309(0x0007,0x0077);
LCD_blockClear_HX8309(0,0, LCD_WIDTH-1,LCD_HEIGHT-1,bkground);
}
void LCD_BlockWrite_HX8309(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
#if 1
#ifdef LCD_CMD_DMA_MODE
SET_LCD_CMD_PARAMETER(0, LCD_CMD, 00);
SET_LCD_CMD_PARAMETER(1, LCD_CMD, 0x44);
SET_LCD_CMD_PARAMETER(2, LCD_DATA, endx);
SET_LCD_CMD_PARAMETER(3, LCD_DATA, startx);
SET_LCD_CMD_PARAMETER(4, LCD_CMD, 0x00);
SET_LCD_CMD_PARAMETER(5, LCD_CMD, 0x45);
SET_LCD_CMD_PARAMETER(6, LCD_DATA, endy);
SET_LCD_CMD_PARAMETER(7, LCD_DATA, starty);
SET_LCD_CMD_PARAMETER(8, LCD_CMD, 0x00);
SET_LCD_CMD_PARAMETER(9, LCD_CMD, 0x21);
SET_LCD_CMD_PARAMETER(10, LCD_DATA, starty);
SET_LCD_CMD_PARAMETER(11, LCD_DATA, startx);
SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x00);
SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x22);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14 );
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#else
Write_REG_HX8309(0x0044,startx|(endx<<8));
Write_REG_HX8309(0x0045,starty|(endy<<8));
Write_REG_HX8309(0x0021,startx|(starty<<8));
LCD_CtrlWrite_HX8309(0x0022);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
DISABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -