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

📄 lcd.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/********************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for verifying functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------
* 
*	File Name : lcd.c
*  
*	File Description :
*
*	Author	: Yoh-Han Lee
*	Dept. : AP Development Team
*	Created Date : 2006/12/27
*	Version : 0.2
* 
*	History
*	- Created (Y.H.Lee, 2006/12/27)
*   - Release Ver 0.1 (Y.H.Lee, 2007/03/29)
*   - Release Ver 0.2 (Y.H.Lee, 2007/06/07)
********************************************************************************/

#include "lcd.h"
#include "def.h"
#include "library.h"
#include "uart.h"
#include "gpio.h"
#include "sysc.h"
#include "Glib.h"
#include "Intc.h"
#include "spi.h"

#include <string.h>
#include <stdlib.h>

LCDC oLcdc; 
SPI_channel *ch1;

u32 uFrameCount;

//////////////////////////////////////////////////////////////////////////////////////
// LCD API Functions
//////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////
// Top Layer
///////////////////////////////////////////////////////////////////
void LCD_SimpleBasicDisp(void)
{
	u32 uHSz, uVSz;
	
	#if (LCD_MODULE_TYPE== LTV350QV_RGB)
		Disp("Selected LCD Module Type: LTV350QV_RGB\n");
		uHSz=320;
		uVSz=240;
	
	#elif (LCD_MODULE_TYPE == LTS222QV_CPU)
		Disp("Selected LCD Module Type: LTS222QV_CPU\n");
		uHSz=240;
		uVSz=320;

	#elif (LCD_MODULE_TYPE == LTP700WV_RGB)
		Disp("Selected LCD Module Type: LTP700WV_RGB\n");
		uHSz=800;
		uVSz=480;	

	#elif (LCD_MODULE_TYPE == LTE480WV_RGB)
		Disp("Selected LCD Module Type: LTE480WV_RGB\n");
		uHSz=800;
		uVSz=480;	
	
	#else
		Assert(0);
	#endif

	LCD_SetPort();
	
	LCD_InitLDI((CPUIF_LDI)LCD_CPUIF_CS);
	
	LCD_InitBase2((CLK_SRC)LCLK_DOUT_MPLL, PNR_Parallel_RGB, CPU_16BIT);
	LCD_InitWin(RGB16, uHSz, uVSz, 0, 0, uHSz, uVSz, 0, 0, LCD_FRAMEBUFFER_ST, WIN0, false);
	LCD_SetWinOnOff(1, WIN0);
	LCD_GetFrmSz(&uHSz, &uVSz, WIN0);
	GLIB_InitInstance(LCD_FRAMEBUFFER_ST, uHSz, uVSz, RGB16);
	GLIB_DrawPattern(uHSz, uVSz);

	LCD_Start();
	
	Disp("\nIf you want to stop display, press any key\n");
	UART_Getc();
	
	LCD_SetAllWinOnOff(0);
	LCD_Stop();
	
}

