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

📄 lcd.c

📁 手机S6B33BG_LCM___lcd driver
💻 C
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2001
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *    lcd.c
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   This Module defines the LCD driver.
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/

/******************************/
/* Header file include        */
/******************************/

#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 "eint.h"

extern void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada);
extern void GPIO_WriteIO(char data, char port);
//ericlee start
//extern kal_bool DUMMY_MP4_ID_SECSET;
kal_bool    lcd_assert_fail=KAL_FALSE;
static unsigned char addrmx; 
unsigned char getaddrmx(); 
#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

/******************************/
/* Local function definition  */
/******************************/

/****************************************************************************
	FUNCTION NAME		: spi_ini

  	PURPOSE			: This function is to initialize SPI

	INPUT PARAMETERS	: void

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void  write_init(kal_uint16 CMD,kal_uint16 Data)//Start Oscillation
{
	LCD_CtrlWrite_SSD1779(CMD); 
	LCD_DataWrite_SSD1779(Data);
}


void spi_ini(void)
{
	#if ( (defined(MT6205B)) || (defined(MT6218)) )
		/* Data size = 8bits, SPO = 1 and SPH = 1, SCR = LCD_CTRL0_SCRDiv16 */
		DRV_WriteReg(LCD_SCON,(LCD_SCON_SPH|LCD_SCON_SPO));
		DRV_Reg(DRVPDN_CON1) &= (~DRVPDN_CON1_LCD);
	#endif   /*MT6205B,MT6218*/

	#if (defined(MT6218B) || defined(MT6219) || defined(MT6217))
		REG_LCD_SERIAL_CONFIG = (LCD_SERIAL_CONFIG_CLOCK_PHASE_BIT | LCD_SERIAL_CONFIG_CLOCK_POLARITY_BIT);
	#endif	/* MT6218B, MT6219 */

	#if ( (defined(MT6208)) || (defined(MT6205)) || (defined(FPGA)))
		/* Data size = 8bits, SPO = 1 and SPH = 1, SCR = LCD_CTRL0_SCRDiv16 */
		DRV_WriteReg(LCD_CTRL0,LCD_CTRL0_Normal);
		/* continuous mode enable, DSB0,DSB1 = 1,1 , CS0PO,CS1PO = LOW enable */
		DRV_WriteReg(LCD_CTRL1,LCD_CTRL1_Normal);
		DRV_Reg(DRVPDN_CON1) &= (~DRVPDN_CON1_LCD);
	#endif
}

#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((kal_uint32)2);
   	SET_LCD_PARALLEL_CE2WR_HOLD_TIME(2);
   	SET_LCD_PARALLEL_CE2RD_SETUP_TIME(0);
   	SET_LCD_PARALLEL_WRITE_WAIT_STATE(4);
   	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 */

void LCD_Partial_On_SSD1789(kal_uint16 start_page,kal_uint16 end_page)
{

	LCD_CtrlWrite_SSD1779(LCD_ENTER_PARTIAL_DISPLAY_SSD1789);
	LCD_DataWrite_SSD1779(start_page);
	LCD_CtrlWrite_SSD1779(end_page);
}

void LCD_Partial_Off_SSD1789(void)
{
	LCD_CtrlWrite_SSD1779(LCD_EXIT_PARTIAL_DISPLAY_SSD1789);
}

kal_uint8 LCD_Partial_line_SSD1789(void)
{
	return 1;		/* partial display in 1 line alignment */
}

