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

📄 lcd.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
		Assert(0);
	
	#endif
	
}

void LCD_InitDISPC(CSPACE eBpp, u32 uFbAddr, LCD_WINDOW eWin, bool bIsDoubleBuf)
{
	LCD_InitBase();
	LCD_InitWin(eBpp, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz,
		0, 0, uFbAddr, eWin, bIsDoubleBuf);
}

void LCD_InitDISPC1(u32 uHSize, u32 uVSize, CSPACE eBpp, u32 uFbAddr, LCD_WINDOW eWin, bool bIsDoubleBuf)
{
	LCD_InitBase1(uHSize, uVSize);
	LCD_InitWin(eBpp, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz,
		0, 0, uFbAddr, eWin, bIsDoubleBuf);
}

//------------------------------------------------------------
// Function Name : LCDC_GetFrmSz
//
// Function Desctiption :
//  This function turns lcd on
//
// Input :
//
// Output : 	
//
// Version : 
//------------------------------------------------------------
void LCD_GetFrmSz(u32* uFrmHSz, u32* uFrmVSz, LCD_WINDOW eWin)
{
	*uFrmHSz = oLcdc.m_uFrmHSz[eWin];
	*uFrmVSz = oLcdc.m_uFrmVSz[eWin];
}

//------------------------------------------------------------
// Function Name : LCD_Start
//
// Function Desctiption :
//  This function turns lcd on
//
// Input :
//
// Output :	
//
// Version : 
//------------------------------------------------------------
void LCD_Start(void)
{
	u32 uLcdCon;

	uLcdCon=Inp32(LCD_BASE+rVIDCON0);
	uLcdCon |= 0x3<<0;
	LcdcOutp32(rVIDCON0, uLcdCon);
}


//-----------------------------------------------------------
// Function Name : LCD_Stop
//
// Function Desctiption :
//  This function turns lcd off
//
// Input :
//
// Output :	
//
// Version : 
//-----------------------------------------------------------
void LCD_Stop(void)
{
	u32 uLcdCon;
		
	uLcdCon=Inp32(LCD_BASE+rVIDCON0);

	uLcdCon &= ~(0x3<<0);
	LcdcOutp32(rVIDCON0, uLcdCon);	
	
} 

void LCD_PerFrameOff(void)
{
	u32 uLcdCon;
		
	uLcdCon=Inp32(LCD_BASE+rVIDCON0);

	uLcdCon &= ~(0x1<<0);
	LcdcOutp32(rVIDCON0, uLcdCon);	
}


///////////////////////////////////////////////////////////////////
// Middle Layer
///////////////////////////////////////////////////////////////////

//------------------------------------------------------------
// Function Name : LCD_InitBase
//
// Function Desctiption :
//  This function sets essential values according to LCD Type
//
// Input : g_eSysLcd, global variable for lcd type
//
// Output : oLcdc, global struct for lcd
//
// Version : 
//------------------------------------------------------------
void LCD_InitBase(void)
{
	u32 uLcdCon;
	u32 uILcdIntCon;
	u32 uClkVal, uClkDir;
	u32 uVidconReg;
	u32 i;
	LCD_WINDOW eWin;
	CLK_SRC eVClkSrc;

	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)
		Disp("LCD Clock Source: HCLK\n");
		oLcdc.m_uVideoClockSource = CLKSEL_F_HCLK;	
		eVClkSrc = SRC_HCLK;

	#elif (LCD_CLOCK_SOURCE == LCLK_MOUT_EPLL)
		Disp("LCD Clock Source: EPLL OUT\n");
		oLcdc.m_uVideoClockSource = CLKSEL_F_SYSCON; 
		eVClkSrc = SRC_MOUT_EPLL;

	#elif (LCD_CLOCK_SOURCE == LCLK_DOUT_MPLL)
		Disp("LCD Clock Source: MPLL OUT\n");
		oLcdc.m_uVideoClockSource = CLKSEL_F_SYSCON; 
		eVClkSrc = SRC_DOUT_MPLL;

	#elif (LCD_CLOCK_SOURCE == LCLK_FIN_EPLL)
		Disp("LCD Clock Source: FIN\n");
		oLcdc.m_uVideoClockSource = CLKSEL_F_SYSCON; 
		eVClkSrc = SRC_FIN_EPLL;	

	#elif (LCD_CLOCK_SOURCE == LCLK_27M)
		Disp("LCD Clock Source: 27M\n");
		oLcdc.m_uVideoClockSource = CLKSEL_F_EXTCLK;
		eVClkSrc = SRC_27M;
	#endif
	
	#if (LCD_MODULE_TYPE == LTV350QV_RGB)
	
		oLcdc.m_uLcdHSz = 320;
		oLcdc.m_uLcdVSz = 240;
		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_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);
		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 | 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_InitBase1(u32 uLcdX, u32 uLcdY)
{
	u32 uLcdCon;
	u32 uILcdIntCon; 
	u32 uClkVal, uClkDir;
	u32 uVidconReg;
	u32 i;
	LCD_WINDOW eWin;
	CLK_SRC eVClkSrc;
	
	
	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 (LCD_MODULE_TYPE == LTV350QV_RGB)
	
		oLcdc.m_uLcdHSz = uLcdX;
		oLcdc.m_uLcdVSz = uLcdY;
		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 ); //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 = uLcdX;
		oLcdc.m_uLcdVSz = uLcdY;
		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);
		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));

⌨️ 快捷键说明

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