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

📄 lcd.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
		LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix

	#elif (LCD_MODULE_TYPE == LTV300GV_RGB)
		
		oLcdc.m_uLcdHSz = 640;
		oLcdc.m_uLcdVSz = 480;
		oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
		oLcdc.m_uDitherMode = RDITHPOS_5BIT|GDITHPOS_6BIT|BDITHPOS_5BIT;
		oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;
	
		LcdcOutp32(rVIDCON1, IHSYNC_INVERT | IVSYNC_INVERT |IVDEN_NORMAL);
		//LcdcOutp32(rVIDCON1, IHSYNC_NORMAL | IVSYNC_NORMAL |IVDEN_NORMAL);
		LcdcOutp32(rVIDTCON0, VBPDE(VBPD_LTV300GV) | VBPD(VBPD_LTV300GV) | VFPD(VFPD_LTV300GV) | VSPW(VSPW_LTV300GV));
		LcdcOutp32(rVIDTCON1, VFPDE(VFPD_LTV300GV) | HBPD(HBPD_LTV300GV) | HFPD(HFPD_LTV300GV) | HSPW(HSPW_LTV300GV));		
		LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
		LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix	

	#else
		Assert(0); // Not yet implemented.
	#endif

	LCD_Stop();
	
	//Check up LCD to turn off
	
	while (1)
	{
		uLcdCon=Inp32(LCD_BASE+rVIDCON0);
		if( (uLcdCon&0x03) == 0 ) // checking whether disable the video output and the Display control signal or not.
		break;
	}

	LCD_GetClkValAndClkDir(oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, &uClkVal, &uClkDir, eVClkSrc);

	uVidconReg =
		PROGRESSIVE | oLcdc.m_uVidOutFormat | SUB_16_MODE | MAIN_16_MODE | PNRMODE_RGB_P | CLKVALUP_ALWAYS |
		CLKVAL_F(uClkVal) | VCLKEN_DISABLE | CLKDIR_F(uClkDir) | oLcdc.m_uVideoClockSource |
		ENVID_DISABLE | ENVID_F_DISABLE;
	LcdcOutp32(rVIDCON0, uVidconReg);
	
	uILcdIntCon =Inp32(LCD_BASE+rVIDINTCON0);
	LcdcOutp32(rVIDINTCON0, uILcdIntCon | FRAMESEL0_BACK | FRAMESEL1_NONE | INTFRMEN_DISABLE |
				FIFOSEL_WIN0 | FIFOLEVEL_25 | INTFIFOEN_DISABLE | INTEN_DISABLE);

	LCD_SetAllWinOnOff(0); // Turn all windows off
	LCD_SetAllWinColorMapOnOff(0); // Turn all windows color map off
	LCD_SetAllWinColorKeyOnOff(0); // Turn all windows Color Key off

	for (i=1; i<5; i++)
	{
		eWin =
			(i == 1) ? WIN1 :
			(i == 2) ? WIN2 :
			(i == 3) ? WIN3 : WIN4;

		LCD_SetAlpha(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, eWin);
	}

}