/****************************************************************************
	FUNCTION NAME		: LCD_Delay

  	PURPOSE			: This function is to delay 10 for loops.

	INPUT PARAMETERS	: void

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_Delay(kal_uint8 time) 
{
        volatile kal_uint16 delay; 
        for (delay =0;delay <time*400;delay++) {} // 85us
}

/****************************************************************************
	FUNCTION NAME		: LCD_Set_Y_Addr_SSD1779
  	PURPOSE			: This function is to
	INPUT PARAMETERS	: kal_uint16
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_Set_Y_Addr_SSD1779(kal_uint16 start_row, kal_uint16 end_row)
{
   LCD_CtrlWrite_SSD1779(LCD_PAGE_ADDRESS_SET_SSD1779);
   LCD_DataWrite_SSD1779(start_row);
   LCD_DataWrite_SSD1779(end_row);
}

/****************************************************************************
	FUNCTION NAME		: LCD_Set_X_Addr_SSD1779

  	PURPOSE			: This function is to

	INPUT PARAMETERS	: kal_uint16

	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_Set_X_Addr_SSD1779(kal_uint16 start_column, kal_uint16 end_column)
{
   LCD_CtrlWrite_SSD1779(LCD_COLUMN_ADDRESS_SET_SSD1779);
   LCD_DataWrite_SSD1779(start_column);
   LCD_DataWrite_SSD1779(end_column);
}

/****************************************************************************
	FUNCTION NAME		: LCD_blockClear_SSD1779
  	PURPOSE			: This function is to
	INPUT PARAMETERS	: kal_uint16
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_blockClear_SSD1779(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data)
{
	kal_uint16 LCD_x;
	kal_uint16 LCD_y;

   LCD_Set_Y_Addr_SSD1779(y1, y2);
   LCD_Set_X_Addr_SSD1779(x1+4, x2+4);
   LCD_CtrlWrite_SSD1779(LCD_WRITE_DATA_SSD1779);

   for(LCD_x=x1;LCD_x<=x2;LCD_x++)
     for(LCD_y=y1;LCD_y<=y2;LCD_y++)
         LCD_RAMWrite_SSD1779(data);
}

/****************************************************************************
	FUNCTION NAME		: LCD_ClearAll_SSD1779
  	PURPOSE			: This function is to
	INPUT PARAMETERS	: kal_uint16
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_ClearAll_SSD1779(kal_uint16 data)
{
   LCD_blockClear_SSD1779(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,data);
  // LCD_blockClear_SSD1779(0,0,30,60,data);

}

/****************************************************************************
	FUNCTION NAME		: LCD_EnterSleep
  	PURPOSE			: This function is to make LCD enter sleep mode.
	INPUT PARAMETERS	: void
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_EnterSleep_SSD1779(void)
{
   //LCD_CtrlWrite_SSD1779(LCD_ENTER_SLEEP_SSD1779);	// 0x95
      LCD_CtrlWrite_SSD1779(LCD_DISPLAY_OFF_SSD1779);
}

/****************************************************************************
	FUNCTION NAME		: LCD_ExitSleep
  	PURPOSE			: This function is to make LCD exit sleep mode.
	INPUT PARAMETERS	: void
	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_ExitSleep_SSD1779(void)
{
   //LCD_CtrlWrite_SSD1779(LCD_EXIT_SLEEP_SSD1779);	// 0x94
   //LCD_CtrlWrite_SSD1779(LCD_DISPLAY_ON_SSD1779);
     LCD_CtrlWrite_SSD1779(LCD_DISPLAY_ON_SSD1779);
}

void LCD_Size_SSD1779(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
   	*out_LCD_width = LCD_WIDTH;
   	*out_LCD_height = LCD_HEIGHT;
}

#define pap1302_BYPASS_PIN               21 

void LCD_Init_SSD1779(kal_uint32 bkground, void **buf_addr)
{
  kal_uint32 delay;
   kal_uint16 background = (kal_uint16)bkground;

         #ifdef MCU_26M
            *EMI_CON3 = 0xE708;
         #endif	/*MCU_26M*/

GPIO_ModeSetup(pap1302_BYPASS_PIN, 0);
	 GPIO_InitIO(1, pap1302_BYPASS_PIN);
