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

📄 lcd.c

📁 这个是MTK手机平台上面的LCD
💻 C
📖 第 1 页 / 共 5 页
字号:
	SET_LCD_PARALLEL_CE2RD_SETUP_TIME(2);
	SET_LCD_PARALLEL_WRITE_WAIT_STATE(10);
	SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
	SET_LCD_ROI_CTRL_CMD_LATENCY(10);

	#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
	
	/**************************************************************************
	*
	*     MAIN LCD:  176x220, 262k color, Parallel Interface
	*
	***************************************************************************/
		
void Write_REG_HCD667B89RBP(kal_uint16 reg, kal_uint16 data)
{
	LCD_CtrlWrite_HCD667B89RBP(reg); 
	LCD_DataWrite_HCD667B89RBP(data); 
}

void LCD_Set_Y_Addr_HCD667B89RBP(kal_uint16 start_row, kal_uint16 end_row) 
{ 
		Write_REG_HCD667B89RBP(0x45, start_row);
		Write_REG_HCD667B89RBP(0x45, end_row);
} 

void LCD_Set_X_Addr_HCD667B89RBP(kal_uint16 start_column, kal_uint16 end_column) 
{ 
		Write_REG_HCD667B89RBP(0x44, start_column );
		Write_REG_HCD667B89RBP(0x44, end_column );
} 
	
	
void LCD_blockClear_HCD667B89RBP(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
{
		kal_uint16 LCD_x, LCD_y;
	
		Write_REG_HCD667B89RBP(0x0044,x1| (x2 <<8));
		Write_REG_HCD667B89RBP(0x0045,y1| (y2 <<8));
		Write_REG_HCD667B89RBP(0x0021,x1| (y1 <<8));
		
		LCD_CtrlWrite_HCD667B89RBP(0x0022);
		
		for(LCD_y=y1; LCD_y<=y2; LCD_y++)
		{
			for(LCD_x=x1; LCD_x<=x2; LCD_x++)
{
		
			 *(volatile kal_uint8 *)LCD_HCD667B89RBP_DATA_ADDR = (data&0xFF00)>>8;
			 Delay_us(1);
			 *(volatile kal_uint8 *)LCD_HCD667B89RBP_DATA_ADDR= data&0xFF;
		
			}
		}
		
}
		
void LCD_Init_HCD667B89RBP(kal_uint32 bkground, void **buf_addr)
{
 		Write_REG_HCD667B89RBP(0x0000,0x0001);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0001,0x091B);
	 	Delay_us(30000);
//		Write_REG_HCD667B89RBP(0x0002,0x0701);
		Write_REG_HCD667B89RBP(0x0002,0x0700);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0003,0x1030);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0004,0x0730);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0005,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0008,0x0202);
//		Write_REG_HCD667B89RBP(0x0008,0x0808);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0009,0x000F);
//		Write_REG_HCD667B89RBP(0x0009,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0040,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0041,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0042,0xDB00);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0043,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0044,0xAF00);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0045,0xDB00);
	 	Delay_us(30000);
		
		Write_REG_HCD667B89RBP(0x0007,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0012,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0013,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0011,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0012,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0013,0x151D);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0010,0x0000);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0010,0x6040);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0012,0x0013);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0013,0x2D18);
	 	Delay_us(30000);
		
		Write_REG_HCD667B89RBP(0x000B,0x4000);
	 	Delay_us(30000);
		
		Write_REG_HCD667B89RBP(0x0010,0x0040);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0010,0x6060);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0007,0x0025);
	 	Delay_us(30000);
		Write_REG_HCD667B89RBP(0x0007,0x0037);
  		LCD_blockClear_HCD667B89RBP(0,0, LCD_WIDTH-1,LCD_HEIGHT-1,bkground);
		
}

