www.pudn.com > lcd.rar > lcd.c
/*--------janing xu updataed on 09/11/2007 -----*/
/*--- Please choose LCM firstly ---*/
//#define LCM_XINSHENHUI_HX8306A_176x220
#define LCM_LEAD_R61503_176x220
//#define LCM_LEAD_ILI9221_176x220
//#define LCM_LEAD_L1E2_176x220
/*--- Please choose LCM firstly ---*/
/*---------------------------------------*/
#include "drv_comm.h"
#include "reg_base.h"
#include "lcd_sw_inc.h"
#include "lcd_sw.h"
#include "lcd_hw.h"
/*Serial interface*/
#include "lcd_if.h"
#include "lcd_sw_rnd.h"
#ifndef __CUST_NEW__
extern void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada);
extern void GPIO_WriteIO(char data, char port);
#endif /* __CUST_NEW__ */
volatile kal_uint32 g_iFactor = 50;
void LCD_Init_HX8306A(kal_uint32 bkground, void **buf_addr);
kal_bool lcd_assert_fail = KAL_FALSE;
kal_uint8 lcd_check = 0;
kal_uint8 lcd_reg_index = 0;
const lcd_data_struct lcd_check_reg = {
{
{0x0001,0x011B}, {0x0002,0x0700}, {0x0003,0x1230}, {0x0007,0x0037}, {0x0009,0x0000},
{0x000B,0x0000}, {0x000C,0x0003}, {0x0010,0x4140}, {0x0011,0x0000}, {0x0012,0x0013},
{0x0013,0x3611}, {0x0040,0x0000}, {0x0041,0x00EF}, {0x0042,0xDB00}, {0x0043,0xDB00},
{0x0047,0x0000}, {0x0008,0x0202}, {0x0004,0x0000}, {0x0005,0x0000}, {0x0023,0x0000},
{0x0024,0x0000}, {0x0053,0x0000}
}
};
/* default value for Himax HX8306A */
kal_uint16 lcd_power_ctrl_shadow1, lcd_power_ctrl_shadow3, lcd_power_ctrl_shadow4;
#ifdef DUAL_LCD
#ifndef COLOR_SUBLCD
const kal_uint8 SubLCDSetArray[]=
{
0x01, // 0000 0001
0x02, // 0000 0010
0x04, // 0000 0100
0x08, // 0000 1000
0x10, // 0001 0000
0x20, // 0010 0000
0x40, // 0100 0000
0x80 // 1000 0000
};
const kal_uint8 SubLCDReSetArray[]=
{
0xFE, // 1111 1110
0xFD, // 1111 1101
0xFB, // 1111 1011
0xF7, // 1111 0111
0xEF, // 1110 1111
0xDF, // 1101 1111
0xBF, // 1011 1111
0x7F // 0111 1111
};
#endif
#endif
void LCD_Delay(kal_uint32 delay_count)
{
volatile kal_uint32 delay;
for (delay = 0; delay < delay_count * g_iFactor; delay++);
}
void DELAY_1ms(kal_uint8 nSec)
{
volatile kal_uint16 delay;
volatile kal_uint16 loop;
for(delay=0;delay<nSec;delay++)
for(loop=0;loop<0xF000;loop++)
{
__asm{nop;nop;nop;}
}
}
void spi_ini(void)
{
}
#if (defined(MT6217) || defined(MT6218B) || defined(MT6219) || defined(MT6225) || defined(MT6226) || defined(MT6226M) || defined(MT6227))
void init_lcd_interface(void)
{
kal_uint32 i;
SET_LCD_CTRL_RESET_PIN;
DELAY_1ms(2);
REG_LCD_ROI_CTRL = 0;
CLEAR_LCD_CTRL_RESET_PIN;
#if (defined(MT6219) || defined(MT6225) || defined(MT6226) || defined(MT6226M) || defined(MT6227))
SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)2);
SET_LCD_PARALLEL_CE2WR_HOLD_TIME(2);
SET_LCD_PARALLEL_CE2RD_SETUP_TIME(3);
SET_LCD_PARALLEL_WRITE_WAIT_STATE(4);
SET_LCD_PARALLEL_READ_LATENCY_TIME(31);
SET_LCD_ROI_CTRL_CMD_LATENCY(2);
SET_LCD_SERIAL_CLOCK_52M;
#if (defined(MT6225) || defined(MT6226) || defined(MT6226M) || defined(MT6227))
#if (defined(LCD_18BIT_MODE))
#ifndef __CUST_NEW__
GPIO_ModeSetup(55, 1); // LCD D[16]
GPIO_ModeSetup(56, 1); // LCD D[17]
#else
*((volatile unsigned short *) 0x801201B0) |= 0x4000; // LCD D[16]
*((volatile unsigned short *) 0x801201D0) |= 0x0001; // LCD D[17]
#endif
SET_LCD_PARALLEL_18BIT_DATA_BUS;
#elif (defined(LCD_16BIT_MODE))
SET_LCD_PARALLEL_16BIT_DATA_BUS;
#elif (defined(LCD_8BIT_MODE))
SET_LCD_PARALLEL_8BIT_DATA_BUS;
#endif /* (defined(LCD_18BIT_MODE)) */
for (i = 0; i < 62; i++) {
SET_GAMMA_TABLE(LCD_GAMMA_TABLE0, i, i);
}
SET_GAMMA_TABLE(LCD_GAMMA_TABLE0, 62, 61);
SET_GAMMA_TABLE(LCD_GAMMA_TABLE0, 63, 61);
SET_LCD_PARALLEL_GAMMA_R_TABLE(LCD_PARALLEL_GAMMA_TABLE0);
SET_LCD_PARALLEL_GAMMA_G_TABLE(LCD_PARALLEL_GAMMA_TABLE0);
SET_LCD_PARALLEL_GAMMA_B_TABLE(LCD_PARALLEL_GAMMA_TABLE0);
#endif /* (defined(MT6225) || defined(MT6226) || defined(MT6226M) || defined(MT6227)) */
#if (defined(MT6219))
DISABLE_LCD_PARALLEL_SYNC;
#endif
#endif /* (defined(MT6219) || defined(MT6225) || defined(MT6226) || defined(MT6226M) || defined(MT6227)) */
DELAY_1ms(50);
SET_LCD_CTRL_RESET_PIN;
DELAY_1ms(5);
} /* init_lcd_interface() */
#endif /* (defined(MT6217) || defined(MT6218B) || defined(MT6219) || defined(MT6225) || defined(MT6226) || defined(MT6226M) || defined(MT6227)) */
kal_uint16 readreg_HX8306A(kal_uint16 addr)
{
/*
#ifdef LCD_16BIT_MODE
kal_uint16 return_data;
kal_uint32 read_data;
volatile kal_uint8 read_data1, read_data2;
while (LCD_IS_RUNNING);
LCD_CtrlWrite_HX8306A_ESD(addr);
read_data = *(volatile kal_uint32 *)MAIN_LCD_DATA_ADDR;
read_data1 = ((read_data >> 10) &amt; 0x000000ff);
read_data2 = ((read_data>> 1) &amt; 0x000000ff);
return_data=(read_data1<<8)|read_data2;
while (LCD_IS_RUNNING);
return return_data;
#elif (defined(LCD_8BIT_MODE))
kal_uint16 return_data;
kal_uint8 iDataH, iDataL;
while (LCD_IS_RUNNING);
LCD_CtrlWrite_HX8306A_ESD(addr);
iDataH = *(volatile kal_uint8 *) MAIN_LCD_DATA_ADDR;
iDataL = *(volatile kal_uint8 *) MAIN_LCD_DATA_ADDR;
return_data = (iDataH << 8) | iDataL;
while (LCD_IS_RUNNING);
return return_data;
#endif
*/
}
void LCD_set_reg(kal_uint16 reg_index, kal_uint16 reg_data)
{ LCD_CtrlWrite_HX8306A(0);
LCD_CtrlWrite_HX8306A(reg_index);
LCD_DataWrite_HX8306A((reg_data&amt;0xFF00)>>8);
LCD_DataWrite_HX8306A(reg_data&amt;0xFF);
}
void LCD_EnterSleep_HX8306A(void)
{
lcd_power_ctrl_shadow1 |= 0x02;
lcd_power_ctrl_shadow3 &amt;= ~0x10;
lcd_power_ctrl_shadow4 &amt;= ~0x2000;
#ifdef LCM_LEAD_R61503_176x220
{
// Display off
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x02);
DELAY_1ms(4);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x12);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x12);
DELAY_1ms(5);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
// Power off
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x80);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x61);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x12);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x13);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
DELAY_1ms(4);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
// Sleep set
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x02);
}
#elif defined(LCM_LEAD_ILI9221_176x220)
{
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
DELAY_1ms(2);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x02); //SLP=1
}
#elif defined(LCM_LEAD_L1E2_176x220)
{
LCD_CtrlWrite_HX8306A(0x11); // janing xu LEAD L1E2
}
#elif defined(LCM_XINSHENHUI_HX8306A_176x220) // PXC3100
{
//Display Off Function
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x26);
DELAY_1ms(10);//delayX1ms(50);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x25);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x05);
DELAY_1ms(10);//delayX1ms(50);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x40);
LCD_DataWrite_HX8306A(0x42); // SLP=1,
}
#endif
}
void LCD_Partial_On_HX8306A(kal_uint16 start_page,kal_uint16 end_page)
{
}
void LCD_Partial_Off_HX8306A(void)
{
}
kal_uint8 LCD_Partial_line_HX8306A(void)
{
return 1; /* partial display in 1 line alignment */
}
void LCD_blockClear_HX8306A(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
{
kal_uint16 LCD_x;
kal_uint16 LCD_y;
kal_uint8 r_color, g_color, b_color;
/*
x1 -= (x1 &amt; 0x03);
x2 += (3 - (x2 &amt; 0x03));
r_color = (data &amt; 0xF800) >> 10; // transfer to RGB666
g_color = (data >> 5) &amt; 0x3F;
b_color = (data &amt; 0x1F) << 1;
*/
#ifdef LCM_LEAD_R61503_176x220
{
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x50);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(x1 &amt; 0xFF);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x51);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(x2 &amt; 0xFF);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x52);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(y1 &amt; 0xFF);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x53);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(y2 &amt; 0xFF);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x20);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(x1 &amt; 0xFF);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x21);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(x2 &amt; 0xFF);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x22);
} /*--end LCM_LEAD_R61503_176x220 --*/
#elif defined(LCM_LEAD_ILI9221_176x220)
{
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x44);
LCD_DataWrite_HX8306A((x2&amt;0xFF));
LCD_DataWrite_HX8306A((x1&amt;0xFF));
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x45);
LCD_DataWrite_HX8306A((y2&amt;0xFF));
LCD_DataWrite_HX8306A((y1&amt;0xFF));
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x21);
LCD_DataWrite_HX8306A(y1 &amt; 0xFF);
LCD_DataWrite_HX8306A(x1 &amt; 0xFF);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x22);
} /* -- end LCM_LEAD_ILI9221_176x220--*/
#elif defined(LCM_XINSHENHUI_HX8306A_176x220)
{
SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(1,LCD_CMD, 0x44 );
SET_LCD_CMD_PARAMETER(2,LCD_DATA, (x2 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(3,LCD_DATA, (x1 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(5,LCD_CMD,0x45);
SET_LCD_CMD_PARAMETER(6,LCD_DATA, (y2 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (y1 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(9,LCD_CMD, 0x21);
SET_LCD_CMD_PARAMETER(10,LCD_DATA, (y1 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(11,LCD_DATA, (x1 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x22);
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14);
}/* -- end LCM_XINSHENHUI_HX8306A_176x220--*/
#elif defined(LCM_LEAD_L1E2_176x220)
{
SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0x2A);
SET_LCD_CMD_PARAMETER(1,LCD_DATA, ((x1>>8)&amt;0xFF));
SET_LCD_CMD_PARAMETER(2,LCD_DATA, (x1 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(3,LCD_DATA, ((x2>>8)&amt;0xFF));
SET_LCD_CMD_PARAMETER(4,LCD_DATA, (x2 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(5,LCD_CMD, 0x2B);
SET_LCD_CMD_PARAMETER(6,LCD_DATA, ((y1>>8)&amt;0xFF));
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (y1 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(8,LCD_DATA, ((y2>>8)&amt;0xFF));
SET_LCD_CMD_PARAMETER(9,LCD_DATA, (y2 &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(10,LCD_CMD, 0x2C);
}
#endif
for (LCD_y = y1; LCD_y <= y2; LCD_y++)
{
for (LCD_x = x1; LCD_x <= x2; LCD_x++)
{
#if (defined(LCD_8BIT_MODE))
*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR) = (kal_uint8)(data >> 8);
*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR) = (kal_uint8)(data &amt; 0x00FF);
#elif (defined(LCD_16BIT_MODE))
*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR) = data;
#elif (defined(LCD_18BIT_MODE))
*((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(r_color<<12)|(g_color<<6)|b_color;
#elif (defined(LCD_9BIT_MODE))
*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=(r_color<<6)|(g_color>>3);
*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=((g_color&amt;0x07)<<6)|b_color;
#endif
}
}
}
void LCD_ClearAll_HX8306A(kal_uint16 data)
{
LCD_blockClear_HX8306A(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1, data);
}
void LCD_Init_HX8306A(kal_uint32 bkground, void **buf_addr)
{
CLEAR_LCD_CTRL_RESET_PIN;
DELAY_1ms(3);//Delayms(10);
SET_LCD_CTRL_RESET_PIN;
DELAY_1ms(3);//Delayms(10);
lcd_check = 0;
#ifdef LCM_LEAD_L1E2_176x220
{
LCD_CtrlWrite_HX8306A(0x11);
DELAY_1ms(20); //Delay(120);
LCD_CtrlWrite_HX8306A(0xc5);
LCD_DataWrite_HX8306A(0x53);
LCD_DataWrite_HX8306A(0x0c);
LCD_CtrlWrite_HX8306A(0xe7);
LCD_DataWrite_HX8306A(0x7e);
///////////GAMMA SET////////////
LCD_CtrlWrite_HX8306A(0xAA);
LCD_CtrlWrite_HX8306A(0xC0);
LCD_DataWrite_HX8306A(0x0C);
LCD_CtrlWrite_HX8306A(0xE6);
LCD_DataWrite_HX8306A(0x01);
LCD_CtrlWrite_HX8306A(0xE2);
LCD_DataWrite_HX8306A(0x17);
LCD_DataWrite_HX8306A(0x0F);
LCD_DataWrite_HX8306A(0x0D);
LCD_DataWrite_HX8306A(0x0D);
LCD_DataWrite_HX8306A(0x09);
LCD_DataWrite_HX8306A(0x0B);
LCD_DataWrite_HX8306A(0x0A);
LCD_DataWrite_HX8306A(0x0E);
LCD_DataWrite_HX8306A(0x09);
LCD_DataWrite_HX8306A(0x17);
LCD_DataWrite_HX8306A(0x0E);
LCD_DataWrite_HX8306A(0x0B);
LCD_DataWrite_HX8306A(0x06);
LCD_DataWrite_HX8306A(0x06);
LCD_DataWrite_HX8306A(0x16);
LCD_DataWrite_HX8306A(0x6E);
LCD_DataWrite_HX8306A(0x74);
LCD_CtrlWrite_HX8306A(0xE3);
LCD_DataWrite_HX8306A(0x15);
LCD_DataWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x13);
LCD_DataWrite_HX8306A(0x17);
LCD_DataWrite_HX8306A(0x14);
LCD_DataWrite_HX8306A(0x13);
LCD_DataWrite_HX8306A(0x0F);
LCD_DataWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x09);
LCD_DataWrite_HX8306A(0x03);
LCD_DataWrite_HX8306A(0x12);
LCD_DataWrite_HX8306A(0x0F);
LCD_DataWrite_HX8306A(0x0B);
LCD_DataWrite_HX8306A(0x0A);
LCD_DataWrite_HX8306A(0x03);
LCD_DataWrite_HX8306A(0x49);
LCD_DataWrite_HX8306A(0x4F);
LCD_CtrlWrite_HX8306A(0x35);
LCD_DataWrite_HX8306A(0x01);
///////////DISPLAY SET////////////
LCD_CtrlWrite_HX8306A(0x3A);
LCD_DataWrite_HX8306A(0x05); //8BIT,2-transferR-G-B
LCD_CtrlWrite_HX8306A(0x29);
LCD_CtrlWrite_HX8306A(0x13); // Normal Display Mode On janing xu
}
#elif defined LCM_LEAD_R61503_176x220
{
#if 1
LCD_set_reg(0x0000,0x0001);
DELAY_1ms(5);//LCD_Delay(20);
LCD_set_reg(0x0007,0x0000);
DELAY_1ms(5);
LCD_set_reg(0x0012,0x0000);
DELAY_1ms(3);
LCD_set_reg(0x00A4,0x0001);
DELAY_1ms(6);
LCD_set_reg(0x0070,0x1b00);
LCD_set_reg(0x0008,0x0202);
/************* Gamma ***************** */
LCD_set_reg(0x0030,0x0601);
LCD_set_reg(0x0031,0x0507);
LCD_set_reg(0x0032,0x0006);
LCD_set_reg(0x0033,0x0701);
LCD_set_reg(0x0034,0x0105);
LCD_set_reg(0x0035,0x0004);
LCD_set_reg(0x0036,0x0605);
LCD_set_reg(0x0037,0x0002);
LCD_set_reg(0x0038,0x1c00);
LCD_set_reg(0x0039,0x0500);
LCD_set_reg(0x003a,0x0100);
DELAY_1ms(1);
/************* Gamma End ***************** */
LCD_set_reg(0x0014,0x8000);
DELAY_1ms(7);//LCD_Delay(30);
LCD_set_reg(0x0001,0x0100);
LCD_set_reg(0x0002,0x0400);
LCD_set_reg(0x0003,0x1030); //HWM=1 0x1030 //ss.pan 2007.11.27 modify
LCD_set_reg(0x0070,0x1b00);
LCD_set_reg(0x0071,0x0001);
LCD_set_reg(0x0090,0x0000);
LCD_set_reg(0x0091,0x0000);
LCD_set_reg(0x0092,0x0001);
LCD_set_reg(0x0098,0x0002);
LCD_set_reg(0x0099,0x060e);
LCD_set_reg(0x009a,0x060e);
LCD_set_reg(0x0050,0x0000);
LCD_set_reg(0x0051,0x00af);
LCD_set_reg(0x0052,0x0000);
LCD_set_reg(0x0053,0x00db);
LCD_set_reg(0x0020,0x0000);
LCD_set_reg(0x0021,0x0000);
LCD_set_reg(0x0007,0x0001);
LCD_set_reg(0x0018,0x0001);
LCD_set_reg(0x0010,0x11b0);
LCD_set_reg(0x0011,0x0001);
DELAY_1ms(7);
LCD_set_reg(0x0012,0x1111);
DELAY_1ms(5);
LCD_set_reg(0x0013,0x830c);
LCD_set_reg(0x0012,0x1131);
LCD_set_reg(0x0007, 0x0001);
DELAY_1ms(5);
LCD_set_reg(0x0007,0x0021);
DELAY_1ms(5);
LCD_set_reg(0x0007,0x0233);
#else //lead对初始化代码作了更新
LCD_set_reg(0x0000,0x0000);
LCD_set_reg(0x0000,0x0000);
LCD_set_reg(0x0000,0x0000);
LCD_set_reg(0x0000,0x0000);
LCD_set_reg(0x0000,0x0000);
LCD_set_reg(0x00A4,0x0001);
kal_sleep_task(5);
LCD_set_reg(0x0007,0x0001);
LCD_set_reg(0x0018,0x0001);
LCD_set_reg(0x0010,0x11B0);
LCD_set_reg(0x0011,0x0110);
LCD_set_reg(0x0012,0x0036);
LCD_set_reg(0x0013,0x850C);
LCD_set_reg(0x0012,0x0036);
LCD_set_reg(0x0014,0x8000);
LCD_set_reg(0x0001,0x0100);
LCD_set_reg(0x0002,0x0700);
LCD_set_reg(0x0003,0x1030); //cancel high speed transfer
LCD_set_reg(0x0008,0x0808);
LCD_set_reg(0x0009,0x0000);
LCD_set_reg(0x000C,0x0000);
LCD_set_reg(0x000F,0x0000);
LCD_set_reg(0x0020,0x0000);
LCD_set_reg(0x0021,0x0000);
LCD_set_reg(0x0030,0x0305);
LCD_set_reg(0x0031,0x0002);
LCD_set_reg(0x0032,0x0100);
LCD_set_reg(0x0033,0x0102);
LCD_set_reg(0x0034,0x0706);
LCD_set_reg(0x0035,0x0606);
LCD_set_reg(0x0036,0x0304);
LCD_set_reg(0x0037,0x0200);
LCD_set_reg(0x0038,0x0000);
LCD_set_reg(0x0039,0x001F);
LCD_set_reg(0x003A,0x0000);
LCD_set_reg(0x0020,0x0000);
LCD_set_reg(0x0021,0x0000);
LCD_set_reg(0x0050,0x0000);
LCD_set_reg(0x0051,0x00AF);
LCD_set_reg(0x0052,0x0000);
LCD_set_reg(0x0053,0x00DB);
LCD_set_reg(0x0070,0x1B00);
LCD_set_reg(0x0071,0x0001);
LCD_set_reg(0x007A,0x0000);
LCD_set_reg(0x0085,0x0000);
LCD_set_reg(0x0090,0x0008);
LCD_set_reg(0x0091,0x0100);
LCD_set_reg(0x0092,0x0001);
LCD_set_reg(0x0007,0x0001);
kal_sleep_task(15);
LCD_set_reg(0x0007,0x0021);
kal_sleep_task(15);
LCD_set_reg(0x0012,0x1138);
kal_sleep_task(15);
LCD_set_reg(0x0007,0x0233);
#endif
} /*--end LCM_LEAD_R61503_176x220 --*/
#elif defined(LCM_LEAD_ILI9221_176x220)
{
LCD_CtrlWrite_HX8306A(0x00); // start internal OSC
LCD_CtrlWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x01);
LCD_CtrlWrite_HX8306A(0x00); // set the display line number and display direction
LCD_CtrlWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x01);
LCD_DataWrite_HX8306A(0x1B);
LCD_CtrlWrite_HX8306A(0x00); //SET 1 Line inversion
LCD_CtrlWrite_HX8306A(0x02);
LCD_DataWrite_HX8306A(0x05);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00); //set gram write direction and BGR=1;
LCD_CtrlWrite_HX8306A(0x03);
LCD_DataWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x30);
LCD_CtrlWrite_HX8306A(0x00); //set mask bit
LCD_CtrlWrite_HX8306A(0x04);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00); //set mask bit
LCD_CtrlWrite_HX8306A(0x05);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00); //display off
LCD_CtrlWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00); //set the back porch and Front porch
LCD_CtrlWrite_HX8306A(0x08);
LCD_DataWrite_HX8306A(0x02);
LCD_DataWrite_HX8306A(0x02);
LCD_CtrlWrite_HX8306A(0x00); //display control 3
LCD_CtrlWrite_HX8306A(0x09);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00); //set clocks number per line
LCD_CtrlWrite_HX8306A(0x0B);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00); //CPU INTERFACE
LCD_CtrlWrite_HX8306A(0x0C);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
//POWER SET
LCD_CtrlWrite_HX8306A(0x00); //SET vgh/vgl,turn off the charge-bump circuit
LCD_CtrlWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
DELAY_1ms(3); // Delayms(10);
LCD_CtrlWrite_HX8306A(0x00); //SET the frequency of charge-pump circuit and reference voltage
LCD_CtrlWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00);//SET REFERENCE VOLTAGE OF GAMMA CIRCUIT
LCD_CtrlWrite_HX8306A(0x12);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
DELAY_1ms(9); // Delayms(40);
LCD_CtrlWrite_HX8306A(0x00);//SET VCOMH/VCOML
LCD_CtrlWrite_HX8306A(0x13);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
DELAY_1ms(9); // Delayms(40);
LCD_CtrlWrite_HX8306A(0x00);//SET VCOMH/VCOML
LCD_CtrlWrite_HX8306A(0x56);
LCD_DataWrite_HX8306A(0x08);
LCD_DataWrite_HX8306A(0x0F);
DELAY_1ms(9); // Delayms(40);
LCD_CtrlWrite_HX8306A(0x00);//SET vgh/vgl,turn off the charge-bump circuit
LCD_CtrlWrite_HX8306A(0x10);
LCD_DataWrite_HX8306A(0x42);
LCD_DataWrite_HX8306A(0x40);
DELAY_1ms(9); // Delayms(10);
LCD_CtrlWrite_HX8306A(0x00);//SET the frequency of charge-pump circuit and reference voltage
LCD_CtrlWrite_HX8306A(0x11);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00);//SET REFERENCE VOLTAGE OF GAMMA CIRCUIT
LCD_CtrlWrite_HX8306A(0x12);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x14);
DELAY_1ms(9); //Delayms(40);
LCD_CtrlWrite_HX8306A(0x00);//SET VCOMH/VCOML
LCD_CtrlWrite_HX8306A(0x13);
LCD_DataWrite_HX8306A(0x13);
LCD_DataWrite_HX8306A(0x19);
DELAY_1ms(9); // Delayms(40);
LCD_CtrlWrite_HX8306A(0x00);//SET VCOMH/VCOML
LCD_CtrlWrite_HX8306A(0x13);
LCD_DataWrite_HX8306A(0x33);
LCD_DataWrite_HX8306A(0x19);
DELAY_1ms(9); // Delayms(40);
//GAMMA 2.2 CURVE
LCD_CtrlWrite_HX8306A(0x00);// start internal OSC
LCD_CtrlWrite_HX8306A(0x30);
LCD_DataWrite_HX8306A(0x03);
LCD_DataWrite_HX8306A(0x02);
LCD_CtrlWrite_HX8306A(0x00);// set the display line number and display direction
LCD_CtrlWrite_HX8306A(0x31);
LCD_DataWrite_HX8306A(0x04);
LCD_DataWrite_HX8306A(0x07);
LCD_CtrlWrite_HX8306A(0x00);//SET 1 Line inversion
LCD_CtrlWrite_HX8306A(0x32);
LCD_DataWrite_HX8306A(0x03);
LCD_DataWrite_HX8306A(0x04);
LCD_CtrlWrite_HX8306A(0x00);//set gram write direction and BGR=1;
LCD_CtrlWrite_HX8306A(0x33);
LCD_DataWrite_HX8306A(0x02);
LCD_DataWrite_HX8306A(0x03);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x34);
LCD_DataWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x06);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x35);
LCD_DataWrite_HX8306A(0x04);
LCD_DataWrite_HX8306A(0x07);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x36);
LCD_DataWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x06);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x37);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x38);
LCD_DataWrite_HX8306A(0x0C);
LCD_DataWrite_HX8306A(0x06);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x39);
LCD_DataWrite_HX8306A(0x0F);
LCD_DataWrite_HX8306A(0x00);
//DISPLAY ON
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x40);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x41);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x00);
LCD_CtrlWrite_HX8306A(0x07);
LCD_DataWrite_HX8306A(0x00);
LCD_DataWrite_HX8306A(0x37);
} /* -- end LCM_LEAD_ILI9221_176x220--*/
#elif defined(LCM_XINSHENHUI_HX8306A_176x220)
{
LCD_set_reg(0x0007,0x0040);//turn off power,display off
LCD_set_reg(0x0012,0x0000);//power control 3
LCD_set_reg(0x0013,0x0000);//power control 4
LCD_Delay(10);
LCD_set_reg(0x0001,0x011b);
LCD_set_reg(0x0002,0x0700);
LCD_set_reg(0x0003,0x1030);//bgr=1 janing xu
LCD_set_reg(0x0004,0x0000);
LCD_set_reg(0x0005,0x0000);
LCD_set_reg(0x000b,0x4000);
/*********power setting*********/
LCD_set_reg(0x0011,0x0000);
LCD_set_reg(0x0012,0x0008);
LCD_set_reg(0x0013,0x1014);//VCOMH
LCD_set_reg(0x0010,0x4040);
LCD_Delay(10);
LCD_set_reg(0x0012,0x0018);
LCD_Delay(10);
LCD_set_reg(0x0013,0x3014);//VCOMH
LCD_Delay(10);
/********Gamma Adjustment*********/
LCD_set_reg(0x0030,0x0000);
LCD_set_reg(0x0031,0x0207);
LCD_set_reg(0x0032,0x0000);
LCD_set_reg(0x0033,0x0401);
LCD_set_reg(0x0034,0x0707);
LCD_set_reg(0x0035,0x0005);
LCD_set_reg(0x0036,0x0707);
LCD_set_reg(0x0037,0x0000);
LCD_set_reg(0x0038,0x0000);
LCD_set_reg(0x0039,0x0000);
////////////////////////////////////
LCD_set_reg(0x0040,0x0000);
LCD_set_reg(0x0041,0xef00);
LCD_set_reg(0x0042,0x00db);
LCD_set_reg(0x0043,0xdb00);
LCD_set_reg(0x0044,0xaf00);
LCD_set_reg(0x0045,0xdb00);
/////////////////////////////////////
LCD_set_reg(0x0007,0x0141);
LCD_Delay(10);
LCD_set_reg(0x0007,0x0161);
LCD_Delay(10);
LCD_set_reg(0x0007,0x0163);
LCD_Delay(10);
LCD_set_reg(0x0007,0x0f77);
LCD_Delay(10);
LCD_set_reg(0x0008,0x0202);
}/* -- end LCM_XINSHENHUI_HX8306A_176x220--*/
#endif
/*
//janing xu debug
{ // Italy National Flag
#include "Device.h"
extern const char gpio_led_mainbl_en_pin;
extern void PWM_level(kal_uint8 level);
GPIO_WriteIO(1, gpio_led_mainbl_en_pin);
PWM_level(LED_LIGHT_LEVEL4);
LCD_blockClear_HX8306A(0,0,43,159,0x07E0);
LCD_blockClear_HX8306A(44,0,83,159,0xFFFF);
LCD_blockClear_HX8306A(84,0,127,159,0xF800);
kal_sleep_task(600);
}
*/
LCD_ClearAll_HX8306A(bkground);
lcd_power_ctrl_shadow1=0x0144;//0x0004;//0x2140;
lcd_power_ctrl_shadow3=0x0014;//0x0012;
lcd_power_ctrl_shadow4=0x2a15;//0x300E;
lcd_power_ctrl_shadow1=0x2464;
lcd_power_ctrl_shadow3=0x0012;
lcd_power_ctrl_shadow4=0x2a15;
DELAY_1ms(5);//Delayms(0x80000);
}
void LCD_ReInit(void)
{
LCD_Init_HX8306A(0,NULL);
}
void LCD_ExitSleep_HX8306A(void)
{
//lcd_power_ctrl_shadow1 &amt;= ~0x2;
//lcd_power_ctrl_shadow3 |= 0x10;
//lcd_power_ctrl_shadow4 |= 0x2000;
LCD_Init_HX8306A(0,0); // janing xu
}
void LCD_PWRON_HX8306A(kal_bool on)
{
}
void LCD_SetContrast_HX8306A(kal_uint8 level)
{
}
void LCD_ON_HX8306A(kal_bool on)
{
}
void LCD_BlockWrite_HX8306A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
kal_uint16 roi_offset_x,roi_offset_y;
kal_uint16 roi_width,roi_height,start_x,end_x;
while (LCD_IS_RUNNING);
lcd_assert_fail = KAL_TRUE;
/*----ALL DMA MODE----*/
#ifdef LCM_LEAD_R61503_176x220
{
SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x50 &amt; 0xFF));
SET_LCD_CMD_PARAMETER(2,LCD_DATA,0);
SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx &amt; 0xFF));
SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x51 &amt; 0xFF));
SET_LCD_CMD_PARAMETER(6,LCD_DATA,0);
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (endx &amt; 0xFF));
SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x52 &amt; 0xFF));
SET_LCD_CMD_PARAMETER(10,LCD_DATA,0);
SET_LCD_CMD_PARAMETER(11,LCD_DATA, (starty &amt; 0xFF));
SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x53 &amt; 0xFF));
SET_LCD_CMD_PARAMETER(14,LCD_DATA,0);
SET_LCD_CMD_PARAMETER(15,LCD_DATA, (endy &amt; 0xFF));
SET_LCD_CMD_PARAMETER(16,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(17,LCD_CMD, (0x20&amt;0xFF));
SET_LCD_CMD_PARAMETER(18,LCD_DATA,0);
SET_LCD_CMD_PARAMETER(19,LCD_DATA,(startx&amt;0xFF));
SET_LCD_CMD_PARAMETER(20,LCD_CMD,0);
SET_LCD_CMD_PARAMETER(21,LCD_CMD, (0x21&amt;0xFF));
SET_LCD_CMD_PARAMETER(22,LCD_DATA,0);
SET_LCD_CMD_PARAMETER(23,LCD_DATA,(starty&amt;0xFF));
SET_LCD_CMD_PARAMETER(24,LCD_CMD,0);
SET_LCD_CMD_PARAMETER(25,LCD_CMD, (0x22&amt;0xFF));
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(26);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
while (LCD_IS_RUNNING){};//ss.pan 2007.11.27 add
START_LCD_TRANSFER;
} /*--end LCM_LEAD_R61503_176x220 --*/
#elif defined(LCM_LEAD_ILI9221_176x220)
{
SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x44&amt;0xFF));
SET_LCD_CMD_PARAMETER(2,LCD_DATA, (endx&amt;0xFF));
SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx&amt;0xFF));
SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x45&amt;0xFF));
SET_LCD_CMD_PARAMETER(6,LCD_DATA, (endy&amt;0xFF));
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty&amt;0xFF));
SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x21&amt;0xFF));
SET_LCD_CMD_PARAMETER(10,LCD_DATA, (starty&amt;0xFF));
SET_LCD_CMD_PARAMETER(11,LCD_DATA, (startx&amt;0xFF));
SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x22&amt;0xFF));
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
START_LCD_TRANSFER;
}/* -- end LCM_LEAD_ILI9221_176x220--*/
#elif defined(LCM_XINSHENHUI_HX8306A_176x220)
{
SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(1,LCD_CMD, 0x44 );
SET_LCD_CMD_PARAMETER(2,LCD_DATA, (endx &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(5,LCD_CMD,0x45);
SET_LCD_CMD_PARAMETER(6,LCD_DATA, (endy &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(9,LCD_CMD, 0x21);
SET_LCD_CMD_PARAMETER(10,LCD_DATA, (starty &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(11,LCD_DATA, (startx &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0);
SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x22);
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
START_LCD_TRANSFER;
}/* -- end LCM_XINSHENHUI_HX8306A_176x220--*/
#elif defined(LCM_LEAD_L1E2_176x220)
{
SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0x2A);
SET_LCD_CMD_PARAMETER(1,LCD_DATA, ((startx>>8)&amt;0xFF));
SET_LCD_CMD_PARAMETER(2,LCD_DATA, (startx &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(3,LCD_DATA, ((endx>>8)&amt;0xFF));
SET_LCD_CMD_PARAMETER(4,LCD_DATA, (endx &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(5,LCD_CMD, 0x2B);
SET_LCD_CMD_PARAMETER(6,LCD_DATA, ((starty>>8)&amt;0xFF));
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(8,LCD_DATA, ((endy>>8)&amt;0xFF));
SET_LCD_CMD_PARAMETER(9,LCD_DATA, (endy &amt; 0x00FF));
SET_LCD_CMD_PARAMETER(10,LCD_CMD, 0x2C);
SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
ENABLE_LCD_ROI_CTRL_CMD_FIRST;
START_LCD_TRANSFER;
}
#endif /*----Above of all DMA MODE----*/
lcd_assert_fail = KAL_FALSE;
}
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 4;
case lcd_Temperature_Compensation_func:
return 4;
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;
}
/*===================The above is LCD dependent==========*/
#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 &amt; 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)&amt;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)&amt;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 = &amt;LCD_func_HX8306A;
}