GPIO_WriteIO(1, pap1302_BYPASS_PIN);


      LCD_Delay(10);
      
      /* Oscillator On */
      LCD_CtrlWrite_SSD1779(LCD_OSC_ON_SSD1779);	// 0xD1
      
      LCD_Delay(10);
           
      /* Exit Sleep Mode */
      LCD_CtrlWrite_SSD1779(LCD_EXIT_SLEEP_SSD1779);	// 0x94
      
      LCD_Delay(10);
      
      /* Display On */
      
      LCD_CtrlWrite_SSD1779(LCD_DISPLAY_ON_SSD1779);	// 0xAF
      
      LCD_Delay(10);
      
      
      LCD_CtrlWrite_SSD1779(LCD_POW_CTRL_SSD1779);	// 0x20
      LCD_DataWrite_SSD1779(0x01);
      
      LCD_Delay(10);
            
      LCD_CtrlWrite_SSD1779(LCD_POW_CTRL_SSD1779);	// 0x20
      LCD_DataWrite_SSD1779(0x03);     //ericlee 0f

 LCD_Delay(10);
      //LCD_Delay(10);
      //LCD_Delay(10);
      
      LCD_CtrlWrite_SSD1779(LCD_POW_CTRL_SSD1779);	// 0x20
      LCD_DataWrite_SSD1779(0x0f);        //ericlee 07

#if 1
      LCD_Delay(10);

 LCD_CtrlWrite_SSD1779(0xF3);
 LCD_DataWrite_SSD1779(0x90);       
 LCD_DataWrite_SSD1779(0x05);
 LCD_DataWrite_SSD1779(0x60);
 LCD_DataWrite_SSD1779(0x84);

	      LCD_Delay(10);
      LCD_CtrlWrite_SSD1779(0x82);       //Set Temperature compensation coefficient
      LCD_DataWrite_SSD1779(0x01);          //-0.13
