📄 lcd_cfg.c
字号:
/******************************************************************************
** File Name: lcd_cfg.c *
** Description: *
** This file contains main parameter for lcd. *
** Author: Jim zhang *
** DATE: 03/09/2004 *
** Copyright: 2004 Spreadtrum, Incoporated. All Rights Reserved. *
** Description: *
******************************************************************************
******************************************************************************
** Edit History *
** ------------------------------------------------------------------------- *
** DATE NAME DESCRIPTION *
** 12/12/2004 Jimmy.Jia Create for SP7100EU *
** 11/15/2005 David.Jia Modify for GG3727/8 LCD, refer to 7350's. *
** 12/12/2005 David.Jia Add HX8309. *
** 02/21/2006 David.Jia CR37755, call DC_Init in release assert *
** reset mode. Reset W99686, download fireware. Also modify *
** LCD_IsLCDPointerValid to know all LCDs. *
** 02/24/2006 Yingchun.Li Remove sub LCD MEM.
** 03/19/2006 Pengyu.Li Add function LCD_GetADCValue *
******************************************************************************/
#include "sci_types.h"
#include "lcd.h"
#include "sc6600d_reg.h"
#include "tpd_drv.h"
/**---------------------------------------------------------------------------*
** Compiler Flag
**---------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C"
{
#endif
/**---------------------------------------------------------------------------*
** Macro defines
**---------------------------------------------------------------------------*/
//max number of main lcd support in this project.
#define MAX_MAIN_LCD_SUPPORT 1
#define MAX_SUB_LCD_SUPPORT 1
// modified by Kevin.lu,start
#ifdef MAIN_LCD_176_220
#define LCD_BUF_SIZE (176*220) //main lcd buffer size.
#else
#define LCD_BUF_SIZE (128*160) // main lcd buffer size
#endif
// modified by Kevin.lu,end
#define SUBLCD_BUF_SIZE (1*1)//(96*96) //sub lcd buffer size.
//lcm id macro definition, added by lipengyu.
#define ADC_INT_BIT 0x4000
#define ADC_CLEAR_INT_FLAG *(volatile uint32 *)(GR_ICLR) = 0x10
#define ADC_START(_source) *(volatile uint32*)(GR_ADCC) = (_source) | ((_source) << 9)
#define ADC_WAIT_COMPLETED() while( 0 == (*(volatile uint32 *)(INT_IRQ_RAW_STS) & ADC_INT_BIT) ){ ; }
#define ADC_RESULT *(volatile uint32 *)(GR_ADCR);
#define ADC_STOP (*(volatile uint32*)(GR_ADCC) &= 0xFFFFC1FF) //Clear ADC selection bits(13:9) to close ADC input.
//added by pengyuli for switch of sublcd operation.
#define NO_SUB_LCD //disable sublcd
/**--------------------------------------------------------------------------*
** Constant DEFINITION *
**--------------------------------------------------------------------------*/
//Constant parameter for MAIN LCD.
#ifdef MAIN_LCD_176_220
const uint16 lcd_width = 176; // width of main lcd.
const uint16 lcd_height = 220; // height of main lcd.
#else
const uint16 lcd_width = 128; // width of main lcd.
const uint16 lcd_height = 160; // height of main lcd.
#endif
//const uint32 lcd_command_adr = 0x0c000000; //address of command for main lcd.
//const uint32 lcd_data_adr = 0x0c000002; //address of data for main lcd.
const uint8 lcd_contrast_v = 0xB8; //contrast value for main lcd.(0--255)
//Constant parameter for SUB LCD.
const uint16 sublcd_width = 96; // width of sub lcd
const uint16 sublcd_height = 96; // height of sub lcd.
//const uint32 sublcd_command_adr = 0x0c180000; //address of command for sub lcd.
//const uint32 sublcd_data_adr = 0x0c380000; //address of data for sub lcd.
const uint8 sublcd_contrast_v = 0x8; //contras value of sub lcd.(0xE8--0xEB)
//In fact, 0xe8 and 0xeb are too bad contrast value.
/**--------------------------------------------------------------------------*
** STATIC DEFINITION *
**--------------------------------------------------------------------------*/
typedef uint16 LCD_COLOR_T; //main lcd color type (bits-per-pixel)
typedef uint16 SubLCD_COLOR_T; //sub lcd color type (bits-per-pixel)
LOCAL LCD_COLOR_T g_lcd_buffer[LCD_BUF_SIZE]; //lcd buffer
LOCAL SubLCD_COLOR_T g_sublcd_buffer[SUBLCD_BUF_SIZE]; //sub lcd buffer
LOCAL int Refreshflag = TRUE ;
uint8 lcd_type = 0;
/**--------------------------------------------------------------------------*
** EXTERNAL DEFINITION *
**--------------------------------------------------------------------------*/
extern const uint32 g_mem_limit;
extern LCD_OPERATIONS_T * LCD_GetLCDPointer(LCD_ID_E lcd_id);
extern void LCD_SetLCDPointer(LCD_ID_E lcd_id, LCD_OPERATIONS_T* lcdpointer_ptr);
extern void GPIO_SetCameraByPassMode(BOOLEAN bByPass);
extern void GPIO_SetLcdBackLight(BOOLEAN b_on);
extern uint32 REFPARAM_GetLCDType(void);
/**--------------------------------------------------------------------------*
** CUSTOMERIZE DEFINITION *
**--------------------------------------------------------------------------*/
//struct for probe function
typedef struct lcd_probe_tag
{
BOOLEAN (*probe)(void);
LCD_OPERATIONS_T* (*get_operations)(void);
} LCD_PROBE_T;
LOCAL BOOLEAN MainLCD_Probe(void);
LOCAL LCD_OPERATIONS_T* MainLCD_GetOperationsPointer(void);
LOCAL BOOLEAN SubLCD_Probe(void);
LOCAL LCD_OPERATIONS_T* SubLCD_GetOperationsPointer(void);
//probe function for main lcd supported.
//HX8310
extern BOOLEAN HX8310_Probe(void);
extern LCD_OPERATIONS_T* HX8310_GetOperations(void);
//HD66773
//extern BOOLEAN HD66773_Probe(void);
//extern LCD_OPERATIONS_T* HD66773_GetOperations(void);
//S0133
//extern BOOLEAN S1033_Probe(void);
//extern LCD_OPERATIONS_T* S1033_GetOperations(void);
//S0144
//extern BOOLEAN S0144_Probe(void);
//extern LCD_OPERATIONS_T* S0144_GetOperations(void);
//SILI9160
//extern BOOLEAN ILI9160_Probe(void);
//extern LCD_OPERATIONS_T* ILI9160_GetOperations(void);
//extern BOOLEAN R61500_Probe(void);
//extern LCD_OPERATIONS_T* R61500_GetOperations();
//probe function for sub lcd supported.
//extern BOOLEAN S1D15G24_Probe(void);
//extern LCD_OPERATIONS_T* S1D15G24_GetOperations(void);
//extern BOOLEAN NT39102_Probe(void);
//extern LCD_OPERATIONS_T* NT39102_GetOperations();
//SPFD54124B - 凌达 and 宏尚鹰and 帝晶
extern BOOLEAN SPFD54124B_Probe(void);
extern LCD_OPERATIONS_T* SPFD54124B_GetOperations(void);
//CIL5 -华丽维
extern BOOLEAN C1L5_Probe(void);
extern LCD_OPERATIONS_T* C1L5_GetOperations(void);
//HX8345 -Truly and LiJi and BYD
extern BOOLEAN HX8345_Probe(void);
extern LCD_OPERATIONS_T* HX8345_GetOperations(void);
//CSTN_ST7669 -BYD
//extern BOOLEAN ST7669_Probe(void);
//extern LCD_OPERATIONS_T* ST7669_GetOperations(void);
//TFT_BF6812A -BYD
//extern BOOLEAN BF6812A_Probe(void);
//extern LCD_OPERATIONS_T* BF6812A_GetOperations(void);
//TFT_ssd1784 effect is not ok
extern BOOLEAN SSD1784_Probe(void);
extern LCD_OPERATIONS_T* SSD1784_GetOperations(void);
//CSTN_S6B33BF
extern BOOLEAN S6B33BF_Probe(void);
extern LCD_OPERATIONS_T* S6B33BF_GetOperations(void);
//TFT_ST7732 飞尔液晶 华日客户需求测试20070924 & 立基 20070925
// extern BOOLEAN ST7732_Probe(void);
// extern LCD_OPERATIONS_T* ST7732_GetOperations(void);
//TFT_S6D0151 信利2108
//extern BOOLEAN S6D0151_Probe(void);
//extern LCD_OPERATIONS_T* S6D0151_GetOperations(void);
//TFT_SPFD54124A 伟博电子for 宏尚鹰 20071008
//extern BOOLEAN SPFD54124A_Probe(void);
//extern LCD_OPERATIONS_T* SPFD54124A_GetOperations(void);
//TFT_S6D0164_Weijing 纬晶 20071012 QCIF
//extern BOOLEAN S6D0164_Probe(void);
//extern LCD_OPERATIONS_T* S6D0164_GetOperations(void);
//TFT_NT39102_Dijing 帝晶 20071015
extern BOOLEAN NT39102_Dijing_Probe(void);
extern LCD_OPERATIONS_T* NT39102_Dijing_GetOperations(void);
//TFT_SPFD54124B_Zhonghang 中航 20071023
extern BOOLEAN SPFD54124B_ZH_Probe(void);
extern LCD_OPERATIONS_T* SPFD54124B_ZH_GetOperations(void);
//probe function table for main lcd supported.
const LCD_PROBE_T lcd_probe[MAX_MAIN_LCD_SUPPORT] =
{
{MainLCD_Probe, MainLCD_GetOperationsPointer}
};
const LCD_PROBE_T sublcd_probe[MAX_SUB_LCD_SUPPORT] =
{
{SubLCD_Probe, SubLCD_GetOperationsPointer}
};
/**---------------------------------------------------------------------------*
** Functions
**---------------------------------------------------------------------------*/
// added by Kevin.lu, start, 061125
LOCAL BOOLEAN MainLCD_Probe(void)
{
lcd_type = REFPARAM_GetLCDType();
TP_InitADCValue(lcd_type);
SCI_TRACE_LOW("MainLCD_Probe = %d",lcd_type);
switch (lcd_type)
{
case TFT_HX8310:
return HX8310_Probe(); //Jiuzheng LCD
//case TFT_HD66773:
//return HD66773_Probe(); //Truly LCD
//case TFT_S1033:
//return S1033_Probe(); //BYD LCD
//case TFT_R61500:
//return R61500_Probe();
//case TFT_S0144:
//return S0144_Probe(); //BYD LCD_CostDown
//Wistron LCD. Sample for 2006/12/05
//Truly LCD. Sample for 2006/12/05
// case TFT_NT39102:
//return NT39102_Probe();
//case TFT_S0144_LIJI:
//return S0144_Probe();//立基
case TFT_SPFD54124B:
return SPFD54124B_Probe();//凌达和宏尚鹰
case TFT_C1L5:
return C1L5_Probe(); //深圳华利维
case TFT_HX8345:
return HX8345_Probe(); //Truly and LiJi
//case TFT_C1L5_Tianma: //深圳 天马
//return C1L5_Probe();
//case cstn_ST7669:
//return ST7669_Probe(); //BYD
// case TFT_BF6812A:
// return BF6812A_Probe(); //BYD
case CSTN_ssd1784:
return SSD1784_Probe(); //力科达20070911
case CSTN_S6B33BF:
return S6B33BF_Probe(); //Truly 20070911
case TFT_NT39102_dijing: ////帝晶 NT39102 20071015
return NT39102_Dijing_Probe();
// case TFT_ST7732_Liji : //for 立基 20070925
// case TFT_ST7732_Feier: //for 飞尔液晶 20070924
// return ST7732_Probe();
// case TFT_S6D0151_Truly: //Truly 2108 20071008
//return S6D0151_Probe();
// case TFT_SPFD54124A_Weibo: //伟博电子for 宏尚鹰 20071008
//return SPFD54124A_Probe();
// case TFT_S6D0164_Weijing: //纬晶S6D0164 20071012
//return S6D0164_Probe();
case TFT_SPFD54124B_Zhonghang: //中航,20071023
return SPFD54124B_ZH_Probe();
case TFT_HX8345_BYD:
return HX8345_Probe(); //BYD 20071025
default:
SCI_ASSERT(0); // no main LCD
return SCI_FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -