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

📄 lcd.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	else if ( (eBpp == PAL8) && ((eWin == WIN0) || (eWin == WIN1)) )
	{
		oLcdc.m_uBytes = 1;
		oLcdc.m_uBits = 1;
		Assert( !(uOffset%4) ); // Must keep to word-alignment
		oLcdc.m_uBppMode = BPPMODE_F_8BPP_PAL;
		oLcdc.m_uBytSwpMode = BYTSWP_ENABLE;
	}
	else if ( (eBpp == RGB8) && ((eWin == WIN1) || (eWin == WIN2)) )
	{
		oLcdc.m_uBytes = 1;
		oLcdc.m_uBits = 1;
		Assert( !(uOffset%4) ); // Must keep to word-alignment
		oLcdc.m_uBppMode = BPPMODE_F_8BPP_NOPAL;

		oLcdc.m_uBytSwpMode = BYTSWP_ENABLE;
	}
	else if (eBpp == RGB16)
	{
		oLcdc.m_uBytes = 2;
		oLcdc.m_uBits = 1;
		Assert( !(uOffset%2) ); // Must keep to word-alignment

		oLcdc.m_uBppMode = BPPMODE_F_16BPP_565;
		oLcdc.m_uHawSwpMode = HAWSWP_ENABLE;
	}
	else if (eBpp == ARGB16)
	{
		oLcdc.m_uBytes = 2;
		oLcdc.m_uBits = 1;
		Assert( !(uOffset%2) ); // Must keep to word-alignment

		oLcdc.m_uBppMode = BPPMODE_F_16BPP_A555;
		oLcdc.m_uHawSwpMode = HAWSWP_ENABLE;
	}
	else if (eBpp == RGB18)
	{
		oLcdc.m_uBytes = 4;
		oLcdc.m_uBits = 1;

		oLcdc.m_uBppMode = BPPMODE_F_18BPP_666;
	}
	else if (eBpp == RGB24)
	{
		oLcdc.m_uBytes = 4;
		oLcdc.m_uBits = 1;

		oLcdc.m_uBppMode = BPPMODE_F_24BPP_888;
	}
	else if (eBpp == ARGB24)
	{
		oLcdc.m_uBytes = 4;
		oLcdc.m_uBits = 1;

		oLcdc.m_uBppMode = BPPMODE_F_24BPP_A887;
	}
	else
	{
		Assert(0);
	}

	// Get offsetsize, pagewidth and lineVal
	if (oLcdc.m_uFrmHSz[eWin] >= oLcdc.m_uViewHSz[eWin])
	{
		oLcdc.m_uOffsetSz[eWin] = uOffset*oLcdc.m_uBytes/oLcdc.m_uBits;
		oLcdc.m_uPageWidth[eWin] = oLcdc.m_uViewHSz[eWin]*oLcdc.m_uBytes/oLcdc.m_uBits;

		// Offset size must be more than the burst size
		uBurstSize =
			(oLcdc.m_uMaxBurstLen == MAX_BURSTLEN_16WORD) ? 16*4 :
			(oLcdc.m_uMaxBurstLen == MAX_BURSTLEN_8WORD) ? 8*4 : 4*4;

		// Offset size must be more than the burst size
		Assert( oLcdc.m_uOffsetSz[eWin] == 0 || !(oLcdc.m_uOffsetSz[eWin]%4) );
		Assert(oLcdc.m_uPageWidth[eWin] > uBurstSize); // Page width must be more than burst size and be word-aligned

		//uLineVal = oLcdc.m_uViewVSz[eWin] - 1;
	} 
	else
	{
		Assert(0);
	}

	oLcdc.m_uImgStAddr[eWin] = uFbAddr;

	oLcdc.m_uFbStAddr[eWin] = uFbAddr + (oLcdc.m_uFrmHSz[eWin]*uY_Frame + uX_Frame)*oLcdc.m_uBytes/oLcdc.m_uBits;
	oLcdc.m_uFbEndAddr[eWin] = oLcdc.m_uFbStAddr[eWin] + (oLcdc.m_uOffsetSz[eWin]+oLcdc.m_uPageWidth[eWin])*(uFrameV);

	if ( (bIsDoubleBuf == true) && ((eWin == WIN0) || (eWin == WIN1)) )
	{
		oLcdc.m_uDoubleBufImgStAddr[eWin] = oLcdc.m_uImgStAddr[eWin] + oLcdc.m_uFrmHSz[eWin]*oLcdc.m_uFrmVSz[eWin]*oLcdc.m_uBytes/oLcdc.m_uBits;
		oLcdc.m_uDoubleBufStAddr[eWin] = oLcdc.m_uFbStAddr[eWin] + oLcdc.m_uFrmHSz[eWin]*oLcdc.m_uFrmVSz[eWin]*oLcdc.m_uBytes/oLcdc.m_uBits;
		oLcdc.m_uDoubleBufEndAddr[eWin] = oLcdc.m_uDoubleBufStAddr[eWin] + (oLcdc.m_uOffsetSz[eWin]+oLcdc.m_uPageWidth[eWin])*(uFrameV);
	}
	else if ( (bIsDoubleBuf == false) && ((eWin == WIN0) || (eWin == WIN1)) )
	{
		oLcdc.m_uDoubleBufStAddr[eWin] = oLcdc.m_uFbStAddr[eWin];
		oLcdc.m_uDoubleBufEndAddr[eWin] = oLcdc.m_uFbEndAddr[eWin];
	}

	LCD_InitWinRegs(eWin);

	// For back-ward compatibility LCDC V2.0
	if(eWin == WIN0)
		LCD_SetWinOnOff(1, WIN0); // first arguement == 1 -> turn on window
}


