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

📄 lcd.c

📁 凌阳SPCE3200 系统开发板随机自带源程序。共安排了32个子目录
💻 C
字号:
#include "Lcd.h"


S32	g_lhorizontalpix;
S32 g_lverticalpix;
S32 g_ldummypix;
S32 g_lstartpoint;
S32 g_lstartline;
S32 g_lhorizontalclknum;
S32 g_lhscalevec;
S32 g_lvscalevec;

void spi_mst(S32 addr, S32 data)
{
	S32 i=0;
	
	*P_SPI_TXRX_STATUS = 0x40000000;				//SPI smart mode
	*P_SPI_TX_STATUS  = 0x80000010;				//SPITXLEVEL1;
	*P_SPI_RX_STATUS = 0x80000030;				//SPIRXLEVEL3;

	*P_SPI_MODE_CTRL = 0x80000006;
	*P_SPI_TX_DATA = addr;
	*P_SPI_TX_DATA = data;
	
	while(i != 0x00000001)
		i = *P_SPI_TXRX_STATUS & 0x00000001;
	
	*P_SPI_MODE_CTRL = 0x00000006;				//SPI_OFF
	for(i=0;i<1000;i++);
}

void LCD_Buffer_Setting(S32 FB_ADDR0, S32 FB_ADDR1, S32 FB_ADDR2)
{
	*P_LCD_BUFFER_SA1 = FB_ADDR0;
	*P_LCD_BUFFER_SA2 = FB_ADDR1;
	*P_LCD_BUFFER_SA3 = FB_ADDR2;	
}

void TFT_Ctrl_Setting(	S32 tft_en, S32 ver_scl, S32 hor_scl, S32 clk_sel, S32 int_en )
{
	int p_tft_int, p_tft_ctrl;
	
	p_tft_int = int_en << 24;
	p_tft_ctrl = (tft_en << 24) +  (ver_scl << 10) + (hor_scl << 8) + (clk_sel);
	*P_TFT_INT_STATUS = p_tft_int;
	*P_TFT_MODE_CTRL = p_tft_ctrl;
}

void Hor_Time_Setting(	S32 hor_act, S32 hor_fblk, S32 hor_bblk, S32 hor_syncw )
{
 	*P_TFT_HOR_ACT = hor_act;
	*P_TFT_HOR_FRONT = hor_fblk;
	*P_TFT_HOR_BACK = hor_bblk;
	*P_TFT_HOR_SYNC = hor_syncw;
}

void Ver_Time_Setting(	S32 ver_act, S32 ver_fblk, S32 ver_bblk, S32 ver_syncw	)
{
 	*P_TFT_VER_ACT = ver_act;
	*P_TFT_VER_FRONT = ver_fblk;
	*P_TFT_VER_BACK = ver_bblk;
	*P_TFT_VER_SYNC = ver_syncw; 
}

void Dis_area_Setting(	S32 str_lno, S32 str_pno, S32 pix_num, S32 dumy_pix	)
{
	*P_TFT_ROW_START = str_lno;
	*P_TFT_COL_START = str_pno;
	*P_TFT_COL_WIDTH = pix_num;
	*P_TFT_DUMMY_WIDTH = dumy_pix;
}

void Data_seq_Setting(	S32 tft_fmt, S32 yuv_fmt, S32 yuv_seq, S32 rgb_ol_seq, S32 rgb_el_seq )
{
	int p_data_seq;
	p_data_seq = (yuv_fmt<<24) + (yuv_seq << 16) + (rgb_ol_seq << 8) + (rgb_el_seq);

	*P_TFT_DATA_SEQ = p_data_seq;
	*P_TFT_DATA_FMT = tft_fmt;
}


void delay_TFT( unsigned int T )
{
	for( ; T > 0; T-- )
	{
		__asm("nop");
		__asm("nop");
		__asm("nop");
	}
}


