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

📄 lcd.c

📁 流行的MTK平台手机的lcd驱动源代码
💻 C
📖 第 1 页 / 共 3 页
字号:

   LcdWriteCMD16Bit(LCD_1ST_SCREEN_POSITION_R61500); 
   LcdWriteDATA16Bit(0xDB00);

   LcdWriteCMD16Bit(LCD_1ST_SCREEN_POSITION_R61500); 
   LcdWriteDATA16Bit(0x0000);

   LcdWriteCMD16Bit(LCD_1ST_SCREEN_POSITION_R61500); 
   LcdWriteDATA16Bit(0xAF00);

   LcdWriteCMD16Bit(LCD_1ST_SCREEN_POSITION_R61500); 
   LcdWriteDATA16Bit(0xDB00);

   //WaitTime_us(10000);
   Delayms(10);
   
/* Display On*/
   LcdWriteCMD16Bit(LCD_POWER_CTRL1_R61500); 
   LcdWriteDATA16Bit(0x6060);

   LcdWriteCMD16Bit(LCD_DIS_CTRL1_R61500 ); 
   LcdWriteDATA16Bit(0x0001);

   //WaitTime_us(50000);
   Delayms(50);

   LcdWriteCMD16Bit(LCD_DIS_CTRL1_R61500); 
   LcdWriteDATA16Bit(0x0021);

   LcdWriteCMD16Bit(LCD_DIS_CTRL1_R61500); 
   LcdWriteDATA16Bit(0x0027);

   //WaitTime_us(50000);
   Delayms(50);

   LcdWriteCMD16Bit(LCD_DIS_CTRL1_R61500); 
   LcdWriteDATA16Bit(0x0037);   

   
   LcdWriteCMD16Bit(LCD_RW_GRAM_DATA_R61500); 
   LcdWriteDATA16Bit(0x0000); 
   
}
#endif

//R61503B by ludan 2006.11.3
void LCD_Init_R61500(kal_uint32 bkground, void **buf_addr)
{
	volatile kal_uint32 i;
	kal_uint16 background = (kal_uint16)bkground;
	kal_uint16 read_data;

	CLEAR_LCD_CTRL_RESET_PIN;
	Delayms(50);
	SET_LCD_CTRL_RESET_PIN;
	Delayms(50);

	LCD_set_reg(0x0000,0x0001);   //Start OSC
	Delayms(50);				/* delay 10ms */

       LCD_set_reg(0x0007,0x0000);  
	LCD_set_reg(0x0012,0x0000);
	Delayms(20);
	LCD_set_reg(0x00A4,0x0001);
	Delayms(20);
       LCD_set_reg(0x0007,0x0001);  
	Delayms(50);
	LCD_set_reg(0x0018,0x0001);
//Power supply on sequence	
	LCD_set_reg(0x0010,0x12B0);
	LCD_set_reg(0x0011,0x0000);
	LCD_set_reg(0x0012,0x0117);
        LCD_set_reg(0x0013,0x8A07); 	
	LCD_set_reg(0x0012,0x0137);
	Delayms(20);
//other setting	
	LCD_set_reg(0x0001,0x0100);
	LCD_set_reg(0x0002,0x0700);
	LCD_set_reg(0x0003,0x1030);
	LCD_set_reg(0x0004,0x0000);
        LCD_set_reg(0x0008,0x030A);
	LCD_set_reg(0x0009,0x0111);
	LCD_set_reg(0x000C,0x0000);
	LCD_set_reg(0x000E,0x0000);
	LCD_set_reg(0x000F,0x0000);
	LCD_set_reg(0x0014,0x8000);
	LCD_set_reg(0x0020,0x0000);
	LCD_set_reg(0x0021,0x0000);
		
	//gamma setting  //
	LCD_set_reg(0x0030,0x0003);  
	LCD_set_reg(0x0031,0x0204);
	LCD_set_reg(0x0032,0x0002);
	LCD_set_reg(0x0033,0x0207);
	LCD_set_reg(0x0034,0x0507);
	LCD_set_reg(0x0035,0x0303);
	LCD_set_reg(0x0036,0x0407);
	LCD_set_reg(0x0037,0x0702);
	LCD_set_reg(0x0038,0x1702);
	LCD_set_reg(0x0039,0x010F);

//driver output
       LCD_set_reg(0x0070,0x1B00);  
	LCD_set_reg(0x0071,0x0001);
	LCD_set_reg(0x007A,0x0000);
	
//panel interface	
	LCD_set_reg(0x0090,0x0004);
	LCD_set_reg(0x0091,0x0100);
       LCD_set_reg(0x0092,0x0001);
	LCD_set_reg(0x0098,0x0001);
	LCD_set_reg(0x0099,0x030C);
	LCD_set_reg(0x009A,0x030C);
	LCD_set_reg(0x009C,0x0000);
	LCD_set_reg(0x009D,0x0000);
	Delayms(50);
//display on sequence	
       LCD_set_reg(0x0007,0x0001);  
	 Delayms(50);
	LCD_set_reg(0x0007,0x0021);
	Delayms(50);
	LCD_set_reg(0x0012,0x1137);
	Delayms(10);
	LCD_set_reg(0x0007,0x0233);
	Delayms(50);
	
//ludan
	

	LCD_ClearAll_R61500(0xFFFF);

	lcd_power_ctrl_shadow1=0x4140;
	lcd_power_ctrl_shadow3=0x0013;
	lcd_power_ctrl_shadow4=0x3611;
	
	Delayms(50);
	/* turn on backlight */
//	*((volatile unsigned short *) 0x80120150) &= 0xF3FF;
//	*((volatile unsigned short *) 0x80120000) |= 0x20;
//	*((volatile unsigned short *) 0x801200C0) |= 0x20;
}
//ywm++ 20060525


