📄 lcd.c
字号:
void LCD_BlockWrite_HX8306A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
kal_uint16 l_startx=startx, l_starty=starty, l_endx=endx, l_endy=endy;
#ifdef LCD_CMD_DMA_MODE
if(lcd_id==_LGDP4531_240x320)
{
//l_startx=l_startx+1;
//l_endx=l_endx+1;
//l_starty=l_starty+1;
//l_endy=l_endy+1;
SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0020); //x start ram
SET_LCD_CMD_PARAMETER(1,LCD_DATA,l_startx);
SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0021); //y start ram
SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_starty);
SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0050); //x start of windowse
SET_LCD_CMD_PARAMETER(5,LCD_DATA,l_startx);
SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0051); //x end of windowse
SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_endx);
SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0052); //y start of windows
SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_starty);
SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0053); //y end of window
SET_LCD_CMD_PARAMETER(11,LCD_DATA,l_endy);
SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0022);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13);
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
return;
}
if(lcd_id==_ILI9320_240x320)
{
// #ifdef _ILI9320_240x320
SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0050); //x start ram
SET_LCD_CMD_PARAMETER(1,LCD_DATA,l_startx&0xff);
SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0051); //x end ram
SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_endx&0x00ff);
SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0052); //y start ram
SET_LCD_CMD_PARAMETER(5,LCD_DATA,l_starty&0x1ff);
SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0053); //y end ram
SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_endy&0x1ff);
SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0020); //x start for window
SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_startx&0xff);
SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0021); //y start for window
SET_LCD_CMD_PARAMETER(11,LCD_DATA,l_starty&0x1ff);
SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0022);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13);
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
// #endif
return;
}
if(lcd_id==_HX8346_240x320_)
{
// -----window setting-------
SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0002);
SET_LCD_CMD_PARAMETER(1,LCD_DATA,0);
SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0003);
SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_startx&0XFF);
SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0004);
SET_LCD_CMD_PARAMETER(5,LCD_DATA,0);
SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0005);
SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_endx&0XFF)
SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0006);
SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_starty>>8);
SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0007);
SET_LCD_CMD_PARAMETER(11,LCD_DATA,l_starty&0XFF);
SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0008);
SET_LCD_CMD_PARAMETER(13,LCD_DATA,l_endy>>8);
SET_LCD_CMD_PARAMETER(14,LCD_CMD,0x0009);
SET_LCD_CMD_PARAMETER(15,LCD_DATA,l_endy&0XFF);
SET_LCD_CMD_PARAMETER(16,LCD_CMD,0x0022);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(17);
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
return;
//#endif
}
if(lcd_id==_TL1763_240x320)
{
//#ifdef _TL1763_240x320
SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0046); //x start and end for windows
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((l_endx&0xff)<<8)|(l_startx&0xff));
SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0048); //y start for window
SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_starty&0x1ff);
SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0047); //y end for window
SET_LCD_CMD_PARAMETER(5,LCD_DATA,l_endy&0x1ff);
SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0020); //x start ram
SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_startx&0xff);
SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0021); //y start ram high 8bit
SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_starty&0x1ff);
SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0022);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
//#endif
return;
}
if(lcd_id==_SSD1289_240X320)
{
//#ifdef _SSD1289_240X320
SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x004e); //x start ram
SET_LCD_CMD_PARAMETER(1,LCD_DATA,l_startx);
SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x004f); //y start ram high 8bit
SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_starty);
SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0044); //x start and end for windows
SET_LCD_CMD_PARAMETER(5,LCD_DATA,(l_endx<<8|l_startx));
SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0045); //y start for window
SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_starty);
SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0046); //y end for window
SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_endy);
SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0022);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
//#endif
return;
}
if(lcd_id==_S6D0139_240x320)
{
//#ifdef _S6D0139_240x320
SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0046); //x start and end for windows
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((l_endx&0xff)<<8)|(l_startx&0xff));
SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0048); //y start for window
SET_LCD_CMD_PARAMETER(3,LCD_DATA,l_starty&0x1ff);
SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0047); //y end for window
SET_LCD_CMD_PARAMETER(5,LCD_DATA,l_endy&0x1ff);
SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0020); //x start ram
SET_LCD_CMD_PARAMETER(7,LCD_DATA,l_startx&0xff);
SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0021); //y start ram high 8bit
SET_LCD_CMD_PARAMETER(9,LCD_DATA,l_starty&0x1ff);
SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0022);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
//#endif
return;
}
#ifdef _HX8312_240x320_
SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x4200|l_startx));//x start ram
SET_LCD_CMD_PARAMETER(1,LCD_CMD,(0x4300|l_starty>>8));//y start ram high 8bit
SET_LCD_CMD_PARAMETER(2,LCD_CMD,(0x4400|(l_starty&0Xff)));//y start ram low 8 bit
SET_LCD_CMD_PARAMETER(3,LCD_CMD,(0x4500|l_startx));//x start for windows
SET_LCD_CMD_PARAMETER(4,LCD_CMD,(0x4600|l_endx));//x end for window
SET_LCD_CMD_PARAMETER(5,LCD_CMD,(0x4700|l_starty>>8));//y start for window high 8bit
SET_LCD_CMD_PARAMETER(6,LCD_CMD,(0x4800|(l_starty&0Xff)));//y start for window low 8bit
SET_LCD_CMD_PARAMETER(7,LCD_CMD,(0x4900|l_endy>>8));//y end for window high 8bit
SET_LCD_CMD_PARAMETER(8,LCD_CMD,(0x4a00|(l_endy&0Xff)));//y end for window low 8bit
SET_LCD_CMD_PARAMETER(9,LCD_CMD,0x3b01);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(10);
#endif
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#else
#ifdef _HX8312_240x320_
LCD_CtrlWrite_HX8306A(0x4200|l_startx);//x start ram
LCD_CtrlWrite_HX8306A(0x4300|l_starty>>8);//y start ram high 8bit
LCD_CtrlWrite_HX8306A(0x4400|(l_starty&0Xff));//y start ram low 8 bit
LCD_CtrlWrite_HX8306A(0x4500|l_startx);//x start for windows
LCD_CtrlWrite_HX8306A(0x4600|l_endx);//x end for window
LCD_CtrlWrite_HX8306A(0x4700|l_starty>>8);//y start for window high 8bit
LCD_CtrlWrite_HX8306A(0x4800|(l_starty&0Xff));//y start for window low 8bit
LCD_CtrlWrite_HX8306A(0x4900|l_endy>>8);//y end for window high 8bit
LCD_CtrlWrite_HX8306A(0x4a00|(l_endy&0Xff));//y end for window low 8bit
LCD_CtrlWrite_HX8306A(0x3b01);
#endif
#ifdef _SSD1289_240X320
Init_data(0x004e,l_startx);// x start ram adress
Init_data(0x004f,l_starty);//y start ram adress
Init_data(0x0044,(l_endx<<8)|l_startx); //x start and end for windows
Init_data(0x0045,l_starty); //y start for window
Init_data(0x0046,l_endy); //y end for window
LCD_CtrlWrite_HX8306A(0x0022);
#endif
#ifdef _TL1763_240x320
Init_data(0x0046,(l_endx<<8)|l_startx); //x start and end for windows
Init_data(0x0048,l_starty); //y start for window
Init_data(0x0047,l_endy); //y end for window
Init_data(0x0020,l_startx);// x start ram adress
Init_data(0x0021,l_starty);//y start ram adress
LCD_CtrlWrite_HX8306A(0x0022);
#endif
DISABLE_LCD_TRANSFER_COMPLETE_INT;
DISABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#endif
}
void LCD_Size_HX8306A(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
*out_LCD_width = LCD_WIDTH;
*out_LCD_height = LCD_HEIGHT;
}
/*Engineering mode*/
kal_uint8 LCD_GetParm_HX8306A(lcd_func_type type)
{
switch(type)
{
case lcd_Bais_func:
return 1;
case lcd_Contrast_func:
return 1;
case lcd_LineRate_func:
return 1;
case lcd_Temperature_Compensation_func:
return 1;
default:
ASSERT(0);
return 100;
}
}
void LCD_SetBias_HX8306A(kal_uint8 *bias)
{
}
void LCD_Contrast_HX8306A(kal_uint8 *contrast)
{
}
void LCD_LineRate_HX8306A(kal_uint8 *linerate)
{
}
void LCD_Temp_Compensate_HX8306A(kal_uint8 *compensate)
{
}
kal_bool LCD_ESD_check_HX8306A()
{
volatile kal_uint16 data_value = 0;
kal_uint16 data_addr = 0;
kal_uint8 i, reg_start_idx, reg_end_idx;
if (lcd_reg_index > 2) {
lcd_reg_index = 0;
}
while (LCD_IS_RUNNING);
if (lcd_reg_index == 0) {
reg_start_idx = 0;
reg_end_idx = 7;
}else if (lcd_reg_index == 1) {
reg_start_idx = 8;
reg_end_idx = 14;
}else{
reg_start_idx = 15;
reg_end_idx = N_lcd_reg - 1;
}
for (i = reg_start_idx; i <= reg_end_idx; i++) {
if (lcd_check == 1) {
data_addr = lcd_check_reg.reg[i].addr;
data_value = readreg_HX8306A(data_addr);
kal_prompt_trace(MOD_ENG, "--read %x as %x", data_addr, data_value);
if (data_value != lcd_check_reg.reg[i].para) {
kal_prompt_trace(MOD_ENG, "ESD FAIL read %x as %x", data_addr, data_value);
return KAL_FALSE;
}
}
}
lcd_reg_index++;
while (LCD_IS_RUNNING);
return KAL_TRUE;
}
#if ( (defined(MT6205B)) || (defined(MT6218)) )
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size)
{
#ifdef LCD_DMAENABLE
kal_uint32 srcaddr=(kal_uint32)src;
kal_uint32 dstaddr=(kal_uint32)dst;
kal_uint16 size_MSB = (kal_uint16)(size >> 9);
kal_uint16 size_LSB = (kal_uint16)(size & 0x01ff);
ASSERT(lcd_assert_fail==KAL_FALSE);
lcd_assert_fail = KAL_TRUE;
ASSERT(DRV_Reg(LCD_REFR)==0x00);
if(size_MSB)
{
DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16));
DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr);
DRV_WriteReg(LCD_REFR,0x0000);
DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16));
DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr));
DRV_WriteReg(LCD_CADDRSET,512);
DRV_WriteReg(LCD_PADDRSET,size_MSB);
DRV_WriteReg(LCD_CHOP,0);
DRV_WriteReg(LCD_PCON,LCD_PCON_DINC);
DRV_WriteReg(LCD_START,LCD_START_BIT);
while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN);
DRV_WriteReg(LCD_START,LCD_STOP_BIT);
}
if (size_LSB)
{
srcaddr = (srcaddr + size - size_LSB);
dstaddr = (dstaddr + size - size_LSB);
DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16));
DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr);
DRV_WriteReg(LCD_REFR,0x0000);
DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16));
DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr));
DRV_WriteReg(LCD_CADDRSET,size_LSB);
DRV_WriteReg(LCD_PADDRSET,1);
DRV_WriteReg(LCD_CHOP,0);
DRV_WriteReg(LCD_PCON,LCD_PCON_DINC);
DRV_WriteReg(LCD_START,LCD_START_BIT);
while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN);
DRV_WriteReg(LCD_START,LCD_STOP_BIT);
}
lcd_assert_fail = KAL_FALSE;
#else /*!LCD_DMAENABLE*/
kal_mem_cpy(dst,src,size);
#endif /*LCD_DMAENABLE*/
}
#else /*!(MT6205B,MT6218)*/
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size)
{
kal_mem_cpy(dst,src,size);
}
#endif /*(MT6205B,MT6218)*/
LCD_Funcs LCD_func_HX8306A = {
LCD_Init_HX8306A,
LCD_PWRON_HX8306A,
LCD_SetContrast_HX8306A,
LCD_ON_HX8306A,
LCD_BlockWrite_HX8306A,
LCD_Size_HX8306A,
LCD_EnterSleep_HX8306A,
LCD_ExitSleep_HX8306A,
LCD_Partial_On_HX8306A,
LCD_Partial_Off_HX8306A,
LCD_Partial_line_HX8306A,
/*Engineering mode*/
LCD_GetParm_HX8306A,
LCD_SetBias_HX8306A,
LCD_Contrast_HX8306A,
LCD_LineRate_HX8306A,
LCD_Temp_Compensate_HX8306A
#ifdef __LCD_ESD_RECOVERY__
,LCD_ESD_check_HX8306A
#endif
};
void LCD_FunConfig(void)
{
MainLCD = &LCD_func_HX8306A;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -