⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_cfg.c

📁 展讯平台nt3916 lcd 驱动code
💻 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 + -