void LCD_PWRON_R61500(kal_bool on)  
{
 //ywm++ 20050525
   if(on)
   {
      LCD_ExitSleep_R61500();
   }
   else
   {
      LCD_EnterSleep_R61500();
   }
 //ywm-- 20050525
}

void LCD_SetContrast_R61500(kal_uint8 level)
{
}

void LCD_ON_R61500(kal_bool on)
{
 //ywm++ 20050525 
 if(on)
   {
      LCD_ExitSleep_R61500();
   }
   else
   {
      LCD_EnterSleep_R61500();
   }
 //ywm-- 20050525
 }

void LCD_BlockWrite_R61500(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
   kal_uint16 roi_width;
   kal_uint16 x,y;

	while (LCD_IS_RUNNING){};

//   ASSERT(lcd_assert_fail==KAL_FALSE);
   lcd_assert_fail = KAL_TRUE;

	#ifdef LCD_CMD_DMA_MODE	
		#if (defined(LCD_8BIT_MODE))    //ywm++ 20070207 for 8 bit trans
		
		      SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0050&0xFF00)>>8 ));
		      SET_LCD_CMD_PARAMETER(1,LCD_CMD,(0x0050&0xFF ));
			//SET_LCD_CMD_PARAMETER(1,LCD_DATA,startx);
                     //SET_LCD_CMD_PARAMETER(2,LCD_DATA,((startx&0xFF00)>>8) );
                     SET_LCD_CMD_PARAMETER(2,LCD_DATA,0x00 );
                     SET_LCD_CMD_PARAMETER(3,LCD_DATA,(startx&0xFF) );

                     SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0051&0xFF00) >>8));
                     SET_LCD_CMD_PARAMETER(5,LCD_CMD,(0x0051&0xFF ));
					 
			//SET_LCD_CMD_PARAMETER(3,LCD_DATA,endx);
		  //    SET_LCD_CMD_PARAMETER(6,LCD_DATA,((endx&0xFF00)>>8) );
		      SET_LCD_CMD_PARAMETER(6,LCD_DATA,0x00 );
		      SET_LCD_CMD_PARAMETER(7,LCD_DATA,(endx&0xFF) );
			 
			SET_LCD_CMD_PARAMETER(8,LCD_CMD,((0x0052&0xFF00)>>8 ));
			SET_LCD_CMD_PARAMETER(9,LCD_CMD,(0x0052&0xFF) );
			
			SET_LCD_CMD_PARAMETER(10,LCD_DATA,((starty&0xFF00)>>8));
			SET_LCD_CMD_PARAMETER(11,LCD_DATA,(starty&0xFF));

                     SET_LCD_CMD_PARAMETER(12,LCD_CMD,((0x0053&0xFF00)>>8 ));
                     SET_LCD_CMD_PARAMETER(13,LCD_CMD,(0x0053&0xFF));

			SET_LCD_CMD_PARAMETER(14,LCD_DATA,((endy&0xFF00)>>8));
			SET_LCD_CMD_PARAMETER(15,LCD_DATA,(endy&0xFF));

			SET_LCD_CMD_PARAMETER(16,LCD_CMD,((0x0020&0xFF00) >>8));
			SET_LCD_CMD_PARAMETER(17,LCD_CMD,(0x0020&0xFF) );

			SET_LCD_CMD_PARAMETER(18,LCD_DATA,((startx&0xFF00)>>8));
			SET_LCD_CMD_PARAMETER(19,LCD_DATA,(startx&0xFF));
			
                     SET_LCD_CMD_PARAMETER(20,LCD_CMD,((0x0021&0xFF00)>>8));
                     SET_LCD_CMD_PARAMETER(21,LCD_CMD,(0x0021&0xFF));

			SET_LCD_CMD_PARAMETER(22,LCD_DATA,((starty&0xFF00)>>8));
			SET_LCD_CMD_PARAMETER(23,LCD_DATA,(starty&0xFF));
               
			SET_LCD_CMD_PARAMETER(24,LCD_CMD,((0x0022&0xFF00) >>8));
			SET_LCD_CMD_PARAMETER(25,LCD_CMD,(0x0022&0xFF) );
			
		ENABLE_LCD_TRANSFER_COMPLETE_INT;
		ENABLE_LCD_ROI_CTRL_CMD_FIRST;
		SET_LCD_ROI_CTRL_NUMBER_OF_CMD(26); 
		START_LCD_TRANSFER;
		
		#elif (defined(LCD_9BIT_MODE))
		#elif (defined(LCD_18BIT_MODE))
		#elif (defined(LCD_16BIT_MODE))