void LCD_InitDISPCForFifoIn(LCD_LOCAL_INPUT eInLocal, LCD_WINDOW eWin)
{
	LCD_InitBase2((CLK_SRC)LCLK_DOUT_MPLL, PNR_Parallel_RGB, CPU_16BIT);
	LCD_InitWinForFifoIn(eInLocal, eWin);
}


//-----------------------------------------------------------
// Function Name :  LCD_InitLTV350QV
//
// Function Desctiption :
//
// Input :	
//
// Output :
//
// Version : 
//------------------------------------------------------------
void LCD_InitLTV350QV_RGB(void)
{	
	
	//Reset LCD Module
	//GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 0); //GPN[5] -> Low
	//Delay(100);	//Delay about 10ms
	//GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High	

	/*
	//Config SPI GPIO Port
	GPIO_SetFunctionEach(eGPIO_C, eGPIO_5, 1); //GPC[5]:SPI_SCLK -> Output
	GPIO_SetFunctionEach(eGPIO_C, eGPIO_6, 1); //GPC[6]:SPI_MOSI -> Output
	GPIO_SetFunctionEach(eGPIO_C, eGPIO_7, 1); //GPC[7]:SPI_CS -> Output
	
	GPIO_SetPullUpDownEach(eGPIO_C, eGPIO_5, 0); //GPC[5]:SPI_SCLK -> Pull-up/down Disable
	GPIO_SetPullUpDownEach(eGPIO_C, eGPIO_6, 0); //GPC[6]:SPI_MOSI -> Pull-up/down Disable
	GPIO_SetPullUpDownEach(eGPIO_C, eGPIO_7, 0); //GPC[7]:SPI_CS -> Pull-up/down Disable
	Delay(50); //Delay about 5ms
	*/

	//Set DEN, DCLK, and DSERI to High 
	LCD_DEN_Hi;
	LCD_DCLK_Hi;
	LCD_DSERI_Hi;	
	
	///////////////////////////////////////////////////////////////////
	// Init_Lcd_Function
	//////////////////////////////////////////////////////////////////

	LCD_PutCmdtoLTV350QV(0x01,0x001d);	
	LCD_PutCmdtoLTV350QV(0x02,0x0000);    
    LCD_PutCmdtoLTV350QV(0x03,0x0000);    
    LCD_PutCmdtoLTV350QV(0x04,0x0000);
    LCD_PutCmdtoLTV350QV(0x05,0x50a3);
    LCD_PutCmdtoLTV350QV(0x06,0x0000);
    LCD_PutCmdtoLTV350QV(0x07,0x0000);
    LCD_PutCmdtoLTV350QV(0x08,0x0000);
   	LCD_PutCmdtoLTV350QV(0x09,0x0000);
   	LCD_PutCmdtoLTV350QV(0x0a,0x0000);
   	LCD_PutCmdtoLTV350QV(0x10,0x0000);
   	LCD_PutCmdtoLTV350QV(0x11,0x0000);
   	LCD_PutCmdtoLTV350QV(0x12,0x0000);
   	LCD_PutCmdtoLTV350QV(0x13,0x0000);
   	LCD_PutCmdtoLTV350QV(0x14,0x0000);
   	LCD_PutCmdtoLTV350QV(0x15,0x0000);
   	LCD_PutCmdtoLTV350QV(0x16,0x0000);
   	LCD_PutCmdtoLTV350QV(0x17,0x0000);
   	LCD_PutCmdtoLTV350QV(0x18,0x0000);
   	LCD_PutCmdtoLTV350QV(0x19,0x0000);

	// Delay about 10ms
	Delay(100);
	
	///////////////////////////////////////////////////////////////////
	// Power Setting Function 1
	//////////////////////////////////////////////////////////////////
	LCD_PutCmdtoLTV350QV(0x09,0x4055);
	LCD_PutCmdtoLTV350QV(0x0a,0x0000);

	// Delay about 10ms
	Delay(100);
	
	/////////////////////////////////////////////////////////////////////
	// Power Setting 2
	/////////////////////////////////////////////////////////////////////

	LCD_PutCmdtoLTV350QV(0x0a,0x2000);

	// Delay about 50ms
	Delay(500);
	
	///////////////////////////////////////////////////////////////////
	// Instruction Setting
	///////////////////////////////////////////////////////////////////

	LCD_PutCmdtoLTV350QV(0x01,0x409d);
	LCD_PutCmdtoLTV350QV(0x02,0x0204);
	LCD_PutCmdtoLTV350QV(0x03,0x2100);
	LCD_PutCmdtoLTV350QV(0x04,0x1000);
	LCD_PutCmdtoLTV350QV(0x05,0x5003);
	LCD_PutCmdtoLTV350QV(0x06,0x0009);	//vbp
	LCD_PutCmdtoLTV350QV(0x07,0x000f);	//hbp
	LCD_PutCmdtoLTV350QV(0x08,0x0800);
	LCD_PutCmdtoLTV350QV(0x10,0x0000);
	LCD_PutCmdtoLTV350QV(0x11,0x0000);
	LCD_PutCmdtoLTV350QV(0x12,0x000f);
	LCD_PutCmdtoLTV350QV(0x13,0x1f00);
	LCD_PutCmdtoLTV350QV(0x14,0x0000);
	LCD_PutCmdtoLTV350QV(0x15,0x0000);
	LCD_PutCmdtoLTV350QV(0x16,0x0000);
	LCD_PutCmdtoLTV350QV(0x17,0x0000);
	LCD_PutCmdtoLTV350QV(0x18,0x0000);
	LCD_PutCmdtoLTV350QV(0x19,0x0000);

	// Delay about 50 ms
	Delay(500);

	LCD_Start();

	///////////////////////////////////////////////////////////////////
	// Display On Sequence
	///////////////////////////////////////////////////////////////////

	LCD_PutCmdtoLTV350QV(0x09,0x4a55);
	LCD_PutCmdtoLTV350QV(0x0a,0x2000);	
}