void LCD_BlockWrite_HCD667B89RBP(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
	
	kal_uint16 l_startx=startx, l_starty=starty+96, l_endx=endx, l_endy=endy+96; 
	  
	#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,0x22);
		
		ENABLE_LCD_TRANSFER_COMPLETE_INT;
		SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14 );
		ENABLE_LCD_ROI_CTRL_CMD_FIRST;
		while (LCD_IS_RUNNING) {};
		START_LCD_TRANSFER;
		
	#else
		LCD_Set_X_Addr_HCD667B89RBP(l_startx, l_endx);
		LCD_Set_Y_Addr_HCD667B89RBP(l_starty, l_endy);
		
		Write_REG_HCD667B89RBP(LCD_INDEX_R20H_HCD667B89RBP, l_startx);
		Write_REG_HCD667B89RBP(LCD_INDEX_R21H_HCD667B89RBP, l_starty);

		LCD_CtrlWrite_HCD667B89RBP(LCD_INDEX_R22H_HCD667B89RBP);
					
		ENABLE_LCD_TRANSFER_COMPLETE_INT;
		DISABLE_LCD_ROI_CTRL_CMD_FIRST;
		while (LCD_IS_RUNNING) {};
		START_LCD_TRANSFER;
		
	#endif
	  
}

	
void LCD_EnterSleep_HCD667B89RBP(void)
{
		Write_REG_HCD667B89RBP(0x0010,0x4242);
		Delay_us(2000);
}

void LCD_ExitSleep_HCD667B89RBP(void)
{
		Write_REG_HCD667B89RBP(0x0010,0x4240);
		Delay_us(10000);
}

void LCD_Size_HCD667B89RBP(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
	   	*out_LCD_width = LCD_WIDTH;
	   	*out_LCD_height = LCD_HEIGHT;
}
void LCD_PWRON_HCD667B89RBP(kal_bool on)
{
	if(on)
	{
		LCD_ExitSleep_HCD667B89RBP();
	}
	else
	{
		LCD_EnterSleep_HCD667B89RBP();
		Write_REG_HCD667B89RBP(0x13, 0x0000);
		Write_REG_HCD667B89RBP(0x10, 0x0210);
		Delay_ms(4);
		Write_REG_HCD667B89RBP(0x10, 0x0200);
		Write_REG_HCD667B89RBP(0x12, 0x3f08);
	}	
}

void LCD_ON_HCD667B89RBP(kal_bool on)
{
	if(on)
	{
		LCD_ExitSleep_HCD667B89RBP();
	}
	else
	{
		LCD_EnterSleep_HCD667B89RBP();
	}	  
}

	
void LCD_SetContrast_HCD667B89RBP(kal_uint8 level)
{
	
}
void LCD_Partial_On_HCD667B89RBP(kal_uint16 start_page,kal_uint16 end_page)
{
		
}

void LCD_Partial_Off_HCD667B89RBP(void)
{
		
}
	
kal_uint8 LCD_Partial_line_HCD667B89RBP(void)
{
		return 1;		
}

	//Engineering mode