void LCD_InitBase2(CLK_SRC eVclkSrc, PNR_MODE ePnrMode, CPU_OUTPUT_DATAFORMAT eCpuOutDataFormat)
{
	u32 uLcdCon;
	u32 uILcdIntCon;
	u32 uClkVal, uClkDir;
	u32 uVidconReg;
	u32 i;
	//CLK_SRC eVClkSrc;
	LCD_WINDOW eWin;
	
	oLcdc.m_bIsAutoBuf = false;
	oLcdc.m_uScanMode = 0; // progressive mode
	oLcdc.m_bIsLocalCalled[0] = false;
	oLcdc.m_bIsLocalCalled[1] = false;
	oLcdc.m_bIsLocalCalled[2] = false;

	#if (LCD_CLOCK_SOURCE == LCLK_HCLK)
		oLcdc.m_uVideoClockSource = CLKSEL_F_HCLK;	
		//eVClkSrc = SRC_HCLK;

	#elif (LCD_CLOCK_SOURCE == LCLK_MOUT_EPLL)
		oLcdc.m_uVideoClockSource = CLKSEL_F_SYSCON; 
		//eVClkSrc = SRC_MOUT_EPLL;

	#elif (LCD_CLOCK_SOURCE == LCLK_DOUT_MPLL)
		oLcdc.m_uVideoClockSource = CLKSEL_F_SYSCON; 
		//eVClkSrc = SRC_DOUT_MPLL;

	#elif (LCD_CLOCK_SOURCE == LCLK_FIN_EPLL)
		oLcdc.m_uVideoClockSource = CLKSEL_F_SYSCON; 
		//eVClkSrc = SRC_FIN_EPLL;	

	#elif (LCD_CLOCK_SOURCE == LCLK_27M)
		oLcdc.m_uVideoClockSource = CLKSEL_F_EXTCLK;
		//eVClkSrc = SRC_27M;
	#endif

	if(ePnrMode == PNR_Parallel_RGB)		oLcdc.m_uPnrMode = PNRMODE_RGB_P;
	else if(ePnrMode == PNR_Parallel_BGR)	oLcdc.m_uPnrMode = PNRMODE_BGR_P;	
	else if(ePnrMode == PNR_Serial_RGB)		oLcdc.m_uPnrMode = PNRMODE_RGB_S;
	else if(ePnrMode == PNR_Serial_BGR)		oLcdc.m_uPnrMode = PNRMODE_BGR_S; 

	if(eCpuOutDataFormat == CPU_16BIT)		
	{
		oLcdc.m_uI80MainOutDataFormat = MAIN_16_MODE;
		oLcdc.m_uI80SubOutDataFormat = SUB_16_MODE;
	}
	else if(eCpuOutDataFormat == CPU_16_2BIT)	
	{
		oLcdc.m_uI80MainOutDataFormat = MAIN_16PLUS2_MODE ;
		oLcdc.m_uI80SubOutDataFormat = SUB_16PLUS2_MODE ;
	}		
	else if(eCpuOutDataFormat == CPU_9_9BIT)
	{
		oLcdc.m_uI80MainOutDataFormat = MAIN_9PLUS9_MODE ;
		oLcdc.m_uI80SubOutDataFormat = SUB_9PLUS9_MODE ;
	}	
	else if(eCpuOutDataFormat == CPU_16_8BIT)
	{
		oLcdc.m_uI80MainOutDataFormat = MAIN_16PLUS8_MODE;
		oLcdc.m_uI80SubOutDataFormat = SUB_16PLUS8_MODE;
	}
	else if(eCpuOutDataFormat == CPU_18BIT)
	{
		oLcdc.m_uI80MainOutDataFormat = MAIN_18_MODE;
		oLcdc.m_uI80SubOutDataFormat = SUB_18_MODE;
	}	
	else if(eCpuOutDataFormat == CPU_8_8BIT)
	{
		oLcdc.m_uI80MainOutDataFormat = MAIN_8PLUS8_MODE;
		oLcdc.m_uI80SubOutDataFormat = SUB_8PLUS8_MODE;
	}	


	///////////////////////////////////////////////////////////////////////////////////////////////////////
	#if (LCD_MODULE_TYPE == LTV350QV_RGB)
	
		oLcdc.m_uLcdHSz = 320;
		oLcdc.m_uLcdVSz = 240;
		oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
		//oLcdc.m_uVidOutFormat = VIDOUT_TV; //To Test Free-Run  
		oLcdc.m_uDitherMode = RDITHPOS_8BIT|GDITHPOS_8BIT|BDITHPOS_8BIT;
		oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;

		LcdcOutp32(rVIDCON1, IHSYNC_INVERT | IVSYNC_INVERT  | IVDEN_INVERT); //Check 
		LcdcOutp32(rVIDTCON0, VBPDE(VBPD_LTV350QV) | VBPD(VBPD_LTV350QV) | VFPD(VFPD_LTV350QV) | VSPW(VSPW_LTV350QV));
		LcdcOutp32(rVIDTCON1, VFPDE(VFPD_LTV350QV) | HBPD(HBPD_LTV350QV) | HFPD(HFPD_LTV350QV) | HSPW(HSPW_LTV350QV));
		LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
		LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix

	#elif (LCD_MODULE_TYPE == LTS222QV_CPU)
	
		oLcdc.m_uLcdHSz = 240;
		oLcdc.m_uLcdVSz = 320;
		oLcdc.m_uVidOutFormat = 
						(LCD_CPUIF_CS == MAIN) ? VIDOUT_I80IF0: VIDOUT_I80IF1;
			
		LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));

	#elif (LCD_MODULE_TYPE == LTP700WV_RGB ||LCD_MODULE_TYPE ==LTE480WV_RGB)

		oLcdc.m_uLcdHSz = 800;
		oLcdc.m_uLcdVSz = 480;
		oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
		oLcdc.m_uDitherMode = RDITHPOS_8BIT|GDITHPOS_8BIT|BDITHPOS_8BIT;
		oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;

		LcdcOutp32(rVIDCON1, IHSYNC_INVERT | IVSYNC_INVERT  | IVDEN_NORMAL |IVCLK_RISE_EDGE); //Check 
		LcdcOutp32(rVIDTCON0, VBPDE(VBPD_LTP700WV) | VBPD(VBPD_LTP700WV) | VFPD(VFPD_LTP700WV) | VSPW(VSPW_LTP700WV));
		LcdcOutp32(rVIDTCON1, VFPDE(VFPD_LTP700WV) | HBPD(HBPD_LTP700WV) | HFPD(HFPD_LTP700WV) | HSPW(HSPW_LTP700WV));
		LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
		LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); 	//Fixed Dithering Matrix

	#elif (LCD_MODULE_TYPE == LTS222QV_SRGB)
	
		oLcdc.m_uLcdHSz = 240;
		oLcdc.m_uLcdVSz = 320;
		oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
		oLcdc.m_uDitherMode = RDITHPOS_5BIT|GDITHPOS_6BIT|BDITHPOS_5BIT;
		oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;

		LcdcOutp32(rVIDCON1, IVCLK_FALL_EDGE | IHSYNC_INVERT | IVSYNC_INVERT | IVDEN_NORMAL);
		LcdcOutp32(rVIDTCON0, VBPDE(0) | VBPD(VBPD_LTS222QV) | VFPD(VFPD_LTS222QV) | VSPW(VSPW_LTS222QV));
		LcdcOutp32(rVIDTCON1, VFPDE(0) | HBPD(HBPD_LTS222QV) | HFPD(HFPD_LTS222QV) | HSPW(HSPW_LTS222QV));
		LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
		LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix	

	#elif (LCD_MODULE_TYPE == LTV300GV_RGB)
		
		oLcdc.m_uLcdHSz = 640;
		oLcdc.m_uLcdVSz = 480;
		oLcdc.m_uVidOutFormat = VIDOUT_RGBIF;
		oLcdc.m_uDitherMode = RDITHPOS_5BIT|GDITHPOS_6BIT|BDITHPOS_5BIT;
		oLcdc.m_uDitherMode &= ~DITHERING_ENABLE;
	
		LcdcOutp32(rVIDCON1, IHSYNC_INVERT | IVSYNC_INVERT |IVDEN_NORMAL);
		//LcdcOutp32(rVIDCON1, IHSYNC_NORMAL | IVSYNC_NORMAL |IVDEN_NORMAL);
		LcdcOutp32(rVIDTCON0, VBPDE(VBPD_LTV300GV) | VBPD(VBPD_LTV300GV) | VFPD(VFPD_LTV300GV) | VSPW(VSPW_LTV300GV));
		LcdcOutp32(rVIDTCON1, VFPDE(VFPD_LTV300GV) | HBPD(HBPD_LTV300GV) | HFPD(HFPD_LTV300GV) | HSPW(HSPW_LTV300GV));		
		LcdcOutp32(rVIDTCON2, LINEVAL(oLcdc.m_uLcdVSz-1) | HOZVAL(oLcdc.m_uLcdHSz-1));
		LcdcOutp32(rDITHMODE, oLcdc.m_uDitherMode); // Fixed Dithering Matrix	
		
	#else
		Assert(0); // Not yet implemented.
	#endif

	LCD_Stop();
	
	//Check up LCD to turn off
	
	while (1)
	{
		uLcdCon=Inp32(LCD_BASE+rVIDCON0);
		if( (uLcdCon&0x03) == 0 ) // checking whether disable the video output and the Display control signal or not.
		break;
	}

	LCD_GetClkValAndClkDir(oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, &uClkVal, &uClkDir, eVclkSrc);

	uVidconReg =
		PROGRESSIVE | oLcdc.m_uVidOutFormat | oLcdc.m_uI80SubOutDataFormat | oLcdc.m_uI80MainOutDataFormat | oLcdc.m_uPnrMode | CLKVALUP_ALWAYS |
		CLKVAL_F(uClkVal) | VCLKEN_DISABLE | CLKDIR_F(uClkDir)| oLcdc.m_uVideoClockSource|
		ENVID_DISABLE | ENVID_F_DISABLE ;

	LcdcOutp32(rVIDCON0, uVidconReg);
	
	uILcdIntCon =Inp32(LCD_BASE+rVIDINTCON0);
	LcdcOutp32(rVIDINTCON0, uILcdIntCon | FRAMESEL0_BACK | FRAMESEL1_NONE | INTFRMEN_DISABLE |
				FIFOSEL_WIN0 | FIFOLEVEL_25 | INTFIFOEN_DISABLE | INTEN_DISABLE);

	LCD_SetAllWinOnOff(0); // Turn all windows off
	LCD_SetAllWinColorMapOnOff(0); // Turn all windows color map off
	LCD_SetAllWinColorKeyOnOff(0); // Turn all windows Color Key off

	for (i=1; i<5; i++)
	{
		eWin =
			(i == 1) ? WIN1 :
			(i == 2) ? WIN2 :
			(i == 3) ? WIN3 : WIN4;

		LCD_SetAlpha(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, eWin);
	}

}