//R61503 BY LUDAN 2006.11.5		

		      SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0050&0xFF00) )|((0x0050&0xFF) ));
			//SET_LCD_CMD_PARAMETER(1,LCD_DATA,startx);
                     SET_LCD_CMD_PARAMETER(1,LCD_DATA,(startx&0xFF) )

                     SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0051&0xFF00) )|((0x0051&0xFF) ));
			//SET_LCD_CMD_PARAMETER(3,LCD_DATA,endx);
		      SET_LCD_CMD_PARAMETER(3,LCD_DATA,(endx&0xFF) )

			SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0052&0xFF00) )|((0x0052&0xFF) ));
			SET_LCD_CMD_PARAMETER(5,LCD_DATA,starty);

                     SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0053&0xFF00) )|((0x0053&0xFF) ));
			SET_LCD_CMD_PARAMETER(7,LCD_DATA,endy);

			SET_LCD_CMD_PARAMETER(8,LCD_CMD,((0x0020&0xFF00) )|((0x0020&0xFF) ));
			SET_LCD_CMD_PARAMETER(9,LCD_DATA,startx);

                     SET_LCD_CMD_PARAMETER(10,LCD_CMD,((0x0021&0xFF00) )|((0x0021&0xFF) ));
			SET_LCD_CMD_PARAMETER(11,LCD_DATA,starty);
               
			SET_LCD_CMD_PARAMETER(12,LCD_CMD,((0x0022&0xFF00) )|((0x0022&0xFF) ));

		ENABLE_LCD_TRANSFER_COMPLETE_INT;
		ENABLE_LCD_ROI_CTRL_CMD_FIRST;
		SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13); 
		START_LCD_TRANSFER;
//LUDAN

#if 0  //fla ,may be this is the correct blockwrite func.
 SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00) )|((0x0044&0xFF) ));
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,((endx&0xFF) <<8)|((startx&0xFF) ));

			SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00) )|((0x0045&0xFF) ));
			SET_LCD_CMD_PARAMETER(3,LCD_DATA,((endy&0xFF) <<8)|((starty&0xFF) ));

			SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00) )|((0x0021&0xFF) ));
			SET_LCD_CMD_PARAMETER(5,LCD_DATA,((starty&0xFF) <<8)|((startx&0xFF) ));
                  
			SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00) )|((0x0022&0xFF) ));
               //fla add start
               ENABLE_LCD_TRANSFER_COMPLETE_INT;
		ENABLE_LCD_ROI_CTRL_CMD_FIRST;
		SET_LCD_ROI_CTRL_NUMBER_OF_CMD(7); 
		START_LCD_TRANSFER;
              //fla add end
 
 #endif				
		#endif
	#else
		LCD_CtrlWrite_R61500(0x0044);
		LCD_DataWrite_R61500((((endx&0xFF)<<8)|(startx&0xFF)));
		LCD_CtrlWrite_R61500(0x0045);
		LCD_DataWrite_R61500((((endy&0xFF)<<8)|(starty&0xFF)));
		LCD_CtrlWrite_R61500(0x0021);
		LCD_DataWrite_R61500((((starty&0xFF)<<8)|(startx&0xFF)));
		LCD_CtrlWrite_R61500(0x0022);

		DISABLE_LCD_TRANSFER_COMPLETE_INT;
		DISABLE_LCD_ROI_CTRL_CMD_FIRST;
		START_LCD_TRANSFER;
	#endif /* MT6218B, MT6219 */

   lcd_assert_fail = KAL_FALSE;
}

void LCD_Size_R61500(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_R61500(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_R61500(kal_uint8 *bias)
{

}

void LCD_Contrast_R61500(kal_uint8 *contrast)
{
}

void LCD_LineRate_R61500(kal_uint8 *linerate)
{
}

void LCD_Temp_Compensate_R61500(kal_uint8 *compensate)
{
}

/*===================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 & 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)&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)&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_R61500 = {
   LCD_Init_R61500,
   LCD_PWRON_R61500,
   LCD_SetContrast_R61500,
   LCD_ON_R61500,
   LCD_BlockWrite_R61500,
   LCD_Size_R61500,
   LCD_EnterSleep_R61500,
   LCD_ExitSleep_R61500,
   LCD_Partial_On_R61500,
   LCD_Partial_Off_R61500,
   LCD_Partial_line_R61500,
   /*Engineering mode*/
   LCD_GetParm_R61500,
   LCD_SetBias_R61500,
   LCD_Contrast_R61500,
   LCD_LineRate_R61500,
   LCD_Temp_Compensate_R61500
};

void LCD_FunConfig(void)
{
   MainLCD = &LCD_func_R61500;
}


⌨️ 快捷键说明

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