//-----------------------------------------------------------
// Function Name :  LCD_SetPort
//
// Function Desctiption :
//
// Input :	
//
// Output :
//
// Version : 
//------------------------------------------------------------ 
void LCD_SetPort (void)
{

	///////////////////////////////////////////////////////////////////////////////
	(*(volatile unsigned *)0x7410800c)=0;	//Must be '0' for Normal-path instead of By-pass
	///////////////////////////////////////////////////////////////////////////////
	
	#if (LCD_MODULE_TYPE == LTV350QV_RGB)
		//Select LCD IF Pin Configure
		GPIO_SetLCDType(eRGBIF);
		//GPIO_SetLCDType(eHidden);	//To test Free-Run
		
		//Set LCD GPIO Port
		GPIO_SetFunctionAll(eGPIO_I, 0xaaaaaaaa, 2); //GPI[15..0]-> RGB VD[15..0]
		GPIO_SetFunctionAll(eGPIO_J, 0xaaaaaaaa, 2); //GPJ[7..0]-> RGB VD[23..16], GPJ[11..8]-> VCLK, VDEN, VSYNC, HSYNC

		//To test Free-Run
		//GPIO_SetFunctionEach(eGPIO_J, eGPIO_7, 0); //GPJ[7] -> VD[23]: Input
		//GPIO_SetPullUpDownEach(eGPIO_J, eGPIO_7, 0); //GPJ[7] -> Pull-down

		//Set PWM GPIO to control Back-light  Regulator  Shotdown Pin
		GPIO_SetFunctionEach(eGPIO_F, eGPIO_15, 1); //GPF[15] -> Output
		GPIO_SetDataEach(eGPIO_F, eGPIO_15 , 1); //GPF[15] -> High

		//Reset LDI
		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High
		GPIO_SetFunctionEach(eGPIO_N, eGPIO_5, 1); //GPN[5] -> Output
		Delay(1000);

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

		//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
		
	#elif (LCD_MODULE_TYPE == LTS222QV_CPU)
		//Select LCD IF Pin Configure
		GPIO_SetLCDType(eHOSTIF);

		//Set LCD GPIO Port
		GPIO_SetFunctionAll(eGPIO_I, 0xaaaaaaaa, 2); //GPI[15..0]-> SYS VD[15..0]
		GPIO_SetFunctionAll(eGPIO_J, 0xaaaaaaaa, 2); 
		//GPJ[1..0]-> SYS VD[17..16], GPJ[11..6]-> SYS_VSYNC, SYS_OEn, SYS_CSn_main, SYS_CSn_sub, SYS_RS, SYS_WEn

		//Set PWM GPIO to control Back-light  Regulator En Pin
		GPIO_SetFunctionEach(eGPIO_F, eGPIO_15, 1); //GPF[15] -> Output
		GPIO_SetDataEach(eGPIO_F, eGPIO_15 , 1); //GPF[15] -> High

		//Reset LDI
		//GPIO_SetFunctionEach(eGPIO_N, eGPIO_5, 1); //GPN[5] -> Output
		//GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High
		//Delay(1000);

		//Reset LDI
		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High
		GPIO_SetFunctionEach(eGPIO_N, eGPIO_5, 1); //GPN[5] -> Output
		Delay(1000);
		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 0); //GPN[5] -> Low
		Delay(100);
		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High
		Delay(100);

	#elif (LCD_MODULE_TYPE == LTP700WV_RGB ||LCD_MODULE_TYPE ==LTE480WV_RGB)
		//Select LCD IF Pin Configure
		GPIO_SetLCDType(eRGBIF);
		
		//Set LCD GPIO Port
		GPIO_SetFunctionAll(eGPIO_I, 0xaaaaaaaa, 2); //GPI[15..0]-> RGB VD[15..0]
		GPIO_SetFunctionAll(eGPIO_J, 0xaaaaaaaa, 2); //GPJ[7..0]-> RGB VD[23..16], GPJ[11..8]-> VCLK, VDEN, VSYNC, HSYNC

		//Set PWM GPIO to control Back-light  Regulator  Shotdown Pin
		GPIO_SetFunctionEach(eGPIO_F, eGPIO_15, 1); //GPF[15] -> Output
		GPIO_SetDataEach(eGPIO_F, eGPIO_15 , 1); //GPF[15] -> High

		//Reset LDI
		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 0); //GPN[5] -> Low 
		GPIO_SetFunctionEach(eGPIO_N, eGPIO_5, 1); //GPN[5] -> Output
		
		Delay(100);

	#elif (LCD_MODULE_TYPE == LTS222QV_SRGB)	
		//Select LCD IF Pin Configure
		GPIO_SetLCDType(eRGBIF);
		
		//Set LCD GPIO Port
		GPIO_SetFunctionAll(eGPIO_I, 0xaaaaaaaa, 2); //GPI[15..0]-> RGB VD[15..0]
		GPIO_SetFunctionAll(eGPIO_J, 0xaaaaaaaa, 2); //GPJ[7..0]-> RGB VD[23..16], GPJ[11..8]-> VCLK, VDEN, VSYNC, HSYNC

		//Set PWM GPIO to control Back-light  Regulator  Shotdown Pin
		GPIO_SetFunctionEach(eGPIO_F, eGPIO_15, 1); //GPF[15] -> Output
		GPIO_SetDataEach(eGPIO_F, eGPIO_15 , 1); //GPF[15] -> High

		//Reset LDI
		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High
		GPIO_SetFunctionEach(eGPIO_N, eGPIO_5, 1); //GPN[5] -> Output
		Delay(1000);

		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 0); //GPN[5] -> Low
		Delay(100);
		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High
		Delay(100);
		
		//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

	#elif (LCD_MODULE_TYPE == LTV300GV_RGB)
		//Select LCD IF Pin Configure
		GPIO_SetLCDType(eRGBIF);
		
		//Set LCD GPIO Port
		GPIO_SetFunctionAll(eGPIO_I, 0xaaaaaaaa, 2); //GPI[15..0]-> RGB VD[15..0]
		GPIO_SetFunctionAll(eGPIO_J, 0xaaaaaaaa, 2); //GPJ[7..0]-> RGB VD[23..16], GPJ[11..8]-> VCLK, VDEN, VSYNC, HSYNC

		// GPIO Control sequence is so sensitive. Follow the below sequence.
		//Reset low    LDI
		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 0); //GPN[5] -> Low 
		GPIO_SetFunctionEach(eGPIO_N, eGPIO_5, 1); //GPN[5] -> Output		

		//Pannel On
		//GPIO_SetFunctionEach(eGPIO_F, eGPIO_13, 1); //GPF[15] -> Output
		//GPIO_SetDataEach(eGPIO_F, eGPIO_13 , 1); //GPF[15] -> High
		Delay(1000);
		
		//Reset High
		GPIO_SetDataEach(eGPIO_N, eGPIO_5 , 1); //GPN[5] -> High
		Delay(1000);

		//BackLight On
		GPIO_SetFunctionEach(eGPIO_F, eGPIO_15, 1); //GPF[15] -> Output
		GPIO_SetDataEach(eGPIO_F, eGPIO_15 , 1); //GPF[15] -> High	

	#else
		Assert(0);
	#endif

}


