?? 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 *
******************************************************************************/
#include "sci_types.h"
#include "lcd.h"
#include "adc_drv.h"
#include "dal_lcd.h"
/**---------------------------------------------------------------------------*
** Compiler Flag
**---------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C"
{
#endif
/**---------------------------------------------------------------------------*
** Macro defines
**---------------------------------------------------------------------------*/
#define LCD_NUMBER_USED 2
// 1= main lcd ,2 = one main lcd + one sub lcd.
#define LCD_BUSRATIO 1 // Configure the bus priority.
//Priority field configures the time ratio of LCM operation to NAND operation.
//max number of main lcd support in this project.
#define MAX_MAIN_LCD_SUPPORT 3
#define MAX_SUB_LCD_SUPPORT 3
#define LCD_BUF_SIZE (176*220) //main lcd buffer size.
#define SUBLCD_BUF_SIZE (96*96) //sub lcd buffer size.
#define ADC_NUM 10
/**--------------------------------------------------------------------------*
** Data Structures *
**--------------------------------------------------------------------------*/
typedef uint16 LCD_COLOR_T; //main lcd color type (bits-per-pixel)
typedef uint16 SubLCD_COLOR_T; //sub lcd color type (bits-per-pixel)
//struct for probe function
typedef struct lcd_probe_tag
{
BOOLEAN (*probe)(void);
LCD_OPERATIONS_T* (*get_operations)(void);
} LCD_PROBE_T;
/**--------------------------------------------------------------------------*
** Constant DEFINITION *
**--------------------------------------------------------------------------*/
//Constant parameter for MAIN LCD.
const uint16 lcd_width = 176; // width of main lcd.
const uint16 lcd_height = 220; // height of 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 uint8 sublcd_contrast_v = 0x8; //contras value of sub lcd.(0xE8--0xEB)
/**--------------------------------------------------------------------------*
** STATIC DEFINITION *
**--------------------------------------------------------------------------*/
__align(4) LOCAL LCD_COLOR_T g_lcd_buffer[LCD_BUF_SIZE]; //lcd buffer
__align(4) LOCAL SubLCD_COLOR_T g_sublcd_buffer[SUBLCD_BUF_SIZE]; //sub lcd buffer
LOCAL uint8 s_lcm_index = 0;
LOCAL uint16 s_lcd_adc_val; //lcd adc value
LOCAL int Refreshflag = TRUE ;
LOCAL LCD_OPERATIONS_T *s_lcd_operation[LCD_NUMBER_USED];
/**--------------------------------------------------------------------------*
** EXTERNAL DEFINITION *
**--------------------------------------------------------------------------*/
extern void GPIO_SetCameraByPassMode(BOOLEAN bByPass);
extern void GPIO_SetLcdBackLight(BOOLEAN b_on);
//probe function for main lcd supported.
extern BOOLEAN HD66773_Probe(void);
extern LCD_OPERATIONS_T* HD66773_GetOperations(void);
extern PUBLIC void HD66773_SetOffset(uint8 offset);
//probe function for sub lcd supported.
extern BOOLEAN S1D15G24_Probe(void);
extern LCD_OPERATIONS_T* S1D15G24_GetOperations(void);
extern BOOLEAN S6B33B5A_Probe(void);
extern LCD_OPERATIONS_T* S6B33B5A_GetOperations(void);
extern BOOLEAN NT3916_Probe(void);
extern LCD_OPERATIONS_T* NT3916_GetOperations(void);
/**--------------------------------------------------------------------------*
** CUSTOMERIZE DEFINITION *
**--------------------------------------------------------------------------*/
//probe function table for main lcd supported.
const LCD_PROBE_T lcd_probe[][MAX_MAIN_LCD_SUPPORT] =
{
{
//Main LCD
{NT3916_Probe, NT3916_GetOperations},
{NT3916_Probe, NT3916_GetOperations},
{NT3916_Probe, NT3916_GetOperations},
},
{
//Sub LCD
{S1D15G24_Probe, S1D15G24_GetOperations},
{S1D15G24_Probe, S1D15G24_GetOperations},
{S6B33B5A_Probe, S6B33B5A_GetOperations},
}
};
/**---------------------------------------------------------------------------*
** Functions
**---------------------------------------------------------------------------*/
PUBLIC void LCD_PointerSaveInAssertResetMode(void)
{
LCD_EnterSleep(MAIN_LCD_ID, SCI_FALSE);
LCD_EnterSleep(SUB_LCD_ID, SCI_FALSE);
}
/******************************************************************************/
// Description: let the main lcd display on to display assert information
// Global resource dependence:
// Author: Jim.zhang
// Note:
/******************************************************************************/
PUBLIC void LCD_DisplayOn(void)
{
// exit sleep mode
LCD_EnterSleep(MAIN_LCD_ID, SCI_FALSE);
// enter by pass mode if have digital cammera
GPIO_SetCameraByPassMode(SCI_TRUE);
// open back light.
GPIO_SetLcdBackLight(SCI_TRUE);
}
/******************************************************************************/
// Description: return the main lcd buffer pointer
// Global resource dependence:
// Author: Jim.zhang
// Note:
/******************************************************************************/
PUBLIC void *LCD_GetLCDBuffer(void)
{
return g_lcd_buffer;
}
/******************************************************************************/
// Description: return the sub lcd buffer pointer
// Global resource dependence:
// Author: Jim.zhang
// Note:
/******************************************************************************/
PUBLIC void *LCD_GetSubLCDBuffer(void)
{
return g_sublcd_buffer;
}
/******************************************************************************/
// Description: return the lcm index
// Global resource dependence:
// Author: Jing.Li
// Note:
/******************************************************************************/
PUBLIC uint8 LCD_GetIndex(void)
{
return s_lcm_index;
}
/******************************************************************************/
// Description: return the main lcd driver funtion pointer
// Global resource dependence:
// Author: Jim.zhang
// Note:
/******************************************************************************/
PUBLIC void LCD_SetIndex(void)
{
uint32 i,adc_rlt[ADC_NUM];
uint32 driver_id;
//read driver_id from TFT-LCD to set s_lcm_index.
//feature phone don't use function
driver_id = LCD_Read_ID(0x0,0x0);
SCI_TRACE_LOW("lcd_ID = 0x%x",driver_id);
//set lcm index
//Use ADC get lcd id,then set s_lcm_index.
//feature phone use function
adc_rlt[0] = ADC_GetResultDirectly(ADIN_4, FALSE);
LCD_Wait(50);
s_lcd_adc_val = 0;
for(i = 0;i < ADC_NUM;i++)
{
adc_rlt[i] = ADC_GetResultDirectly(ADIN_4, FALSE);
s_lcd_adc_val += adc_rlt[i];
SCI_TRACE_LOW("adc_rlt[%d]: %d", i, adc_rlt[i]);
}
s_lcd_adc_val /= ADC_NUM;
SCI_TRACE_LOW("s_lcd_adc_val: %d", s_lcd_adc_val);
//set lcm index
if((s_lcd_adc_val>=130) && (s_lcd_adc_val<230))
{
s_lcm_index = 0;
HD66773_SetOffset(2);
}
else if ((s_lcd_adc_val>=230) && (s_lcd_adc_val<330))
{
s_lcm_index = 1;
HD66773_SetOffset(4);
}
else if ((s_lcd_adc_val>=330) && (s_lcd_adc_val<430))
{
s_lcm_index = 2;
HD66773_SetOffset(4);
}
if(s_lcm_index >= MAX_MAIN_LCD_SUPPORT)
{
s_lcm_index = 0;
HD66773_SetOffset(2);
}
SCI_TRACE_LOW("s_lcm_index = 0x%x",s_lcm_index);
}
/*********************************************************************/
// Description: Read LCD ID
// Global resource dependence:
// Author: Younger.Yang
// Note: You may read LCD ID before lcd init,otherwise
// the read data may be incorrect.
/*********************************************************************/
PUBLIC uint32 LCD_Read_ID(uint32 lcd_cs, uint32 lcd_cd)
{
uint32 driver_id = 0xffffffff;
uint32 cd_value;
LCM_WAIT_AHBFIFO_NOTFULL
*(volatile uint32 *)(LCM_CMD_ADDR(lcd_cs,lcd_cd)) = 0x0; //set register 0x0
//Set RS value
cd_value = 1;
driver_id = LCM_Read(lcd_cs,lcd_cd,cd_value);
return driver_id;
}
/******************************************************************************/
// Description: return the lcd driver funtion pointer
// Global resource dependence:
// Author: Jim.zhang
// Note:
/******************************************************************************/
PUBLIC LCD_OPERATIONS_T **LCD_GetOperations(void)
{
volatile uint32 i;
LCD_SetIndex();
for(i = 0; i < LCD_NUMBER_USED; i++)
{
s_lcd_operation[i] = lcd_probe[i][s_lcm_index].get_operations();
}
return s_lcd_operation;
}
/******************************************************************************/
// Description: return the sub lcd driver funtion pointer
// Global resource dependence:
// Author: Jim.zhang
// Note:
/******************************************************************************/
PUBLIC int LCD_RefreshControl (int flag)
{
Refreshflag = flag;
return Refreshflag;
}
/******************************************************************************/
// Description: return the sub lcd driver funtion pointer
// Global resource dependence:
// Author: Jim.zhang
// Note:
/******************************************************************************/
PUBLIC int LCD_GetRefreshFlag ()
{
return Refreshflag;
}
/*******************************************************************************/
// Description:
// Global resource dependence:
// Author: Jianping.wang & younger.yang
// Note:
/********************************************************************************/
PUBLIC uint32 LCD_GetUsedNum(void)
{
uint32 lcd_num = LCD_NUMBER_USED;
return lcd_num;
}
/*******************************************************************************/
// Description:
// Global resource dependence:
// Author: Younger.yang
// Note:
/********************************************************************************/
PUBLIC uint32 LCD_GetBusRatio(void)
{
uint32 lcd_busratio = LCD_BUSRATIO;
return lcd_busratio;
}
/*******************************************************************************/
// Description:
// Global resource dependence:
// Author: Ming.zhang & Younger.yang
// Note:
/********************************************************************************/
PUBLIC void LCD_Wait(uint32 ms)
{
if (SCI_InThreadContext()) {
SCI_Sleep(ms);
} else {
uint32 end = SCI_GetTickCount() + ms;
while (SCI_GetTickCount() < end)
/* loop */;
}
}
/**---------------------------------------------------------------------------*
** Compiler Flag *
**---------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
// end lcd_cfg.c
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -