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

📄 lcd.c

📁 这个是MTK手机平台上面的LCD
💻 C
📖 第 1 页 / 共 5 页
字号:
	REG_LCD_ROI_CTRL=0;
	CLEAR_LCD_CTRL_RESET_PIN;
	Delay_ms(10);
	#if (defined(MT6219)||defined(MT6226)||defined(MT6227)|| defined(MT6226M))
		#if 1			
	SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)3);
	SET_LCD_PARALLEL_CE2WR_HOLD_TIME(3);
	SET_LCD_PARALLEL_CE2RD_SETUP_TIME(3);
	SET_LCD_PARALLEL_WRITE_WAIT_STATE(8);
	SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
	SET_LCD_ROI_CTRL_CMD_LATENCY(10);			// increase the parameter for some mp4 can not be playing smothly
		#else
	SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)3);
	SET_LCD_PARALLEL_CE2WR_HOLD_TIME(3);
	SET_LCD_PARALLEL_CE2RD_SETUP_TIME(3);
	SET_LCD_PARALLEL_WRITE_WAIT_STATE(8);
	SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
	SET_LCD_ROI_CTRL_CMD_LATENCY(20);
		#endif

	#if (defined(MT6226)||defined(MT6227)|| defined(MT6226M))
	#ifdef LCD_18BIT_MODE
	GPIO_ModeSetup(55, 1);
	*((volatile unsigned short *) 0x801201B0) |= 0x4000;
	*((volatile unsigned short *) 0x801201D0) |= 0x0001;
	#endif
	SET_LCD_PARALLEL_DATA_BUS_WIDTH;
	SET_LCD_PARALLEL_GAMMA_R_TABLE(LCD_PARALLEL_GAMMA_DISABLE);
	SET_LCD_PARALLEL_GAMMA_G_TABLE(LCD_PARALLEL_GAMMA_DISABLE);
	SET_LCD_PARALLEL_GAMMA_B_TABLE(LCD_PARALLEL_GAMMA_DISABLE);
	#endif

	#if (defined(MT6219))
	DISABLE_LCD_PARALLEL_SYNC;
	#endif
	#endif
	SET_LCD_CTRL_RESET_PIN;
   	Delay_ms(10);
}
#endif // MT6217, MT6218B, MT6219

	void LCD_blockClear_R61500(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
	{
		kal_uint16 LCD_x;
		kal_uint16 LCD_y;

		Write_REG_R61500(LCD_INDEX_R44H_R61500,x1| (x2 <<8));
		Write_REG_R61500(LCD_INDEX_R45H_R61500,y1| (y2 <<8));
		Write_REG_R61500(LCD_INDEX_R21H_R61500,x1| (y1 <<8));

		LCD_CtrlWrite_R61500(LCD_INDEX_R22H_R61500);

		for(LCD_y=y1; LCD_y<=y2; LCD_y++)
		{
			for(LCD_x=x1; LCD_x<=x2; LCD_x++)
			{

			 *(volatile kal_uint8 *)LCD_R61500_DATA_ADDR = (data&0xFF00)>>8;
			 Delay_us(1);
			 *(volatile kal_uint8 *)LCD_R61500_DATA_ADDR= data&0xFF;
			
			}
		}
	}
	
	void LCD_Init_R61500(kal_uint32 bkground, void **buf_addr)
	{
		#ifdef __TRULY_R61500_DRIVER__
 		Write_REG_R61500(0x0000,0x0001);
	 	Delay_us(50000);
		Write_REG_R61500(0x0001,0x011B);
		Write_REG_R61500(0x0002,0x0700);
	 	Delay_us(50000);
		Write_REG_R61500(0x0003,0x1030);
	 	Delay_us(30000);
		Write_REG_R61500(0x0004,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0005,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0007,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0008,0x0302);
	 	Delay_us(30000);
		Write_REG_R61500(0x0009,0x0001);
	 	Delay_us(30000);

		Write_REG_R61500(0x000B,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x000C,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x000D,0x0308);
	 	Delay_us(30000);
		Write_REG_R61500(0x000E,0x0308);
	 	Delay_us(30000);
		Write_REG_R61500(0x000F,0x0010);
	 	Delay_us(30000);
		Write_REG_R61500(0x0010,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0011,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0012,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0013,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0011,0x0010);
	 	Delay_us(30000);
		Write_REG_R61500(0x0012,0x0004);
	 	Delay_us(30000);
		Write_REG_R61500(0x0013,0x151C);
	 	Delay_us(30000);
		Write_REG_R61500(0x0010,0x0004);
	 	Delay_us(30000);
		
		Write_REG_R61500(0x0010,0x2024);
	 	Delay_us(30000);
		Write_REG_R61500(0x0012,0x0010);
	 	Delay_us(30000);
		
		Write_REG_R61500(0x0010,0x2360);
	 	Delay_us(30000);
		Write_REG_R61500(0x0013,0x2E19);
	 	Delay_us(30000);

		Write_REG_R61500(0x0023,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0024,0x0000);
	 	Delay_us(30000);
		
		#if 1
		Write_REG_R61500(0x0030,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0031,0x0207);
	 	Delay_us(30000);
		Write_REG_R61500(0x0032,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0033,0x0401);
	 	Delay_us(30000);
		Write_REG_R61500(0x0034,0x0707);
	 	Delay_us(30000);
		Write_REG_R61500(0x0035,0x0005);
	 	Delay_us(30000);
		Write_REG_R61500(0x0036,0x0707);
	 	Delay_us(30000);
		Write_REG_R61500(0x0037,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0038,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0039,0x0000);
	 	Delay_us(30000);
		#else
		Write_REG_R61500(0x0030,0x0303);
	 	Delay_us(30000);
 		Write_REG_R61500(0x0031,0x0505);
	 	Delay_us(30000);
		Write_REG_R61500(0x0032,0x0001);
	 	Delay_us(30000);
		Write_REG_R61500(0x0033,0x0301);
	 	Delay_us(30000);
		Write_REG_R61500(0x0034,0x0303);
	 	Delay_us(30000);
		Write_REG_R61500(0x0035,0x0505);
	 	Delay_us(30000);
		Write_REG_R61500(0x0036,0x0001);
	 	Delay_us(30000);
		Write_REG_R61500(0x0037,0x0301);
	 	Delay_us(30000);
		Write_REG_R61500(0x0038,0x010F);
	 	Delay_us(30000);
		Write_REG_R61500(0x0039,0x1F02);
	 	Delay_us(30000);
		#endif
		
		Write_REG_R61500(0x0040,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0041,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0042,0xDB00);
	 	Delay_us(30000);
		Write_REG_R61500(0x0043,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0044,0xAF00);
	 	Delay_us(30000);
		Write_REG_R61500(0x0045,0xDB00);
	 	Delay_us(30000);

		Write_REG_R61500(0x0007,0x0025);
	 	Delay_us(30000);
		Write_REG_R61500(0x0007,0x0037);
	 	Delay_us(30000);
		#else
 		Write_REG_R61500(0x0000,0x0001);
	 	Delay_us(30000);
		Write_REG_R61500(0x0001,0x091B);
	 	Delay_us(30000);
//		Write_REG_R61500(0x0002,0x0701);
		Write_REG_R61500(0x0002,0x0700);
	 	Delay_us(30000);
		Write_REG_R61500(0x0003,0x1030);
	 	Delay_us(30000);
		Write_REG_R61500(0x0004,0x0730);
	 	Delay_us(30000);
		Write_REG_R61500(0x0005,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0008,0x0202);
//		Write_REG_R61500(0x0008,0x0808);
	 	Delay_us(30000);
		Write_REG_R61500(0x0009,0x000F);
//		Write_REG_R61500(0x0009,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0040,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0041,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0042,0xDB00);
	 	Delay_us(30000);
		Write_REG_R61500(0x0043,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0044,0xAF00);
	 	Delay_us(30000);
		Write_REG_R61500(0x0045,0xDB00);
	 	Delay_us(30000);

		Write_REG_R61500(0x0007,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0012,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0013,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0011,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0012,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0013,0x151D);
	 	Delay_us(30000);
		Write_REG_R61500(0x0010,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0010,0x6040);
	 	Delay_us(30000);
		Write_REG_R61500(0x0012,0x0013);
	 	Delay_us(30000);
		Write_REG_R61500(0x0013,0x2D18);
	 	Delay_us(30000);
		
		Write_REG_R61500(0x000B,0x4000);
	 	Delay_us(30000);
		
		Write_REG_R61500(0x0010,0x0040);
	 	Delay_us(30000);
		Write_REG_R61500(0x0010,0x6060);
	 	Delay_us(30000);
		Write_REG_R61500(0x0007,0x0025);
	 	Delay_us(30000);
		Write_REG_R61500(0x0007,0x0037);

		#endif
  		LCD_blockClear_R61500(0,0, LCD_WIDTH-1,LCD_HEIGHT-1,bkground);
	}

	void LCD_BlockWrite_R61500(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
	{
	     
	#ifdef LCD_CMD_DMA_MODE

		SET_LCD_CMD_PARAMETER(0, LCD_CMD, 00);
		SET_LCD_CMD_PARAMETER(1, LCD_CMD, 0x44);
		SET_LCD_CMD_PARAMETER(2, LCD_DATA, endx);
		SET_LCD_CMD_PARAMETER(3, LCD_DATA, startx);
			
		SET_LCD_CMD_PARAMETER(4, LCD_CMD, 0x00);
		SET_LCD_CMD_PARAMETER(5, LCD_CMD, 0x45);
		SET_LCD_CMD_PARAMETER(6, LCD_DATA, endy);
		SET_LCD_CMD_PARAMETER(7, LCD_DATA, starty);

		SET_LCD_CMD_PARAMETER(8, LCD_CMD, 0x00);
		SET_LCD_CMD_PARAMETER(9, LCD_CMD, 0x21);
		SET_LCD_CMD_PARAMETER(10, LCD_DATA,  starty);
		SET_LCD_CMD_PARAMETER(11, LCD_DATA, startx);
			
		SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x00);
		SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x00);

		SET_LCD_CMD_PARAMETER(14,LCD_CMD,0x00);
		SET_LCD_CMD_PARAMETER(15,LCD_CMD,0x00);


		SET_LCD_CMD_PARAMETER(16,LCD_CMD,0x00);
		SET_LCD_CMD_PARAMETER(17,LCD_CMD,0x22);

		ENABLE_LCD_TRANSFER_COMPLETE_INT;
		SET_LCD_ROI_CTRL_NUMBER_OF_CMD(18);
		ENABLE_LCD_ROI_CTRL_CMD_FIRST;
		while (LCD_IS_RUNNING) {};
		START_LCD_TRANSFER;
	#else
	
		Write_REG_R61500(LCD_INDEX_R44H_R61500,startx|(endx<<8));
		Write_REG_R61500(LCD_INDEX_R45H_R61500,starty|(endy<<8));
		Write_REG_R61500(LCD_INDEX_R21H_R61500,startx|(starty<<8));

		LCD_CtrlWrite_R61500(LCD_INDEX_R22H_R61500);
					
		ENABLE_LCD_TRANSFER_COMPLETE_INT;
		DISABLE_LCD_ROI_CTRL_CMD_FIRST;
		while (LCD_IS_RUNNING) {};
		START_LCD_TRANSFER;
		
	#endif
	  
	}

	
	void LCD_EnterSleep_R61500(void)
	{ 
	
		//Write_REG_R61500(LCD_INDEX_R10H_R61500,0x0002);
		Write_REG_R61500(LCD_INDEX_R10H_R61500,0x4242);  //modified by caodongping aug-16-2005
		Delay_us(2000);
	}

	void LCD_ExitSleep_R61500(void)
	{
		Write_REG_R61500(LCD_INDEX_R10H_R61500,0x4240);
		Delay_us(10000);
		#ifdef __TRULY_R61500_DRIVER__
		Write_REG_R61500(0x0010,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0011,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0012,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0013,0x0000);
	 	Delay_us(30000);
		Write_REG_R61500(0x0011,0x0010);
	 	Delay_us(30000);
		Write_REG_R61500(0x0012,0x0004);
	 	Delay_us(30000);
		Write_REG_R61500(0x0013,0x151C);
	 	Delay_us(30000);
		Write_REG_R61500(0x0010,0x0004);
	 	Delay_us(30000);
		
		Write_REG_R61500(0x0010,0x2024);
	 	Delay_us(30000);
		Write_REG_R61500(0x0012,0x0010);
	 	Delay_us(30000);
		
		Write_REG_R61500(0x0010,0x2360);
	 	Delay_us(30000);
		Write_REG_R61500(0x0013,0x2E19);
	 	Delay_us(30000);

		Write_REG_R61500(0x0007,0x0025);
	 	Delay_us(30000);
		Write_REG_R61500(0x0007,0x0037);
	 	Delay_us(30000);
		#endif
	}
	void LCD_Size_R61500(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
	{
	   	*out_LCD_width = LCD_WIDTH;
	   	*out_LCD_height =LCD_HEIGHT;
	}
	void LCD_PWRON_R61500(kal_bool on)
	{
		#ifdef __TRULY_R61500_DRIVER__
		if(on)	
		{
			LCD_ExitSleep_R61500();
		}
		else
		{
			LCD_EnterSleep_R61500();
		}
		#else
		if(!on)
			{
			  
	  		  Write_REG_R61500(LCD_INDEX_R07H_R61500,0x0036);
			  Delay_us(20000);
			  Write_REG_R61500(LCD_INDEX_R07H_R61500,0x0022);
			  Delay_us(20000);
			  
			  Write_REG_R61500(LCD_INDEX_R07H_R61500,0x0000);
			  Write_REG_R61500(LCD_INDEX_R09H_R61500,0x0000);
			  Write_REG_R61500(LCD_INDEX_R12H_R61500,0x0000);
			  Delay_us(2000);
			  
			  Write_REG_R61500(LCD_INDEX_R13H_R61500,0x0D0F);
			  Delay_us(2000);
			  
			  Write_REG_R61500(LCD_INDEX_R10H_R61500,0x0000);
			}
		#endif
	
	}

	void LCD_ON_R61500(kal_bool on)
	{
	  
	}

	
	void LCD_SetContrast_R61500(kal_uint8 level)
	{
	
	}
	void LCD_Partial_On_R61500(kal_uint16 start_page,kal_uint16 end_page)
	{
		
	}

	void LCD_Partial_Off_R61500(void)
	{
		
	}
	
	kal_uint8 LCD_Partial_line_R61500(void)
	{
		return 1;		
	}

	//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)
	{
	
	}

	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
	};

#endif   //#ifdef __SM02_MIKI_DRV_LCD_HITACHI_R61500__

#ifdef __MIKI_SM264_TRULY_GG3342__

#if (defined(MT6218B)||defined(MT6219)||defined(MT6217)||defined(MT6226)|| defined(MT6226M))
void init_lcd_interface(void)
{
	REG_LCD_ROI_CTRL=0;
	CLEAR_LCD_CTRL_RESET_PIN;
	Delay_ms(10);
	#if (defined(MT6219)||defined(MT6226)||defined(MT6227)|| defined(MT6226M))
	SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)2);
	SET_LCD_PARALLEL_CE2WR_HOLD_TIME(2);

⌨️ 快捷键说明

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