void LCD_SetPort_ByPass(void)
{
	u32 i, j;
	
	(*(volatile unsigned *)0x7410800c)=0x8;	//Must be '1' for By-pass

	Disp("\nSelect LCD By-Pass Mode.\n");
	Disp("0: Chip Select Mode, 1: Address Decoding Mode\n");

	i = GetIntNum();	

	if(i==0)
	{
		Disp("\nSelect nCS Type.\n");
		Disp("0: Main_nCS, 1: Sub_nCS\n");
		
		j = GetIntNum();
	
		GPIO_SetFunctionAll(eGPIO_K, 0x22222222, 0x22222222);	//GPK[15:0] -> Host I/F Data[15:0]
		GPIO_SetFunctionAll(eGPIO_L, 0x0, 0x2200002);			//GPL[15:13] -> Host I/F Data[17:16]

		if (j==0)
		{
			Disp("Chip Select Mode: Main\n");
			GPIO_SetFunctionAll(eGPIO_M, 0x022020, 0x0); 
		}
		else
		{
			Disp("Chip Select Mode: Sub\n");
			GPIO_SetFunctionAll(eGPIO_M, 0x022200, 0x0); 
		}

		GPIO_SetConRegSleepAll(eGPIO_F, 0xffffffff);		
	}
	else
	{
		GPIO_SetFunctionAll(eGPIO_K, 0x22222222, 0x22222222);	//GPK[15:0] -> Host I/F Data[15:0]
		GPIO_SetFunctionAll(eGPIO_L, 0x2222222, 0x2222222);		//GPL[15:13] -> Host I/F Data[17:16]
		GPIO_SetFunctionAll(eGPIO_M, 0x022002, 0x0);

		GPIO_SetConRegSleepAll(eGPIO_F, 0xffffffff);
	}

	Disp("\nEnter Any Key To Exit. \n");
	UART_Getc();
	
}


//-----------------------------------------------------------
// Function Name :  LCD_InitLDI
//
// Function Desctiption :
//
// Input :	
//
// Output :
//
// Version : 
//------------------------------------------------------------ 
void LCD_InitLDI(CPUIF_LDI eLdiMode)
{
	
	#if (LCD_MODULE_TYPE== LTV350QV_RGB)
		LCD_InitLTV350QV_RGB();
	
	#elif (LCD_MODULE_TYPE == LTS222QV_CPU)
		LCD_SetI80Timing(CS_SETUP_TIME,WR_SETUP_TIME, WR_ACT_TIME, WR_HOLD_TIME, LCD_CPUIF_CS);		
		//LCD_SetAutoCmdRate(PER_TWO_FRM, LCD_CPUIF_CS);
		LCD_InitLTS222QV_CPU(eLdiMode);
		LCD_InitStartPosOnLcd(eLdiMode);
		//LCD_SetAutoCmdRate(DISABLE_AUTO_FRM, LCD_CPUIF_CS);

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

	#elif (LCD_MODULE_TYPE== LTS222QV_SRGB)
		LCD_InitLTS222QV_SRGB();
		LCD_InitStartPosOnLcd(LCD_CPUIF_CS);
	
	#elif (LCD_MODULE_TYPE== LTV300GV_RGB)	
		//Need not be initialized
	#else

⌨️ 快捷键说明

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