void LCD_InitLTP700WV_RGB(void)
{
	u32 uHSz, uVSz;
			
	LCD_InitBase2((CLK_SRC)LCLK_DOUT_MPLL, PNR_Parallel_RGB, CPU_16BIT);
	LCD_InitWin(RGB24, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, LCD_FRAMEBUFFER_ST, WIN0, false);
	LCD_SetWinOnOff(1, WIN0);
	
	LCD_GetFrmSz(&uHSz, &uVSz, WIN0);
	GLIB_InitInstance(LCD_FRAMEBUFFER_ST, uHSz, uVSz, RGB24);
	GLIB_DrawPattern(uHSz, uVSz);

	INTC_SetVectAddr(NUM_LCD1, Isr_LCD_FrameCount);
	LCD_InitInt(LCD_FRAME_INT, LCD_SYSMAIN_INT, FIFO_25, FIFO_INT_WIN0, FINT_VSYNC);
	LCD_EnableInt();
	INTC_Enable(NUM_LCD1);

	LCD_Start();
	
	uFrameCount=0;
	
	while(1)
	{
		if(uFrameCount == 3)
		break;
	}
	
	GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High	

	//LCD_SetAllWinOnOff(0);
	//LCD_Stop();
}


void LCD_ExitLTP700WV_RGB(void)
{
	u32 uHSz, uVSz;
			
	LCD_InitBase2((CLK_SRC)LCLK_DOUT_MPLL, PNR_Parallel_RGB, CPU_16BIT);
	LCD_InitWin(RGB24, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, oLcdc.m_uLcdHSz, oLcdc.m_uLcdVSz, 0, 0, LCD_FRAMEBUFFER_ST, WIN0, false);
	LCD_SetWinOnOff(1, WIN0);
	
	LCD_GetFrmSz(&uHSz, &uVSz, WIN0);
	GLIB_InitInstance(LCD_FRAMEBUFFER_ST, uHSz, uVSz, RGB24);
	GLIB_DrawPattern(uHSz, uVSz);

	INTC_SetVectAddr(NUM_LCD1, Isr_LCD_FrameCount);
	LCD_InitInt(LCD_FRAME_INT, LCD_SYSMAIN_INT, FIFO_25, FIFO_INT_WIN0, FINT_VSYNC);
	LCD_EnableInt();
	INTC_Enable(NUM_LCD1);

	GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 0); //GPN[5] -> Low

	LCD_Start();
	
	uFrameCount=0;
	
	while(1)
	{
		if(uFrameCount == 4)
		break;
	}

	LCD_SetAllWinOnOff(0);
	LCD_Stop();
}