#endif

      /* Select LCD Bias */
      LCD_CtrlWrite_SSD1779(LCD_BIAS_CTRL_SSD1779);	// 0xFB
      LCD_DataWrite_SSD1779(0x02);//0x01			// 0x00~0x07 1/7~1/14

      LCD_Delay(10);

      /* unknown */
     // LCD_CtrlWrite_SSD1779(0xE8);

      /* Select PWM/FRC */
      LCD_CtrlWrite_SSD1779(LCD_PWM_FRC_SSD1779);	// 0xF7
      LCD_DataWrite_SSD1779(0x28);
      LCD_DataWrite_SSD1779(0x0E);
	LCD_DataWrite_SSD1779(0x05);

      LCD_Delay(10);

      /* Set Display Control */
      LCD_CtrlWrite_SSD1779(LCD_DUTY_CTRL_SSD1779);	// 0xCA
	LCD_DataWrite_SSD1779(0x00);
	LCD_DataWrite_SSD1779(0x20);
	LCD_DataWrite_SSD1779(0x00);

      LCD_Delay(10);

      /* Set Contrast Level */
      LCD_CtrlWrite_SSD1779(LCD_CONTRAST_CTRL_SSD1779);		// 0x81
      LCD_DataWrite_SSD1779(0x14);	// 0x1a
      LCD_DataWrite_SSD1779(0x06);

      LCD_Delay(10);

     // LCD_CtrlWrite_SSD1779(LCD_NORMAL_DISPLAY_SSD1779);	// A6

      LCD_Delay(10);

      /* Set DATA/COM Output Scan Direction */
      LCD_CtrlWrite_SSD1779(LCD_DATA_OUTPUT_SCAN_SSD1779);// 0xBC
      LCD_DataWrite_SSD1779(0x03);     //ericlee for change
	LCD_DataWrite_SSD1779(0x00);
	LCD_DataWrite_SSD1779(0x00);
      /* Gray scaleselection
      00b 16 bit/pixel
      01b  8 bit/pixel
      10b 12 bit/pixel
      11b 18 bit/pixel
      */

 
      LCD_Delay(10);
 
      LCD_CtrlWrite_SSD1779(LCD_COM_OUTPUT_SCAN_SSD1779);// 0xBB
      LCD_DataWrite_SSD1779(0x02);
 
      LCD_Delay(10);

      /* Set color look up table */
      LCD_CtrlWrite_SSD1779 (0xce);
   LCD_DataWrite_SSD1779(0x02);
      LCD_DataWrite_SSD1779 (0x05);
      LCD_DataWrite_SSD1779 (0x07); 
      LCD_DataWrite_SSD1779 (0x0a); 
      LCD_DataWrite_SSD1779 (0x0d);
      LCD_DataWrite_SSD1779 (0x10); 
      LCD_DataWrite_SSD1779 (0x12); 
      LCD_DataWrite_SSD1779 (0x14);
      LCD_DataWrite_SSD1779 (0x16); 
      LCD_DataWrite_SSD1779 (0x18); 
      LCD_DataWrite_SSD1779 (0x19);
      LCD_DataWrite_SSD1779 (0x1a); 
      LCD_DataWrite_SSD1779 (0x1b); 
      LCD_DataWrite_SSD1779 (0x1c);
      LCD_DataWrite_SSD1779 (0x1e);     
      LCD_DataWrite_SSD1779 (0x1f); 
      LCD_DataWrite_SSD1779 (0x20);
      LCD_DataWrite_SSD1779 (0x21); 
      LCD_DataWrite_SSD1779 (0x22); 
      LCD_DataWrite_SSD1779 (0x24);
      LCD_DataWrite_SSD1779 (0x25); 
      LCD_DataWrite_SSD1779 (0x27); 
      LCD_DataWrite_SSD1779 (0x28);
      LCD_DataWrite_SSD1779 (0x2a); 
      LCD_DataWrite_SSD1779 (0x2b); 
      LCD_DataWrite_SSD1779 (0x2d);
      LCD_DataWrite_SSD1779 (0x2f); 
      LCD_DataWrite_SSD1779 (0x31); 
      LCD_DataWrite_SSD1779 (0x33);
      LCD_DataWrite_SSD1779 (0x36);     
      LCD_DataWrite_SSD1779 (0x3a);
      LCD_DataWrite_SSD1779 (0x3f); 
     
      LCD_Delay(10);
      
      /* Set X/Y Address */
      LCD_CtrlWrite_SSD1779(LCD_COLUMN_ADDRESS_SET_SSD1779);	// 0x15
      LCD_DataWrite_SSD1779(0x04);
      LCD_DataWrite_SSD1779(0x83);

      LCD_Delay(10);

      LCD_CtrlWrite_SSD1779(LCD_PAGE_ADDRESS_SET_SSD1779);	// 0x75
      LCD_DataWrite_SSD1779(0x28);
      LCD_DataWrite_SSD1779(0xA7);

      LCD_Delay(10);
	LCD_CtrlWrite_SSD1779(0xf1);		//COM SEQUENCE
	LCD_DataWrite_SSD1779(0xc0);
	LCD_DataWrite_SSD1779(0x00);
	LCD_DataWrite_SSD1779(0x00);
      LCD_Delay(10);

	LCD_CtrlWrite_SSD1779(0xf7);		//Pwm Frc
	LCD_DataWrite_SSD1779(0x28);
	LCD_DataWrite_SSD1779(0x0e);
	LCD_DataWrite_SSD1779(0x05);
      LCD_Delay(10);

      /* Display On */
      LCD_CtrlWrite_SSD1779(LCD_DISPLAY_ON_SSD1779);	// 0xAF

      LCD_Delay(10);

      LCD_CtrlWrite_SSD1779(LCD_INVERSE_DISPLAY_SSD1779);// 0xA7

      /* Set N-line Inversion Register */
      LCD_CtrlWrite_SSD1779(LCD_NLINE_INVERSION_CTRL_SSD1779);	// 0xF2
      LCD_DataWrite_SSD1779(0x07);	//5);
      LCD_DataWrite_SSD1779(0x52);		//0x15);      
     // LCD_CtrlWrite_SSD1779(LCD_TEMP_COMPENSATION_CTRL_SSD1779); //0xf4
     // LCD_DataWrite_SSD1779(0x08)
      //LCD_DataWrite_SSD1779(0x00)
     // LCD_DataWrite_SSD1779(0x58)
     // LCD_DataWrite_SSD1779(0x03)

      LCD_Delay(10);

     // LCD_blockClear_SSD1779(0,4,LCD_WIDTH-1,LCD_HEIGHT-1+4,background);

      LCD_Delay(10);
      /* Display On */
      LCD_CtrlWrite_SSD1779(LCD_DISPLAY_ON_SSD1779);	// 0xAF

      LCD_Delay(10);

      /* Data Write Control */
      LCD_CtrlWrite_SSD1779(LCD_WRITE_DATA_SSD1779);	// 0x5C


      LCD_Delay(10);

     LCD_ClearAll_SSD1779(background);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -