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

📄 lcd.c.svn-base

📁 MTK25平台LCD自适应程序 已经MP过的code
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:

   for(i=reg_start_idx; i<=reg_end_idx; i++){
      if  (lcd_check==1){
         data_addr = lcd_check_reg.reg[i].addr;
         data_value = readreg_HX8306A(data_addr);
         kal_prompt_trace(MOD_ENG,"--read %x as %x",data_addr,data_value);
         if (data_value!=lcd_check_reg.reg[i].para) {

               kal_prompt_trace(MOD_ENG,"ESD FAIL read %x as %x",data_addr,data_value);
               return KAL_FALSE;
         }
	   }
   }

   lcd_reg_index++;
   while (LCD_IS_RUNNING) {};


return KAL_TRUE;

}

/*===================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)*/


void LCD_BlockWrite_HX8306A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
}

void LCD_EnterSleep_HX8306A(void)
{
}

void LCD_ExitSleep_HX8306A(void)
{
}

#if defined(__LCD_SSD1289_16BIT_SUPPORT__)

void LCD_Init_SSD1289(kal_uint32 bkground, void **buf_addr);
void LCD_BlockWrite_SSD1289(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy);
void LCD_blockClear_SSD1289(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data);
void LCD_ClearAll_SSD1289(kal_uint16 data);
void LCD_EnterSleep_SSD1289(void);
void LCD_ExitSleep_SSD1289(void);


void LCD_Init_SSD1289(kal_uint32 bkground, void **buf_addr)
{
	volatile kal_uint32 i;
	kal_uint16 background = (kal_uint16)bkground;
	kal_uint16 read_data;
	kal_uint16 m,n;

    lcd_check = 0;

	LCD_CtrlWrite_HX8306A(0x00);
	read_data = LCD_DataRead_HX8306A;
	kal_prompt_trace(MOD_ENG,"SSD1289 ID = %x",read_data);

	CLEAR_LCD_CTRL_RESET_PIN;
	LCD_Delay(0x1000);
	SET_LCD_CTRL_RESET_PIN;
	LCD_Delay(0x1000);
	//cedar add for VP ILI9320+AUO ,070828
		//************* Start Initial Sequence ******************// 									
	//	  LCD_set_reg(0x00A4,0x0001);
  	Delayms(10);

//*************//for TF2210K3  PD0220X1 LCD****************
	    LCD_set_reg(0x0007,0x0021);          
	    LCD_set_reg(0x0000,0x0001);
	    Delayms(10);
	    LCD_set_reg(0x0007,0x0023);
	    LCD_set_reg(0x0010,0x0000);
	    Delayms(30);
	    LCD_set_reg(0x0007,0x0033);
	    LCD_set_reg(0x0001,0x2B3F);   //0x233F
	    LCD_set_reg(0x0011,0x6030);
	    Delayms(10);
	    LCD_set_reg(0x0002,0x0600);
	    LCD_set_reg(0x000B,0x0000);
	    LCD_set_reg(0x0025,0x8000);
	    //power supply setting
	    LCD_set_reg(0x000C,0x0000);
	    Delayms(10);
	    LCD_set_reg(0x0003,0xA8A4);
	    Delayms(5);
	    LCD_set_reg(0x000D,0x030C);
	    Delayms(5);
	    LCD_set_reg(0x000E,0x2D00);
	    Delayms(5);
	    LCD_set_reg(0x001E,0x00AA);
	    Delayms(5);                              
	    //gamma contral
	    LCD_set_reg(0x0030,0x0707);
	    LCD_set_reg(0x0031,0x0204);
	    LCD_set_reg(0x0032,0x0204);
	    LCD_set_reg(0x0033,0x0502);
	    LCD_set_reg(0x0034,0x0507);
	    LCD_set_reg(0x0035,0x0204);
	    LCD_set_reg(0x0036,0x0204);
	    LCD_set_reg(0x0037,0x0502);
	    LCD_set_reg(0x003A,0x0302);
	    LCD_set_reg(0x003B,0x0302);
	    Delayms(20);
	    LCD_set_reg(0x000F,0x0000);
	    LCD_set_reg(0x0044,0xEF00);
	    LCD_set_reg(0x0045,0x0000);
	    LCD_set_reg(0x0046,0x013F);
  

  	    LCD_CtrlWrite_HX8306A(0x22);
    	  Delayms(20);								   // Dis-charge capacitor power voltage	

    	  LCD_ClearAll_SSD1289(0xffff);
        lcd_check = 1;

}