//------------------------------------------------------------
// Function Name : LCD_InitWin
//
// Function Desctiption :
//
// Input :	eBpp, background bpp
//			uFrameH, horizontal size for each window
//			uFrameV, vertical size for each window
//			uX_Frame, frame buffer start x offset
//			uY_Frame, frame buffer start y offset
//			uViewH, horizontal view size for each window
//			uViewV, vertical view size for each window
//			uX_Lcd, view start x offset
//			uY_Lcd, view start y offset
//			uFbAddr, frame buffer start address
//			eWin, window number
//			bIsDoubleBuf, using double buffer or not ?
//
// Output :
//
// Version : 
//------------------------------------------------------------
void LCD_InitWin(CSPACE eBpp, 
				  u32 uFrameH, 
				  u32 uFrameV, 
				  u32 uX_Frame, 
				  u32 uY_Frame,  
				  u32 uViewH, 
				  u32 uViewV,
				  u32 uX_Lcd, 
				  u32 uY_Lcd, 
				  u32 uFbAddr, 
				  LCD_WINDOW eWin,
				  bool bIsDoubleBuf)
{
	u32 uOffset;
	//u32 uLineVal;
	u32 uBurstSize;

	if ( (eWin != WIN0 && eWin != WIN1) && bIsDoubleBuf == true )
		Assert(0); // In WIN2, WIN3 or WIN4, Double buffering can't be supported

	// Viewport size must be less than LCD size
	Assert(uViewH <= oLcdc.m_uLcdHSz);
	Assert(uViewV <= oLcdc.m_uLcdVSz);

	// Check (X,Y) coordinate is valid in LCD and Frame?
	Assert( ((uX_Frame + uViewH) <= uFrameH) && ((uY_Frame + uViewV) <= uFrameV) );
	Assert( (uX_Lcd + uViewH <= oLcdc.m_uLcdHSz) && (uY_Lcd + uViewV <= oLcdc.m_uLcdVSz) );

	// Double buffering is supported by only window 0 and window 1
	if ( ((eWin != WIN0) && (eWin != WIN1)) && (bIsDoubleBuf == true) )
		Assert(0);

	oLcdc.m_uFrmHSz[eWin] = uFrameH;
	oLcdc.m_uFrmVSz[eWin] = uFrameV;

	oLcdc.m_uViewHSz[eWin] = uViewH;
	oLcdc.m_uViewVSz[eWin] = uViewV;

	oLcdc.m_uLcdStX = uX_Lcd;
	oLcdc.m_uLcdStY = uY_Lcd;

	uOffset = oLcdc.m_uFrmHSz[eWin] - oLcdc.m_uViewHSz[eWin];

	oLcdc.m_uBytSwpMode = BYTSWP_DISABLE;		// BYTE swap disable
	oLcdc.m_uHawSwpMode = HAWSWP_DISABLE;		// Half-Word swap disable

	oLcdc.m_uMaxBurstLen = MAX_BURSTLEN_16WORD;		// DMA'burst max 16word burst
	oLcdc.m_uMinBurstLen = MIN_BURSTLEN_16WORD;		// DMA'burst min 16 word burst


	//Setting BPP, HW Swap, and Byte Swap
	if (eBpp == PAL1)
	{
		oLcdc.m_uBytes = 1;
		oLcdc.m_uBits = 4;
		Assert( !(uOffset%32) ); // Must keep to word-alignment
		oLcdc.m_uBppMode = BPPMODE_F_1BPP;

		oLcdc.m_uMaxBurstLen = MAX_BURSTLEN_4WORD;
		oLcdc.m_uMinBurstLen = MIN_BURSTLEN_16WORD;
	}
	else if (eBpp == PAL2)
	{
		oLcdc.m_uBytes = 1;
		oLcdc.m_uBits = 4;
		Assert( !(uOffset%16) ); // Must keep to word-alignment
		oLcdc.m_uBppMode = BPPMODE_F_2BPP;

		oLcdc.m_uMaxBurstLen = MAX_BURSTLEN_4WORD;
		oLcdc.m_uMinBurstLen = MIN_BURSTLEN_16WORD;
	}
	else if ( (eBpp == PAL4) && (eWin != WIN4) )
	{
		oLcdc.m_uBytes = 1;
		oLcdc.m_uBits = 2;

		Assert( !(uOffset%8) ); // Must keep to word-alignment
		oLcdc.m_uBppMode = BPPMODE_F_4BPP;

		oLcdc.m_uMaxBurstLen = MAX_BURSTLEN_4WORD;
		oLcdc.m_uMinBurstLen = MIN_BURSTLEN_16WORD;
	}

⌨️ 快捷键说明

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