kal_uint8 LCD_GetParm_HCD667B89RBP(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_HCD667B89RBP(kal_uint8 *bias)
{
		
}

void LCD_Contrast_HCD667B89RBP(kal_uint8 *contrast)
{
		
}
void LCD_LineRate_HCD667B89RBP(kal_uint8 *linerate)
{

}

void LCD_Temp_Compensate_HCD667B89RBP(kal_uint8 *compensate)
{
	
}

LCD_Funcs LCD_SM261_HCD667B89RBP = {
	   LCD_Init_HCD667B89RBP,
	   LCD_PWRON_HCD667B89RBP,
	   LCD_SetContrast_HCD667B89RBP,
	   LCD_ON_HCD667B89RBP,
	   LCD_BlockWrite_HCD667B89RBP,
	   LCD_Size_HCD667B89RBP,
	   LCD_EnterSleep_HCD667B89RBP,
	   LCD_ExitSleep_HCD667B89RBP,
	   LCD_Partial_On_HCD667B89RBP,
	   LCD_Partial_Off_HCD667B89RBP,
	   LCD_Partial_line_HCD667B89RBP,
	   // Engineering mode
	   LCD_GetParm_HCD667B89RBP,
	   LCD_SetBias_HCD667B89RBP,
	   LCD_Contrast_HCD667B89RBP,
	   LCD_LineRate_HCD667B89RBP,
	   LCD_Temp_Compensate_HCD667B89RBP
};
	
#endif  // __MIKI_SM264_TRULY_GG3342__

#ifdef __SM264_MIKI_DRV_LCD_TRULY_GG3800__

#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);
	SET_LCD_PARALLEL_CE2RD_SETUP_TIME(2);
	SET_LCD_PARALLEL_WRITE_WAIT_STATE(10);
	SET_LCD_PARALLEL_READ_LATENCY_TIME(10);
	SET_LCD_ROI_CTRL_CMD_LATENCY(10);

	#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_HX8309(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
	{
		kal_uint16 LCD_x;
		kal_uint16 LCD_y;
		data =0x2222;
		
		Write_REG_HX8309(0x0044,x1| (x2 <<8));
		Write_REG_HX8309(0x0045,y1| (y2 <<8));
		Write_REG_HX8309(0x0021,x1| (y1 <<8));

		LCD_CtrlWrite_HX8309(0x0022);

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

			 *(volatile kal_uint8 *)LCD_HX8309_DATA_ADDR = (data&0xFF00)>>8;
			 Delay_us(1);
			 *(volatile kal_uint8 *)LCD_HX8309_DATA_ADDR= data&0xFF;
			
			}
		}
	}
	
	void LCD_Init_HX8309(kal_uint32 bkground, void **buf_addr)
	{
 		Write_REG_HX8309(0x0001,0x011B);
		Write_REG_HX8309(0x0002,0x0700);
		Write_REG_HX8309(0x0003,0x7030);
		Write_REG_HX8309(0x0004,0x0000);
		Write_REG_HX8309(0x0005,0x0000);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0007,0x0003);
		Delay_us(30000);
		Write_REG_HX8309(0x0008,0x0202);
		Write_REG_HX8309(0x0009,0x0000);
		Write_REG_HX8309(0x000B,0x0000);
		Write_REG_HX8309(0x000C,0x0003);
		
		Write_REG_HX8309(0x0040,0x0000);
		Write_REG_HX8309(0x0041,0x00EF);
		Write_REG_HX8309(0x0042,0xDB00);
		Write_REG_HX8309(0x0043,0xDB00);
		Write_REG_HX8309(0x0044,0xB001);
		Write_REG_HX8309(0x0045,0xDB00);
		Write_REG_HX8309(0x0021,0x00AF);
	 	Delay_us(10000);

		Write_REG_HX8309(0x0000,0x0001);
		Write_REG_HX8309(0x0010,0x0000);
		Write_REG_HX8309(0x0011,0x0000);
		Write_REG_HX8309(0x0012,0x0000);
		Write_REG_HX8309(0x0013,0x0000);
		Write_REG_HX8309(0x0011,0x0000);
		Write_REG_HX8309(0x0013,0x1517);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0012,0x0008);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0010,0x4040);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0011,0x0000);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0010,0x0054);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0012,0x0011);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0010,0x4140);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0013,0x3208);
	 	Delay_us(30000);
		

		Write_REG_HX8309(0x0030,0x0100);
		Write_REG_HX8309(0x0031,0x0505);
		Write_REG_HX8309(0x0032,0x0002);
		Write_REG_HX8309(0x0033,0x0300);
		Write_REG_HX8309(0x0034,0x0707);
		Write_REG_HX8309(0x0035,0x0017);
		Write_REG_HX8309(0x0036,0x0707);
		Write_REG_HX8309(0x0037,0x0002);
		Write_REG_HX8309(0x0038,0x0200);
		Write_REG_HX8309(0x0039,0x0000);
	 	Delay_us(30000);

		
		Write_REG_HX8309(0x0007,0x0045);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0007,0x0065);
	 	Delay_us(30000);
		Write_REG_HX8309(0x0007,0x0077);
  		LCD_blockClear_HX8309(0,0, LCD_WIDTH-1,LCD_HEIGHT-1,bkground);
	}

	void LCD_BlockWrite_HX8309(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
	{
#if 1
	#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,0x22);

		ENABLE_LCD_TRANSFER_COMPLETE_INT;
		SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14 );
		ENABLE_LCD_ROI_CTRL_CMD_FIRST;
		while (LCD_IS_RUNNING) {};
		START_LCD_TRANSFER;
	#else
	
		Write_REG_HX8309(0x0044,startx|(endx<<8));
		Write_REG_HX8309(0x0045,starty|(endy<<8));
		Write_REG_HX8309(0x0021,startx|(starty<<8));

		LCD_CtrlWrite_HX8309(0x0022);
					
		ENABLE_LCD_TRANSFER_COMPLETE_INT;
		DISABLE_LCD_ROI_CTRL_CMD_FIRST;
		while (LCD_IS_RUNNING) {};
		START_LCD_TRANSFER;

⌨️ 快捷键说明

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