void LCD_BlockWrite_SSD1289(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
   kal_uint16 roi_offset_x,roi_offset_y;
	kal_uint16 roi_width,roi_height,start_x;

	while (LCD_IS_RUNNING){};

   ASSERT(lcd_assert_fail==KAL_FALSE);
   lcd_assert_fail = KAL_TRUE;
   #if 0
   roi_offset_x=GET_LCD_ROI_WINDOW_OFFSET_X;
	roi_offset_y=GET_LCD_ROI_WINDOW_OFFSET_Y;
	roi_width=GET_LCD_ROI_WINDOW_SIZE_X;
	roi_height=GET_LCD_ROI_WINDOW_SIZE_Y;

	roi_offset_x -= (startx&0x03);
	roi_width+= (startx&0x03);
	roi_width+= (3-(endx&0x03));
	SET_LCD_ROI_WINDOW_SIZE(roi_width,roi_height);
	SET_LCD_ROI_WINDOW_OFFSET(roi_offset_x,roi_offset_y);
	start_x -=(startx&0x03);
#endif 
	#ifdef LCD_CMD_DMA_MODE
		
		#if (defined(LCD_16BIT_MODE))

			SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0044);
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,(endx<<8)|(startx&0xff));

			SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0045);
			SET_LCD_CMD_PARAMETER(3,LCD_DATA,starty);

			SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0046);
			SET_LCD_CMD_PARAMETER(5,LCD_DATA,endy);
				
			SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x004E);
			SET_LCD_CMD_PARAMETER(7,LCD_DATA,startx);
				
			SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x004F);
			SET_LCD_CMD_PARAMETER(9,LCD_DATA,starty);
				
			SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0022);
						
	#endif
            ENABLE_LCD_TRANSFER_COMPLETE_INT;
		SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11);
           ENABLE_LCD_TRANSFER_COMPLETE_INT; 
           ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
         while (LCD_IS_RUNNING) {}; 
          START_LCD_TRANSFER; 
	
		
	#else
		LCD_CtrlWrite_HX8306A(0x0044);
		LCD_DataWrite_HX8306A((((endx&0xFF)<<8)|(startx&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0045);
		LCD_DataWrite_HX8306A((((endy&0xFF)<<8)|(starty&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0021);
		LCD_DataWrite_HX8306A((((starty&0xFF)<<8)|(startx&0xFF)));
		LCD_CtrlWrite_HX8306A(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_blockClear_SSD1289(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data)
{
	kal_uint16 LCD_x;
	kal_uint16 LCD_y;
	kal_uint8 r_color,g_color,b_color;

	x1 -=(x1&0x03);
	x2 += (3-(x2&0x03));

	r_color=(data&0xF800)>>10;	/* transfer to RGB666 */
	g_color=(data>>5)&0x3F;
	b_color=((data)&0x1F)<<1;


	#if (defined(LCD_CMD_DMA_MODE))
		#if (defined(LCD_8BIT_MODE))
		#elif (defined(LCD_9BIT_MODE))
		#elif (defined(LCD_16BIT_MODE))
                     SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0044);
			SET_LCD_CMD_PARAMETER(1,LCD_DATA,(x2<<8)|(x1&0xff));

			SET_LCD_CMD_PARAMETER(2,LCD_CMD,0x0045);
			SET_LCD_CMD_PARAMETER(3,LCD_DATA,y1);

			SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0046);
			SET_LCD_CMD_PARAMETER(5,LCD_DATA,y2);
				
			SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x004E);
			SET_LCD_CMD_PARAMETER(7,LCD_DATA,x1);
				
			SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x004F);
			SET_LCD_CMD_PARAMETER(9,LCD_DATA,y1);
				
				
			SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0022);
				
			LCD_SEND_DMA_CMD(11);	
			
		#endif
	#else
		LCD_CtrlWrite_HX8306A(0x0044);
		LCD_DataWrite_HX8306A((((x2&0xFF)<<8)|(x1&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0045);
		LCD_DataWrite_HX8306A((((y2&0xFF)<<8)|(y1&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0021);
		LCD_DataWrite_HX8306A((((y1&0xFF)<<8)|(x1&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0022);
	#endif

	for(LCD_y=y1;LCD_y<=y2;LCD_y++)
	{
		for(LCD_x=x1;LCD_x<=x2;LCD_x++)
		{
		#if (defined(LCD_8BIT_MODE))
			*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR)=(kal_uint8)((data&0xFF00)>>8);
			*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR)=(kal_uint8)(data&0xFF);
		#elif (defined(LCD_16BIT_MODE))
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=data;
		#elif (defined(LCD_18BIT_MODE))
			*((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(r_color<<12)|(g_color<<6)|b_color;
//				*((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(kal_uint16) data;
		#elif (defined(LCD_9BIT_MODE))
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=(r_color<<6)|(g_color>>3);
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=((g_color&0x07)<<6)|b_color;
		#endif
		}
	}
}

void LCD_ClearAll_SSD1289(kal_uint16 data)
{
   LCD_blockClear_SSD1289(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,data);
}

void LCD_EnterSleep_SSD1289(void)
{
	lcd_power_ctrl_shadow1 |= 0x02;
	lcd_power_ctrl_shadow3 &= ~0x10;
	lcd_power_ctrl_shadow4 &= ~0x2000;

	
	#if (defined(LCD_CMD_DMA_MODE))
		#if (defined(LCD_8BIT_MODE))
		#elif (defined(LCD_9BIT_MODE))
		#elif (defined(LCD_16BIT_MODE))
			lcd_power_ctrl_shadow1 |= 0x02;
	             lcd_power_ctrl_shadow3 &= ~0x10;
	              lcd_power_ctrl_shadow4 &= ~0x2000;
	
/*
		             SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0007);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,0x0072);
				LCD_SEND_DMA_CMD(2);
				Delayms(50);
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0007);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,0x0001);
				LCD_SEND_DMA_CMD(2);
				Delayms(10);
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0007);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,0x0000);
				LCD_SEND_DMA_CMD(2);
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0010);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,0x0002);
				LCD_SEND_DMA_CMD(2);
*/

       		LCD_set_reg(0x0010, 0x0001);
			Delayms(100);
				 
		#endif
	#else
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0036);
		LCD_Delay(0x1000);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0026);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0004);
		LCD_Delay(0x1000);
		LCD_CtrlWrite_HX8306A(0x0010);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow1);
		LCD_Delay(0x8000);
		LCD_CtrlWrite_HX8306A(0x0012);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow3);
		LCD_CtrlWrite_HX8306A(0x0013);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow4);
		LCD_Delay(0x1000);
	#endif

#if defined(__LIGHT_SENSOR_SUPPORT__)
    StopTimer(LIGHT_SENSOR_TIMER);
#endif /* defined(__LIGHT_SENSOR_SUPPORT__) */
}