//------------------------------------------------------------
// Function Name : LCD_SetI80Timing
//
// Function Desctiption : 
//  
//
// Input : 	
//
// Output :
//
// Version : 
//------------------------------------------------------------
void LCD_SetI80Timing(
	u8 ucCsSetupTime, u8 ucWrSetupTime, u8 ucWrActTime, u8 ucWrHoldTime,
	CPUIF_LDI eLdi)
{
	u32 uI80TimeReg, uI80TimeVal;

	LCD_SetClkSrc(SRC_HCLK);
	LCD_SetClkDirOrDiv(CLK_DIRECT);
	
	uI80TimeReg = (eLdi == MAIN) ? rI80IFCONA0 : rI80IFCONA1;

	uI80TimeVal=Inp32(LCD_BASE+uI80TimeReg);
	uI80TimeVal =
		LCD_CS_SETUP((u32)ucCsSetupTime) |
		LCD_WR_SETUP((u32)ucWrSetupTime) |
		LCD_WR_ACT((u32)ucWrActTime) |
		LCD_WR_HOLD((u32)ucWrHoldTime) |
		RSPOL_HIGH | SUCCEUP_TRIGGERED | SYSIFEN_ENABLE;	//Check the Bit1
	LcdcOutp32(uI80TimeReg, uI80TimeVal);
}


//------------------------------------------------------------
// Function Name : LCD_SetAutoCmdRate
//
// Function Desctiption :
//  
//
// Input :	
//
// Output :
//
// Version : 
//------------------------------------------------------------
void LCD_SetAutoCmdRate(CPU_AUTO_CMD_RATE eCmdRate, CPUIF_LDI eLdi)
{

⌨️ 快捷键说明

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