void calculate_act_area( S32 type, S32 mode, S32 CLK )
{

	if( mode == VGA_Data )
	{
		g_lhorizontalpix = 640;
		g_lverticalpix = 480;
		g_lhscalevec = 2;
		g_lvscalevec = 2;
	}
	else if( mode == HVGA_Data )
	{
		g_lhorizontalpix = 640;
		g_lverticalpix = 240;
		g_lhscalevec = 2;
		g_lvscalevec = 0;
	}
	else
	{
		g_lhorizontalpix = 320;
		g_lverticalpix = 240;
		g_lhscalevec = 0;
		g_lvscalevec = 0;
	}
	if( type == S_RGB )
		g_lhorizontalclknum = ((g_lhorizontalpix << 1) + g_lhorizontalpix ) << CLK;
	else if( type == S_RGBDM)
		g_lhorizontalclknum = ( g_lhorizontalpix << 2 ) << CLK;
	else
		g_lhorizontalclknum = g_lhorizontalpix << CLK;
}

void Init_TFTLcd( S32 Panel_Sel, S32 type, S32 mode, S32 fb_fmt )
{	
	int i;

	*(U32*)0x88210034 = 0;
	for(i=0;i<2000;i++);
	*(U32*)0x88210034 = 3;
	for(i=0;i<0xffff; i++);
	for(i=0;i<0xffff; i++);

	*P_BUFCTRL_MODE_CTRL3	= 0x1;//PPU_P2L_EN;

	switch(Panel_Sel)
	{
		
		
		case AUO_6 :			
			calculate_act_area( type, mode, CK_135 );
			*P_TFT_FRAME_FMT1 = fb_fmt;
			//Hor_Time_Setting( g_lhorizontalclknum, 48, 128, 96 );
			//Ver_Time_Setting( g_lverticalpix, 3, 6, 10 );
			Hor_Time_Setting( 1056, 16, 224, 48 );
			Ver_Time_Setting( 288, 3, 15, 1 );			
			Data_seq_Setting( type, 0, 0, O_RGB, E_RGB );
				
			//Dis_area_Setting( 0, 0, g_lhorizontalpix, 0 );
			Dis_area_Setting( 0, 0, 512, 16 );		
			TFT_Ctrl_Setting( TFT_EN, g_lvscalevec, g_lhscalevec, CK_135, INT_DEN );
						
			break;	
			
		case TDO_20:			// TDO 2.0" 052
			calculate_act_area( type, mode, CK_27 );
			*P_TFT_FRAME_FMT1 = fb_fmt;
			if( type == S_RGBDM )
			{	
				Hor_Time_Setting( g_lhorizontalclknum, 40, 240, 10 );
				Ver_Time_Setting( g_lverticalpix, 1, 21, 1 );			
				Data_seq_Setting( type, 0, 0, O_RGB, E_RGB );
			}	
			else if ( type == CCIR601_M640 || type == CCIR601_M720 )	
			{	
				Hor_Time_Setting( g_lhorizontalclknum, 36, 240, 10 );
				Ver_Time_Setting( g_lverticalpix, 1, 21, 1 );
				Data_seq_Setting( type, dis_YCbCr, V0Y0U0Y1, 0, 0 );			
			}	
				
			Dis_area_Setting( 0, 0, g_lhorizontalpix, 0 );		
			TFT_Ctrl_Setting( TFT_EN, g_lvscalevec, g_lhscalevec, CK_27, INT_DEN );
		
			spi_mst(0x08, 0x00);			
			break;	
		
		case A036QN01 :			//AUO 3.6" Stripe (051)
			calculate_act_area( type, mode, CK_27 );
			*P_TFT_FRAME_FMT1 = fb_fmt;
		
			Hor_Time_Setting( g_lhorizontalclknum, 196, 196, 10 );
			Ver_Time_Setting( g_lverticalpix, 200, 13, 3 );
			Data_seq_Setting( type, 0, 0, O_RGB, E_RGB );
				
			Dis_area_Setting( 0, 0, g_lhorizontalpix, 0 );
			TFT_Ctrl_Setting( TFT_EN, g_lvscalevec, g_lhscalevec, CK_27, INT_DEN );
			break;
			
		case A036QN02 :			//AUO 3.6" Stripe (052)			
			
			calculate_act_area( type, mode, CK_27 );
			*P_TFT_FRAME_FMT1 = fb_fmt;
			if( type == S_RGB )
			{
				Hor_Time_Setting( g_lhorizontalclknum, 515, 241, 10 );
				Ver_Time_Setting( g_lverticalpix, 1, 21, 1 );
				Data_seq_Setting( type, 0, 0, O_RGB, E_GBR );
			}
			else if( type == S_RGBDM )
			{
				Hor_Time_Setting( g_lhorizontalclknum, 515, 241, 10 );
				Ver_Time_Setting( g_lverticalpix, 1, 21, 1 );
				Data_seq_Setting( type, 0, 0, O_RGB, E_RGB );
			}
			else if( type == CCIR656_M720 || type == CCIR656_M640 )
			{
				//Hor_Time_Setting( g_lhorizontalclknum, 112, 324, 10);
				Hor_Time_Setting( g_lhorizontalclknum, 124, 156, 10);
				//Hor_Time_Setting( g_lhorizontalclknum, 124, 140, 10);
				Ver_Time_Setting( g_lverticalpix, 2, 21, 9 );
				Data_seq_Setting( type, dis_YCbCr, U0Y0V0Y1, 0, 0 );
			}
			
			//Dis_area_Setting( 0, 0, g_lhorizontalpix, 0 );
			Dis_area_Setting( 0, 0, 320, 0 );
			TFT_Ctrl_Setting( TFT_EN, g_lvscalevec, g_lhscalevec, CK_27, INT_DEN );
			
			if( type == S_RGB )
			{
				spi_mst(0x04, 0x07);
				spi_mst(0x06, 0x15);
				spi_mst(0x07, 0xf1);
			}
			else if( type == S_RGBDM )
			{
				spi_mst(0x10, 0xc8);
				spi_mst(0x00, 0xbf);
				spi_mst(0x34, 0x10);
				spi_mst(0x84, 0x98);
				spi_mst(0x60, 0x80);
				spi_mst(0x70, 0x88);
				spi_mst(0xc1, 0x00);
			}
			else if(  type == CCIR656_M720 || type == CCIR656_M640 )
			{

				spi_mst(0x00, 0x3f);
				spi_mst(0x10, 0xee);
				spi_mst(0x60, 0x80);
				spi_mst(0x70, 0x88);
				spi_mst(0x30, 0x10);
				spi_mst(0x20, 0x80);
				spi_mst(0x84, 0x98);
				spi_mst(0xc1, 0x00);
			}
		
			break;
		
					
		case A024CN02:			//AUO 2.36" (052)		
			calculate_act_area( type, mode, CK_27 );
			*P_TFT_FRAME_FMT1 = fb_fmt;
			Hor_Time_Setting( g_lhorizontalclknum, 200, 249, 10 );
			Ver_Time_Setting( g_lverticalpix, 10, 16, 4 );			
			Data_seq_Setting( type, 0, 0, O_RGB, E_RGB );
				
			Dis_area_Setting( 0, 0, g_lhorizontalpix, 0 );		
			TFT_Ctrl_Setting( TFT_EN, g_lvscalevec, g_lhscalevec, CK_27, INT_DEN );		
//			spi_mst(0x00, 0x0f);			
			break;	
		
						
		case GPLS024:			//Gaintplus 2.36" (051)		
		
			//calculate_act_area( type, mode, CK_27 );		
			g_lhorizontalpix = 160;		//480dots
			g_lverticalpix = 240;		//234 dots
			g_lhscalevec = 0;
			g_lvscalevec = 0;
			g_lhorizontalclknum = 480;
		
			*P_TFT_FRAME_FMT1 = fb_fmt;
			Hor_Time_Setting( g_lhorizontalclknum, 5, 100, 1 );
			Ver_Time_Setting( g_lverticalpix, 12, 16, 1 );			
			
			Data_seq_Setting( type, 0, 0, O_RGB, E_GBR );
				
			Dis_area_Setting( 0, 0, 160, 160 );		
			TFT_Ctrl_Setting( TFT_EN, g_lvscalevec, g_lhscalevec, CK_27, INT_DEN );
			
			spi_mst(0x00, 0x0f);			
			break;	
			
		case A025BN01:			//AUO 2.5"  ( 052 + CCIR656 )
				
			calculate_act_area( type, mode, CK_27 );
			*P_TFT_FRAME_FMT1 = fb_fmt;	
			if( type == S_RGB )
			{
			}
			else if( type == S_RGBDM )
			{
				Hor_Time_Setting( g_lhorizontalclknum, 103, 261, 1 );
				Ver_Time_Setting( g_lverticalpix, 12, 12, 1 );	
				Data_seq_Setting( type, 0, 0, O_RGB, E_RGB );
			}
			else if( type == CCIR656_M720 || type == CCIR656_M640 )
			{
				Hor_Time_Setting( g_lhorizontalclknum, 154, 260, 1 );
				Ver_Time_Setting( g_lverticalpix, 12, 12, 1 );
				Data_seq_Setting( type, dis_YCbCr, U0Y0V0Y1, 0, 0 );
			}

			Dis_area_Setting( 0, 0, 320, 0 );
			TFT_Ctrl_Setting( TFT_EN, g_lvscalevec, g_lhscalevec, CK_27, INT_DEN );
				
			if( type == S_RGB )
			{	
			}
			else if( type == S_RGBDM )
			{
				spi_mst(0x10, 0x11);		
				spi_mst(0x00, 0x3f);
			}
			else if( type == CCIR656_M720 || type == CCIR656_M640 )
			{
				spi_mst(0x10, 0x13);
				spi_mst(0x00, 0x3f);	
			}
		
			break;	
						
		case A025DL01:			//AUO 2.5" LTPS ( 051+052+CCIR656 )
			calculate_act_area( type, mode, CK_27 );
			*P_TFT_FRAME_FMT1 = fb_fmt;
			if( type == S_RGB )
			{
				Hor_Time_Setting( g_lhorizontalclknum, 515, 241, 10 );
				Ver_Time_Setting( g_lverticalpix, 1, 21, 1 );
				Data_seq_Setting( type, 0, 0, O_RGB, E_GBR );
			}
			else if( type == S_RGBDM )
			{
				Hor_Time_Setting( g_lhorizontalclknum, 79, 241, 10 );
				Ver_Time_Setting( g_lverticalpix, 1, 21, 1 );
				Data_seq_Setting( type, 0, 0, O_RGB, E_RGB );
			}
			else if( type == CCIR656_M720 || type == CCIR656_M640 )
			{
				Hor_Time_Setting( g_lhorizontalclknum, 112, 324, 10 );
				Ver_Time_Setting( g_lverticalpix, 2, 21, 9 );
				Data_seq_Setting( type, dis_YCbCr, U0Y0V0Y1, 0, 0 );
			}
			
			//Dis_area_Setting( 0, 0, g_lhorizontalpix, 0 );
			Dis_area_Setting( 0, 0, 320, 0 );
			TFT_Ctrl_Setting( TFT_EN, g_lvscalevec, g_lhscalevec, CK_27, INT_DEN );
			
			if( type == S_RGB )
			{
				spi_mst(0x04, 0x07);
				spi_mst(0x06, 0x15);
				spi_mst(0x07, 0xf1);
			}
			else if( type == S_RGBDM )
			{
				spi_mst(0x04, 0x17);
				spi_mst(0x06, 0x15);
				spi_mst(0x07, 0xf1);
			}
			else if(  type == CCIR656_M720 || type == CCIR656_M640 )
			{
	//			spi_mst(0x05, 0x00);
				spi_mst(0x04, 0x57);
				spi_mst(0x0c, 0x66);
			}
			spi_mst(0x08, 0x07);
			spi_mst(0x05, 0x77);

			break;
			case TS35ND2501:
			calculate_act_area( type, mode, CK_675 );
//			*P_TFT_DM = 0;
			*P_TFT_FRAME_FMT1 = fb_fmt;
			Hor_Time_Setting(g_lhorizontalclknum,0x5, 249,10);
//				Hor_Time_Setting(g_lhorizontalclknum, 200, 5, 10);
			Ver_Time_Setting( g_lverticalpix, 1,24, 1 );
//			Ver_Time_Setting( g_lverticalpix, 10, 16, 0x10004  );
			Data_seq_Setting(  type, 0, 0,  O_RGB, E_RGB );
			Dis_area_Setting( 0, 0, g_lhorizontalpix, 0 );		
			TFT_Ctrl_Setting( TFT_EN, g_lvscalevec, g_lhscalevec, CK_675 ,TFT_DEN);  // TFT_DEN );
				*P_TFT_FRAME_FMT2 = 1;
	
		break;
		}
}		

⌨️ 快捷键说明

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