void LCD_ExitSleep_SSD1289(void)
{
	lcd_power_ctrl_shadow1 &= ~0x2;
	lcd_power_ctrl_shadow3 |= 0x10;
	lcd_power_ctrl_shadow4 |= 0x2000;
	#if (defined(LCD_CMD_DMA_MODE))
		#if (defined(LCD_8BIT_MODE))
		#elif (defined(LCD_9BIT_MODE))
		#elif (defined(LCD_16BIT_MODE))
		lcd_power_ctrl_shadow1 &= ~0x2;
	     lcd_power_ctrl_shadow3 |= 0x10;
	   lcd_power_ctrl_shadow4 |= 0x2000;
/*
	 		        SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0010);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,0x16B0);
				LCD_SEND_DMA_CMD(2);
				Delayms(50);
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0007);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,0x0021);
				LCD_SEND_DMA_CMD(2);
				Delayms(10);
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0007);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,0x0061);
				LCD_SEND_DMA_CMD(2);
				SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0007);
				SET_LCD_CMD_PARAMETER(1,LCD_DATA,0x0173);
				LCD_SEND_DMA_CMD(2);
	*/
                         LCD_Init_SSD1289(0,NULL);	/*dewav,cedar,070514*/
		#endif
		
	#else
		LCD_CtrlWrite_HX8306A(0x0010);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow1);
		LCD_CtrlWrite_HX8306A(0x0012);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow3);
		LCD_CtrlWrite_HX8306A(0x0013);
		LCD_DataWrite_HX8306A(lcd_power_ctrl_shadow4);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0005);
		LCD_Delay(0x1000);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0025);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0027);
		LCD_Delay(0x1000);
		LCD_CtrlWrite_HX8306A(0x0007);
		LCD_DataWrite_HX8306A(0x0037);
		LCD_Delay(0x1000);
	#endif

#if defined(__LIGHT_SENSOR_SUPPORT__)
#ifdef __MTK_TARGET__
    LightSensorCheck();
#endif
#endif /* defined(__LIGHT_SENSOR_SUPPORT__) */
}


#endif


#if defined(__LCD_S6D1121_16BIT_SUPPORT__)



void LCD_Init_S6D1121(kal_uint32 bkground, void **buf_addr);
void LCD_BlockWrite_S6D1121(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy);
void LCD_blockClear_S6D1121(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data);
void LCD_ClearAll_S6D1121(kal_uint16 data);
void LCD_EnterSleep_S6D1121(void);
void LCD_ExitSleep_S6D1121(void);


void LCD_Init_S6D1121(kal_uint32 bkground, void **buf_addr)
{
	volatile kal_uint32 i;
	kal_uint16 background = (kal_uint16)bkground;
	kal_uint16 read_data;
	kal_uint16 m,n;

    lcd_check = 0;

	LCD_CtrlWrite_HX8306A(0x00);
	read_data = LCD_DataRead_HX8306A;
	kal_prompt_trace(MOD_ENG,"S6D1121 ID = %x",read_data);

	CLEAR_LCD_CTRL_RESET_PIN;
	LCD_Delay(0x1000);
	SET_LCD_CTRL_RESET_PIN;
	LCD_Delay(0x1000);
	//cedar add for VP ILI9320+AUO ,070828
		//************* Start Initial Sequence ******************// 									
	//	  LCD_set_reg(0x00A4,0x0001);
  Delayms(10);
  LCD_set_reg(0x11,0x2004);

  LCD_set_reg(0x12,0x0033); 
  LCD_set_reg(0x13,0xCC00);
  LCD_set_reg(0x15,0x382E);
  LCD_set_reg(0x14,0x002A);
  LCD_set_reg(0x13,0xCC04);
  Delayms(10);
  LCD_set_reg(0x13,0xCC06); //

⌨️ 快捷键说明

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