📄 lcd.c
字号:
#if (defined(MT6218B)||defined(MT6219)||defined(MT6217))
void init_lcd_interface(void)
{
#ifdef DUAL_LCD
GPIO_ModeSetup(24, 1);
#endif
DRV_Reg(DRVPDN_CON1) &= (~DRVPDN_CON1_LCD); /* Power on LCD */
REG_LCD_ROI_CTRL=0;
CLEAR_LCD_CTRL_RESET_PIN;
#if (defined(MT6218B))
SET_LCD_PARALLEL_CE2WR_SETUP_TIME(2);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(2);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(0);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(10);
SET_LCD_PARALLEL_READ_LATENCY_TIME(0);
SET_LCD_ROI_CTRL_CMD_LATENCY(10);
DISABLE_LCD_PARALLEL_SYNC;
#elif (defined(MT6219))
SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)0);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(0);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(0);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(4);
SET_LCD_PARALLEL_READ_LATENCY_TIME(2);
SET_LCD_ROI_CTRL_CMD_LATENCY(2);
DISABLE_LCD_PARALLEL_SYNC;
#elif (defined(MT6217))
SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)0);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(0);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(0);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(4);
SET_LCD_PARALLEL_READ_LATENCY_TIME(2);
SET_LCD_ROI_CTRL_CMD_LATENCY(2);
SET_LCD_PARALLEL_8BIT_DATA_BUS;
SET_LCD_PARALLEL_CLOCK_52M;
#ifdef DUAL_LCD
SET_LCD_PARALLEL1_CE2WR_SETUP_TIME((kal_uint32)0);
SET_LCD_PARALLEL1_CE2WR_HOLD_TIME(0);
SET_LCD_PARALLEL1_CE2RD_SETUP_TIME(0);
SET_LCD_PARALLEL1_WRITE_WAIT_STATE(4);
SET_LCD_PARALLEL1_READ_LATENCY_TIME(2);
SET_LCD_ROI_CTRL_CMD_LATENCY(2);
#endif
#endif
LCD_Delay(15);
SET_LCD_CTRL_RESET_PIN;
} /* init_lcd_interface() */
#endif /* MT6217, MT6218B, MT6219 */
/***********************S6B33B0A********************************/
/*Tienma, 65k Color LCD, Parallel Interface, Butterfly development board*/
void LCD_EnterSleep_S6B33B0A(void)
{
LCD_CtrlWrite_S6B33B0A(LCD_DISPLAY_OFF_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(LCD_STANDBY_MODE_ON_S6B33B0A);
}
void LCD_ExitSleep_S6B33B0A(void)
{
kal_uint8 delay;
LCD_CtrlWrite_S6B33B0A(LCD_STANDBY_MODE_OFF_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(LCD_OSC_MODE_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x01); /* internal clock mode, internal OSC on */
for (delay =0;delay <50;delay++);
LCD_CtrlWrite_S6B33B0A(LCD_DISPLAY_ON_S6B33B0A);
}
void LCD_Partial_On_S6B33B0A(kal_uint16 start_page,kal_uint16 end_page)
{
LCD_CtrlWrite_S6B33B0A(LCD_PARTIAL_DISPLAY_START_LINE_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(start_page);
LCD_CtrlWrite_S6B33B0A(LCD_PARTIAL_DISPLAY_END_LINE_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(end_page);
LCD_CtrlWrite_S6B33B0A(LCD_PARTIAL_DISPLAY_MODE_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x01);
}
void LCD_Partial_Off_S6B33B0A(void)
{
LCD_CtrlWrite_S6B33B0A(LCD_PARTIAL_DISPLAY_MODE_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x00);
}
kal_uint8 LCD_Partial_line_S6B33B0A(void)
{
return 1; /* partial display in 1 line alignment */
}
void LCD_Set_Y_Addr_S6B33B0A(kal_uint16 start_row, kal_uint16 end_row)
{
LCD_CtrlWrite_S6B33B0A(LCD_X_ADDRESS_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(start_row);
LCD_CtrlWrite_S6B33B0A(end_row);
}
void LCD_Set_X_Addr_S6B33B0A(kal_uint16 start_column, kal_uint16 end_column)
{
LCD_CtrlWrite_S6B33B0A(LCD_Y_ADDRESS_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(start_column);
LCD_CtrlWrite_S6B33B0A(end_column);
}
void LCD_blockClear_S6B33B0A(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data)
{
kal_uint16 LCD_x;
kal_uint16 LCD_y;
volatile kal_uint16 delay;
LCD_Set_Y_Addr_S6B33B0A(y1, y2);
LCD_Set_X_Addr_S6B33B0A(x1, x2);
for(LCD_x=x1;LCD_x<=x2;LCD_x++)
{
for(LCD_y=y1;LCD_y<=y2;LCD_y++)
{
LCD_RAMWrite_S6B33B0A(data);
}
}
}
void LCD_ClearAll_S6B33B0A(kal_uint16 data)
{
LCD_blockClear_S6B33B0A(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,data);
}
void LCD_Init_S6B33B0A(kal_uint32 bkground, void **buf_addr)
{
kal_uint16 background = (kal_uint16)bkground;
kal_uint16 delay;
#if (!(defined(MT6218B)||defined(MT6219)||defined(MT6218)|| defined(MT6217))) //20050413 yguangyong added 6217 option
if(buf_addr)
*buf_addr = &lcd_shadow_buffer[0][0];
#endif
#ifdef MT6208
#ifdef MCU_13M
*EMI_CON3 = 0xe003; /*MT6208*/
#endif /*MCU_13M*/
#ifdef MCU_26M
*EMI_CON3 = 0xe104; /*MT6208*/
#endif /*MCU_26M*/
#ifdef MCU_39M
*EMI_CON3 = 0xe205; /*MT6208*/
#endif /*MCU_39M*/
#ifdef MCU_52M
*EMI_CON3 = 0xe306; /*MT6208*/
#endif /*MCU_52M*/
#endif /*MT6208*/
#ifdef MT6218
#ifdef MCU_13M
*EMI_COND0 = 0xe003; /*MT6218*/
#endif /*MCU_13M*/
#ifdef MCU_26M
*EMI_COND0 = 0xe104; /*MT6218*/
#endif /*MCU_26M*/
#ifdef MCU_39M
*EMI_COND0 = 0xe205; /*MT6218*/
#endif /*MCU_39M*/
#ifdef MCU_52M
*EMI_COND0 = 0xe306; /*MT6218*/
#endif /*MCU_52M*/
#endif /*MT6218*/
#ifdef MT6205B
#ifdef MCU_13M
*EMI_CON3 = 0xc001; /*MT6205B*/
#endif /*MCU_13M*/
#ifdef MCU_26M
*EMI_CON3 = 0xC203; /* temporary use for driver development 8bit mode*/
#endif /*MCU_26M*/
#endif /*MT6205B*/
#if ( (defined(MT6205)) || (defined(FPGA)) )
*EMI_CON2 = 0xc003; /*MT6205,FPGA*/
#endif /*(MT6205,FPGA)*/
/************ System Power On ***************************/
LCD_EnterSleep_S6B33B0A();
LCD_CtrlWrite_S6B33B0A(LCD_STANDBY_MODE_OFF_S6B33B0A);
while ((*(volatile unsigned char *) LCD_S6B33B0A_CTRL_ADDR) & 0x80); /* wait until it is not busy */
LCD_CtrlWrite_S6B33B0A(LCD_OSC_MODE_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x01); /* internal clock mode, internal OSC on */
LCD_CtrlWrite_S6B33B0A(LCD_DRIVER_OUTPUT_MODE_SET_S6B33B0A);
//LCD_CtrlWrite_S6B33B0A(0x00); /* 1/128 duty, SDIR=0, SWP=0 */
LCD_CtrlWrite_S6B33B0A(0x02); /* 1/128 duty, SDIR=0, SWP=1 */
//LCD_CtrlWrite_S6B33B0A(0x04); /* 1/128 duty, SDIR=1, SWP=0 */
//LCD_CtrlWrite_S6B33B0A(0x06); /* 1/128 duty, SDIR=1, SWP=1 */
LCD_CtrlWrite_S6B33B0A(LCD_DC2DC_AMP_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x0F); /* DCDC1 on, OP AMP on, DCDC2 on, DCDC3 on */
//LCD_Delay(10);
LCD_Delay(100);
LCD_CtrlWrite_S6B33B0A(LCD_DC2DC_SELECT_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x05); /* DC-DC x1.5 */
// LCD_CtrlWrite_S6B33B0A(0x0A); /* DC-DC x2.0 */
LCD_CtrlWrite_S6B33B0A(LCD_BIAS_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x11); /* Bias 1/5 */
// LCD_CtrlWrite_S6B33B0A(0x22); /* Bias 1/4 */
//LCD_CtrlWrite_S6B33B0A(0x33); /* Bias 1/4 */
LCD_CtrlWrite_S6B33B0A(LCD_CONTRAST_CTRL1_S6B33B0A);
//LCD_CtrlWrite_S6B33B0A(0xA5);
//LCD_CtrlWrite_S6B33B0A(0xC0);
LCD_CtrlWrite_S6B33B0A(210);
LCD_CtrlWrite_S6B33B0A(LCD_BIAS_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(9); /*BIAS*/
//LCD_CtrlWrite_S6B33B0A(LCD_DC2DC_CLK_DIV_SET_S6B33B0A);
//LCD_CtrlWrite_S6B33B0A(0x00); /* fPCK = fOSC/4 */
LCD_CtrlWrite_S6B33B0A(LCD_X_ADDRESS_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x00);
LCD_CtrlWrite_S6B33B0A(0x7F);
LCD_CtrlWrite_S6B33B0A(LCD_Y_ADDRESS_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x00);
LCD_CtrlWrite_S6B33B0A(0x7F);
LCD_CtrlWrite_S6B33B0A(LCD_NLINE_INVERSION_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x1F); /* FIM Off, PIP: every 15 blocks */
LCD_CtrlWrite_S6B33B0A(LCD_ADDRESS_MODE_SET_S6B33B0A);
//LCD_CtrlWrite_S6B33B0A(0x00); /* 64K color... */
LCD_CtrlWrite_S6B33B0A(0x09); /* 64K color,DSG=0,SGF=1,SGP=10,SGM=1 */
LCD_CtrlWrite_S6B33B0A(LCD_ROW_VECTOR_MODE_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(0x0F); /* INC = 111 (Every subframe) , VEC = 0 (R1->R2->R3->R4 */
//LCD_ClearAll_S6B33B0A(0xFFFF);
LCD_ClearAll_S6B33B0A(background);
LCD_CtrlWrite_S6B33B0A(LCD_DISPLAY_ON_S6B33B0A);
#ifdef LCD_DMAENABLE
DRV_WriteReg(LCD_REFR,0x0000);
DRV_WriteReg(LCD_PCON,0x0001);
#endif /*LCD_DMAENABLE*/
#if (defined(FIREFLY_BB)||defined(FIREFLY_856_BB)||defined(BUTTERFLY_833_BB)||defined(BUTTERFLY_836_BB))
//GPIO_WriteIO(1,0);
//GPIO_WriteIO(1,1);
//PWM_level(5); /*LCD power supply*/
#endif
}
void LCD_PWRON_S6B33B0A(kal_bool on)
{
if(on)
{
LCD_ExitSleep_S6B33B0A();
}
else
{
LCD_EnterSleep_S6B33B0A();
}
}
void LCD_SetContrast_S6B33B0A(kal_uint8 level)
{
LCD_CtrlWrite_S6B33B0A(LCD_CONTRAST_CTRL1_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(level);
}
void LCD_SetNBlockInv_S6B33B0A(kal_uint8 level)
{
LCD_CtrlWrite_S6B33B0A(LCD_NLINE_INVERSION_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(level); /* Forcing Inversion On, Foring Inversionperiod : 1 Frame */
/* Polarity Inversion period: every frame */
}
void LCD_ON_S6B33B0A(kal_bool on)
{
if (on)
{
LCD_CtrlWrite_S6B33B0A(LCD_DISPLAY_ON_S6B33B0A);
}
else
{
LCD_CtrlWrite_S6B33B0A(LCD_DISPLAY_OFF_S6B33B0A);
}
}
void LCD_BlockWrite_S6B33B0A(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;
#if (defined(MT6218B)||defined(MT6219)|| defined(MT6217)) //20050413 yguangyong added 6217 option
#ifdef LCD_CMD_DMA_MODE
SET_LCD_CMD_PARAMETER(0,LCD_CMD,LCD_Y_ADDRESS_SET_S6B33B0A);
SET_LCD_CMD_PARAMETER(1,LCD_CMD,startx);
SET_LCD_CMD_PARAMETER(2,LCD_CMD,endx);
SET_LCD_CMD_PARAMETER(3,LCD_CMD,LCD_X_ADDRESS_SET_S6B33B0A);
SET_LCD_CMD_PARAMETER(4,LCD_CMD,starty);
SET_LCD_CMD_PARAMETER(5,LCD_CMD,endy);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(6);
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#else
//LCD_Set_COLUMN_Addr_S6B33B0A(l_starty, l_endy);
//LCD_Set_PAGE_Addr_S6B33B0A(l_startx, l_endx);
LCD_Set_X_Addr_S6B33B0A(l_startx, l_endx);
LCD_Set_Y_Addr_S6B33B0A(l_starty, l_endy);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING) {};
START_LCD_TRANSFER;
#endif
#endif /* MT6218B, MT6219 */
}
void LCD_Size_S6B33B0A(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_S6B33B0A(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_S6B33B0A(kal_uint8 *bias)
{
LCD_CtrlWrite_S6B33B0A(LCD_BIAS_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(*bias); /*BIAS*/
}
void LCD_Contrast_S6B33B0A(kal_uint8 *contrast)
{
LCD_CtrlWrite_S6B33B0A(LCD_CONTRAST_CTRL1_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(*contrast);
}
void LCD_LineRate_S6B33B0A(kal_uint8 *linerate)
{
LCD_CtrlWrite_S6B33B0A(LCD_NLINE_INVERSION_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(*linerate); /* Forcing Inversion On, Foring Inversionperiod : 1 Frame */
}
void LCD_Temp_Compensate_S6B33B0A(kal_uint8 *compensate)
{
LCD_CtrlWrite_S6B33B0A(LCD_TEMP_COMP_SET_S6B33B0A);
LCD_CtrlWrite_S6B33B0A(*compensate);
}
LCD_Funcs LCD_func_S6B33B0A = {
LCD_Init_S6B33B0A,
LCD_PWRON_S6B33B0A,
LCD_SetContrast_S6B33B0A,
LCD_ON_S6B33B0A,
LCD_BlockWrite_S6B33B0A,
LCD_Size_S6B33B0A,
LCD_EnterSleep_S6B33B0A,
LCD_ExitSleep_S6B33B0A,
0,
0,
0,
/*Engineering mode*/
LCD_GetParm_S6B33B0A,
LCD_SetBias_S6B33B0A,
LCD_Contrast_S6B33B0A,
LCD_LineRate_S6B33B0A,
LCD_Temp_Compensate_S6B33B0A
};
#endif //#if (defined (__GD85_TCL_DRV_LCD_S6B33B0A_SAMSUNG__))
/* END TCL-xjinming modified for GD85 LCD_MAIN..... */
/* BEGIN 2005-07-07 TCL-xjinming added for GD85-2 LCD_MAIN..... */
/* WINTEK S1D15G27 OR TRULY S1D15G27******************************************/
/* 128x128(65K), Parallel i/o, COG Type Epson chip S1D15G27 */
/***************************************************************************/
#if (defined(__GD85_TCL_DRV_LCD_S1D15G27_WINTEK__) || defined(__GD85_TCL_DRV_LCD_S1D15G27_TRULY__))
#if (defined(MT6218B)||defined(MT6219)||defined(MT6217))
void init_lcd_interface(void)
{
DRV_Reg(DRVPDN_CON1) &= (~DRVPDN_CON1_LCD); /* Power on LCD */
REG_LCD_ROI_CTRL=0;
CLEAR_LCD_CTRL_RESET_PIN;
#if (defined(MT6218B))
#if defined(MBK_MB2X68B)
SET_LCD_PARALLEL_CE2WR_SETUP_TIME(0);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(0);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(0);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(10);
SET_LCD_PARALLEL_READ_LATENCY_TIME(14);
SET_LCD_ROI_CTRL_CMD_LATENCY(8);
#else /* MBK_MB2X68B */
SET_LCD_PARALLEL_CE2WR_SETUP_TIME(0);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(0);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(0);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(8);
SET_LCD_PARALLEL_READ_LATENCY_TIME(8);
SET_LCD_ROI_CTRL_CMD_LATENCY(4);
#endif /* MBK_MB2X68B */
DISABLE_LCD_PARALLEL_SYNC;
#elif (defined(MT6219))
SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)0);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(0);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(0);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(4);
SET_LCD_PARALLEL_READ_LATENCY_TIME(2);
SET_LCD_ROI_CTRL_CMD_LATENCY(2);
DISABLE_LCD_PARALLEL_SYNC;
#elif (defined(MT6217))
//20050707 yguanyong added for 6217
#if defined(MBK_MB2X68B)
SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)0);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(0);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(0);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(10);//16//12
SET_LCD_PARALLEL_READ_LATENCY_TIME(1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -