📄 lcd.c
字号:
/********************************************************************************
*
* 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 + -