📄 lcd.c
字号:
REG_LCD_ROI_CTRL=0;
CLEAR_LCD_CTRL_RESET_PIN;
Delay_ms(10);
#if (defined(MT6219)||defined(MT6226)||defined(MT6227)|| defined(MT6226M))
#if 1
SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)3);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(3);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(3);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(8);
SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
SET_LCD_ROI_CTRL_CMD_LATENCY(10); // increase the parameter for some mp4 can not be playing smothly
#else
SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)3);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(3);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(3);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(8);
SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
SET_LCD_ROI_CTRL_CMD_LATENCY(20);
#endif
#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_R61500(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
{
kal_uint16 LCD_x;
kal_uint16 LCD_y;
Write_REG_R61500(LCD_INDEX_R44H_R61500,x1| (x2 <<8));
Write_REG_R61500(LCD_INDEX_R45H_R61500,y1| (y2 <<8));
Write_REG_R61500(LCD_INDEX_R21H_R61500,x1| (y1 <<8));
LCD_CtrlWrite_R61500(LCD_INDEX_R22H_R61500);
for(LCD_y=y1; LCD_y<=y2; LCD_y++)
{
for(LCD_x=x1; LCD_x<=x2; LCD_x++)
{
*(volatile kal_uint8 *)LCD_R61500_DATA_ADDR = (data&0xFF00)>>8;
Delay_us(1);
*(volatile kal_uint8 *)LCD_R61500_DATA_ADDR= data&0xFF;
}
}
}
void LCD_Init_R61500(kal_uint32 bkground, void **buf_addr)
{
#ifdef __TRULY_R61500_DRIVER__
Write_REG_R61500(0x0000,0x0001);
Delay_us(50000);
Write_REG_R61500(0x0001,0x011B);
Write_REG_R61500(0x0002,0x0700);
Delay_us(50000);
Write_REG_R61500(0x0003,0x1030);
Delay_us(30000);
Write_REG_R61500(0x0004,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0005,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0007,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0008,0x0302);
Delay_us(30000);
Write_REG_R61500(0x0009,0x0001);
Delay_us(30000);
Write_REG_R61500(0x000B,0x0000);
Delay_us(30000);
Write_REG_R61500(0x000C,0x0000);
Delay_us(30000);
Write_REG_R61500(0x000D,0x0308);
Delay_us(30000);
Write_REG_R61500(0x000E,0x0308);
Delay_us(30000);
Write_REG_R61500(0x000F,0x0010);
Delay_us(30000);
Write_REG_R61500(0x0010,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0011,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0012,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0013,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0011,0x0010);
Delay_us(30000);
Write_REG_R61500(0x0012,0x0004);
Delay_us(30000);
Write_REG_R61500(0x0013,0x151C);
Delay_us(30000);
Write_REG_R61500(0x0010,0x0004);
Delay_us(30000);
Write_REG_R61500(0x0010,0x2024);
Delay_us(30000);
Write_REG_R61500(0x0012,0x0010);
Delay_us(30000);
Write_REG_R61500(0x0010,0x2360);
Delay_us(30000);
Write_REG_R61500(0x0013,0x2E19);
Delay_us(30000);
Write_REG_R61500(0x0023,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0024,0x0000);
Delay_us(30000);
#if 1
Write_REG_R61500(0x0030,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0031,0x0207);
Delay_us(30000);
Write_REG_R61500(0x0032,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0033,0x0401);
Delay_us(30000);
Write_REG_R61500(0x0034,0x0707);
Delay_us(30000);
Write_REG_R61500(0x0035,0x0005);
Delay_us(30000);
Write_REG_R61500(0x0036,0x0707);
Delay_us(30000);
Write_REG_R61500(0x0037,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0038,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0039,0x0000);
Delay_us(30000);
#else
Write_REG_R61500(0x0030,0x0303);
Delay_us(30000);
Write_REG_R61500(0x0031,0x0505);
Delay_us(30000);
Write_REG_R61500(0x0032,0x0001);
Delay_us(30000);
Write_REG_R61500(0x0033,0x0301);
Delay_us(30000);
Write_REG_R61500(0x0034,0x0303);
Delay_us(30000);
Write_REG_R61500(0x0035,0x0505);
Delay_us(30000);
Write_REG_R61500(0x0036,0x0001);
Delay_us(30000);
Write_REG_R61500(0x0037,0x0301);
Delay_us(30000);
Write_REG_R61500(0x0038,0x010F);
Delay_us(30000);
Write_REG_R61500(0x0039,0x1F02);
Delay_us(30000);
#endif
Write_REG_R61500(0x0040,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0041,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0042,0xDB00);
Delay_us(30000);
Write_REG_R61500(0x0043,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0044,0xAF00);
Delay_us(30000);
Write_REG_R61500(0x0045,0xDB00);
Delay_us(30000);
Write_REG_R61500(0x0007,0x0025);
Delay_us(30000);
Write_REG_R61500(0x0007,0x0037);
Delay_us(30000);
#else
Write_REG_R61500(0x0000,0x0001);
Delay_us(30000);
Write_REG_R61500(0x0001,0x091B);
Delay_us(30000);
// Write_REG_R61500(0x0002,0x0701);
Write_REG_R61500(0x0002,0x0700);
Delay_us(30000);
Write_REG_R61500(0x0003,0x1030);
Delay_us(30000);
Write_REG_R61500(0x0004,0x0730);
Delay_us(30000);
Write_REG_R61500(0x0005,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0008,0x0202);
// Write_REG_R61500(0x0008,0x0808);
Delay_us(30000);
Write_REG_R61500(0x0009,0x000F);
// Write_REG_R61500(0x0009,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0040,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0041,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0042,0xDB00);
Delay_us(30000);
Write_REG_R61500(0x0043,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0044,0xAF00);
Delay_us(30000);
Write_REG_R61500(0x0045,0xDB00);
Delay_us(30000);
Write_REG_R61500(0x0007,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0012,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0013,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0011,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0012,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0013,0x151D);
Delay_us(30000);
Write_REG_R61500(0x0010,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0010,0x6040);
Delay_us(30000);
Write_REG_R61500(0x0012,0x0013);
Delay_us(30000);
Write_REG_R61500(0x0013,0x2D18);
Delay_us(30000);
Write_REG_R61500(0x000B,0x4000);
Delay_us(30000);
Write_REG_R61500(0x0010,0x0040);
Delay_us(30000);
Write_REG_R61500(0x0010,0x6060);
Delay_us(30000);
Write_REG_R61500(0x0007,0x0025);
Delay_us(30000);
Write_REG_R61500(0x0007,0x0037);
#endif
LCD_blockClear_R61500(0,0, LCD_WIDTH-1,LCD_HEIGHT-1,bkground);
}
void LCD_BlockWrite_R61500(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
#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,0x00);
SET_LCD_CMD_PARAMETER(14,LCD_CMD,0x00);
SET_LCD_CMD_PARAMETER(15,LCD_CMD,0x00);
SET_LCD_CMD_PARAMETER(16,LCD_CMD,0x00);
SET_LCD_CMD_PARAMETER(17,LCD_CMD,0x22);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(18);
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#else
Write_REG_R61500(LCD_INDEX_R44H_R61500,startx|(endx<<8));
Write_REG_R61500(LCD_INDEX_R45H_R61500,starty|(endy<<8));
Write_REG_R61500(LCD_INDEX_R21H_R61500,startx|(starty<<8));
LCD_CtrlWrite_R61500(LCD_INDEX_R22H_R61500);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
DISABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#endif
}
void LCD_EnterSleep_R61500(void)
{
//Write_REG_R61500(LCD_INDEX_R10H_R61500,0x0002);
Write_REG_R61500(LCD_INDEX_R10H_R61500,0x4242); //modified by caodongping aug-16-2005
Delay_us(2000);
}
void LCD_ExitSleep_R61500(void)
{
Write_REG_R61500(LCD_INDEX_R10H_R61500,0x4240);
Delay_us(10000);
#ifdef __TRULY_R61500_DRIVER__
Write_REG_R61500(0x0010,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0011,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0012,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0013,0x0000);
Delay_us(30000);
Write_REG_R61500(0x0011,0x0010);
Delay_us(30000);
Write_REG_R61500(0x0012,0x0004);
Delay_us(30000);
Write_REG_R61500(0x0013,0x151C);
Delay_us(30000);
Write_REG_R61500(0x0010,0x0004);
Delay_us(30000);
Write_REG_R61500(0x0010,0x2024);
Delay_us(30000);
Write_REG_R61500(0x0012,0x0010);
Delay_us(30000);
Write_REG_R61500(0x0010,0x2360);
Delay_us(30000);
Write_REG_R61500(0x0013,0x2E19);
Delay_us(30000);
Write_REG_R61500(0x0007,0x0025);
Delay_us(30000);
Write_REG_R61500(0x0007,0x0037);
Delay_us(30000);
#endif
}
void LCD_Size_R61500(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
*out_LCD_width = LCD_WIDTH;
*out_LCD_height =LCD_HEIGHT;
}
void LCD_PWRON_R61500(kal_bool on)
{
#ifdef __TRULY_R61500_DRIVER__
if(on)
{
LCD_ExitSleep_R61500();
}
else
{
LCD_EnterSleep_R61500();
}
#else
if(!on)
{
Write_REG_R61500(LCD_INDEX_R07H_R61500,0x0036);
Delay_us(20000);
Write_REG_R61500(LCD_INDEX_R07H_R61500,0x0022);
Delay_us(20000);
Write_REG_R61500(LCD_INDEX_R07H_R61500,0x0000);
Write_REG_R61500(LCD_INDEX_R09H_R61500,0x0000);
Write_REG_R61500(LCD_INDEX_R12H_R61500,0x0000);
Delay_us(2000);
Write_REG_R61500(LCD_INDEX_R13H_R61500,0x0D0F);
Delay_us(2000);
Write_REG_R61500(LCD_INDEX_R10H_R61500,0x0000);
}
#endif
}
void LCD_ON_R61500(kal_bool on)
{
}
void LCD_SetContrast_R61500(kal_uint8 level)
{
}
void LCD_Partial_On_R61500(kal_uint16 start_page,kal_uint16 end_page)
{
}
void LCD_Partial_Off_R61500(void)
{
}
kal_uint8 LCD_Partial_line_R61500(void)
{
return 1;
}
//Engineering mode
kal_uint8 LCD_GetParm_R61500(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_R61500(kal_uint8 *bias)
{
}
void LCD_Contrast_R61500(kal_uint8 *contrast)
{
}
void LCD_LineRate_R61500(kal_uint8 *linerate)
{
}
void LCD_Temp_Compensate_R61500(kal_uint8 *compensate)
{
}
LCD_Funcs LCD_func_R61500 = {
LCD_Init_R61500,
LCD_PWRON_R61500,
LCD_SetContrast_R61500,
LCD_ON_R61500,
LCD_BlockWrite_R61500,
LCD_Size_R61500,
LCD_EnterSleep_R61500,
LCD_ExitSleep_R61500,
LCD_Partial_On_R61500,
LCD_Partial_Off_R61500,
LCD_Partial_line_R61500,
// Engineering mode
LCD_GetParm_R61500,
LCD_SetBias_R61500,
LCD_Contrast_R61500,
LCD_LineRate_R61500,
LCD_Temp_Compensate_R61500
};
#endif //#ifdef __SM02_MIKI_DRV_LCD_HITACHI_R61500__
#ifdef __MIKI_SM264_TRULY_GG3342__
#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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -