📄 lcd_test.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_test.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 <string.h>
#include <stdlib.h>
#include "lcd.h"
#include "def.h"
#include "library.h"
#include "glib.h"
#include "uart.h"
#include "intc.h"
#include "camera.h"
#include "post.h"
#include "Power_test.h"
#include "QVGA_24bpp_Image.h"
#include "SmileAgain.h"
#include "autumn.h"
//Static Global Variabls
static LCD_WINDOW eBgWin, eFgWin;
static LCD_WINDOW eFgWinArray_Rev[2], eBgWin_Rev;
static LCD_INT_SYS eLcdCpuifInt;
static CSPACE eBgBpp;
static CSPACE eFgBpp, eFgArgbBpp;
static CSPACE ePalDataBpp, ePalBpp;
static CSPACE eWinBpp[5];
static CSPACE eFgBppArray_Rev[2], eBgBpp_Rev;
static bool bIsRev = false;
static bool bIsAllWin = false;
static u32 uCount;
static u32 uCmdVal[12];
CPU_AUTO_CMD_RATE eCpuAutoCmdRate;
CPU_COMMAND_MODE eCpuCmdMode;
static u32 uLcdFbAddr = LCD_FRAMEBUFFER_ST;
static volatile bool bPreviewDone, bCodecDone;
static POST oPost;
static CSPACE eSrcDataFmt;
static u32 uLcdHSz, uLcdVSz;
static u32 uMidImgHSz, uMidImgVSz;
static u32 uMidStartX, uMidStartY;
static u32 uMidScaledHSz, uMidScaledVSz;
static u32 uImgHSz, uImgVSz;
static u32 uSimpleTest;
///////////////////////////////////////////////////////////
//LCD Test Top Item
void LCD_Test(void);
static void TestRgbIf(void);
static void TestCpuIf(void);
//Set Items
static void SetRgbBpp(void);
static void SetArgbBpp(void);
static void SetAllWinBpp(void);
static void SetPaletteBppAndWin(void);
static void SetWinOfFgAndBg(void);
static void SelectReverseWins(void);
//LCD Test Functions
//RGB I/F
static void DisBasicRgb(void);
static void VirtualScreen(void);
static void ColorMap(void);
static void ColorKey(void);
static void BlendingPerPlane(void);
static void BlendingPerPixel(void);
static void DisIntRgb(void);
static void DoubleBuffering(void);
static void AutoDoubleBuffering(void);
static void Palette(void);
static void NonPaletteBpp(void);
static void Swap(void);
static void WvgaDis(void);
static void VDMABurstLength(void);
static void ParallelBGR(void);
static void SerialRGB(void);
static void Interlace(void);
static void EintAliasing(void);
static void GPIOMuxing(void);
//static void YUV422Out(void);
static void VgaDis(void);
//CPU I/F
static void DisBasicCpu(void);
static void PartialDis(void);
static void AutoNormalManualCmd(void);
static void NormalNAutoCmd(void);
static void ManualRead(void);
static void DisIntCpuIf(void);
static void Dithering(void);
static void ByPass(void);
static void OutputDataFormat(void);
//static void FrmVsync(void);
//Camera Local I/F
static void CameraLocalPath(void);
//Post Local I/F
static void PostLocalPath(void);
static void PostSetCscTypeDmaToFifo(void);
///////////////////////////////////////////////////////////
// ISRs for LCD Controller
void __irq Isr_LCD_I80Int(void);
void __irq Isr_LCD_I80Int1(void);
void __irq Isr_LCD_FrameInt(void);
void __irq Isr_LCD_FifoInt(void);
void __irq Isr_LCD_FifoEmptyInt(void);
//ISR for CAMERA I/F
void __irq Isr_MSDMA_PreviewDone(void);
void __irq Isr_MSDMA_CodecDone(void);
//ISR for External Int.
void __irq Isr_ExtInt9(void);
///////////////////////////////////////////////////////////
void LCD_Test(void)
{
int i=0, nSel;
char pcBgBppStr[50], pcBgPalBppStr[50];
char pcFgBppStr[50], pcFgArgbBppStr[50];
char pcBgBppStr_Rev[50];
char pcFgBppStr_Rev[2][50];
char pcBppStr_All[5][50];
const testFuncMenu lcd_function[]=
{
0, "Exit\n",
TestRgbIf, "LCD Controller RGB I/F Test",
TestCpuIf, "LCD Controller CPU I/F Test",
SetRgbBpp, "Select RGB16 or 24 bpp for BG and FG",
SetArgbBpp, "Select RGB16 or 24 bpp for BG, and ARGB16 or ARGB24 bpp for FG",
SetAllWinBpp, "Select Bpp for Win0 ~ Win4 ",
SetPaletteBppAndWin, "Select Palette Depth and Palette Bpp",
SetWinOfFgAndBg, "Select Window for BG and FG",
SelectReverseWins, "Select Window for BG, FG1, and FG2, and RGB16 or 24bpp",
0, 0
};
bIsRev = false;
bIsAllWin = false;
eBgWin = WIN0;
eFgWin = WIN1;
#if (LCD_MODULE_TYPE == LTP700WV_RGB ||LCD_MODULE_TYPE ==LTE480WV_RGB)
eBgBpp = RGB24;
eFgBpp = RGB24;
eFgArgbBpp = ARGB24;
#else
eBgBpp = RGB16;
eFgBpp = RGB16;
eFgArgbBpp = ARGB16;
#endif
nSel = (int) LCD_CPUIF_CS;
if(nSel == 0)
eLcdCpuifInt = LCD_SYSMAIN_INT;
else
eLcdCpuifInt = LCD_SYSSUB_INT;
ePalBpp = PAL8;
ePalDataBpp = RGB16;
eWinBpp[0] = RGB24;
eWinBpp[1] = RGB16;
eWinBpp[2] = PAL4;
eWinBpp[3] = PAL2;
eWinBpp[4] = PAL1;
eBgBpp_Rev = RGB16;
eFgBppArray_Rev[0] = RGB24;
eFgBppArray_Rev[1] = RGB16;
eBgWin_Rev = WIN2;
eFgWinArray_Rev[0] = WIN1;
eFgWinArray_Rev[1] = WIN0;
while (1)
{
Disp("\n");
for (i=0; (int)(lcd_function[i].desc)!=0; i++)
{
Disp("%2d: %s\n", i,lcd_function[i].desc);
}
Disp("========================================================================\n");
if (bIsRev == false && bIsAllWin == false)
{
ConvertCSpaceToString(eBgBpp, pcBgBppStr);
ConvertCSpaceToString(ePalBpp, pcBgPalBppStr);
ConvertCSpaceToString(eFgBpp, pcFgBppStr);
ConvertCSpaceToString(eFgArgbBpp, pcFgArgbBppStr);
Disp("< Currnet Background : WINDOW %d >\n", (int)eBgWin);
Disp("< Current Foreground : WINDOW %d >\n", (int)eFgWin);
Disp("< Current Background's RGB BPP : %s >\n", pcBgBppStr);
Disp("< Current Background's PAL BPP : %s >\n", pcBgPalBppStr);
Disp("< Current Foreground's RGB BPP : %s >\n", pcFgBppStr);
Disp("< Current Foreground's ARGB BPP : %s >\n", pcFgArgbBppStr);
}
else if (bIsRev == true)
{
ConvertCSpaceToString(eBgBpp_Rev, pcBgBppStr_Rev);
ConvertCSpaceToString(eFgBppArray_Rev[0], pcFgBppStr_Rev[0]);
ConvertCSpaceToString(eFgBppArray_Rev[1], pcFgBppStr_Rev[1]);
Disp("< Currnet Background : WINDOW %d >\n", (int)eBgWin_Rev);
Disp("< Current Foreground1: WINDOW %d >\n", (int)eFgWinArray_Rev[0]);
Disp("< Current Foreground2: WINDOW %d >\n", (int)eFgWinArray_Rev[1]);
Disp("< Current Background's RGB BPP : %s >\n", pcBgBppStr_Rev);
Disp("< Current Foreground1's RGB BPP : %s >\n", pcFgBppStr_Rev[0]);
Disp("< Current Foreground2's RGB BPP : %s >\n", pcFgBppStr_Rev[1]);
}
else if (bIsAllWin == true)
{
int i;
for (i=0; i<5; i++)
{
ConvertCSpaceToString(eWinBpp[i], pcBppStr_All[i]);
if (i==0)
Disp("< Currnet Background : WINDOW 0, BPP: %s >\n", pcBppStr_All[i]);
else
Disp("< Currnet Foreground%d : WINDOW %d, BPP: %s >\n", i, i, pcBppStr_All[i]);
}
}
Disp("========================================================================\n");
Disp("\nSelect the function to test : ");
nSel = GetIntNum();
Disp("\n");
if (nSel == 0)
break;
if (nSel>0 && nSel<(sizeof(lcd_function)/8-1))
(lcd_function[nSel].func)();
}
}
static void TestRgbIf(void)
{
int i=0, nSel;
char pcBgBppStr[50], pcBgPalBppStr[50];
char pcFgBppStr[50], pcFgArgbBppStr[50];
char pcBgBppStr_Rev[50];
char pcFgBppStr_Rev[2][50];
char pcBppStr_All[5][50];
const testFuncMenu lcd_rgbif_function[]=
{
0, "Exit\n",
DisBasicRgb, "Basic Display via RGB IF",
VirtualScreen, "Virtual Screen/Soft Scrolling Test",
ColorMap, "Color Map Test",
ColorKey, "Color Key Test",
BlendingPerPlane, "Blending Per Plane Test",
BlendingPerPixel, "Blending Per Pixel Test",
DisIntRgb, "Display Interrupt Test",
DoubleBuffering, "Manual Double Buffering Test (Using Frame Int.)",
AutoDoubleBuffering, "Auto Double Buffering Test",
Palette, "Palette Test",
NonPaletteBpp, "18bpp(Non-Palette) Test",
Swap, "Swap Test",
VDMABurstLength, "Video DMA Burst Length Test",
WvgaDis, "Display WVGA Image",
VgaDis, "Display VGA Image",
ParallelBGR, "Simple Parallel BGR Test",
SerialRGB, "Simple Serial RGB/BGR Test",
CameraLocalPath, "Local Input Test From Camera Preview/Codec Path",
PostLocalPath, "Local Input Test From Post Path",
Interlace, "Interlace Test",
Dithering, "Dithering Test",
EintAliasing, "Ext Int Aliasing Test",
GPIOMuxing, "GPIO Mux Control Test",
//YUV422Out, "YUV 422 Out Port Test",
0, 0
};
LCD_SetPort();
LCD_InitLDI((CPUIF_LDI)LCD_CPUIF_CS);
while (1)
{
Disp("\n");
for (i=0; (int)(lcd_rgbif_function[i].desc)!=0; i++)
{
Disp("%2d: %s\n", i, lcd_rgbif_function[i].desc);
}
Disp("========================================================================\n");
if (bIsRev == false && bIsAllWin == false)
{
ConvertCSpaceToString(eBgBpp, pcBgBppStr);
ConvertCSpaceToString(ePalBpp, pcBgPalBppStr);
ConvertCSpaceToString(eFgBpp, pcFgBppStr);
ConvertCSpaceToString(eFgArgbBpp, pcFgArgbBppStr);
Disp("< Currnet Background : WINDOW %d >\n", (int)eBgWin);
Disp("< Current Foreground : WINDOW %d >\n", (int)eFgWin);
Disp("< Current Background's RGB BPP : %s >\n", pcBgBppStr);
Disp("< Current Background's PAL BPP : %s >\n", pcBgPalBppStr);
Disp("< Current Foreground's RGB BPP : %s >\n", pcFgBppStr);
Disp("< Current Foreground's ARGB BPP : %s >\n", pcFgArgbBppStr);
}
else if (bIsRev == true)
{
ConvertCSpaceToString(eBgBpp_Rev, pcBgBppStr_Rev);
ConvertCSpaceToString(eFgBppArray_Rev[0], pcFgBppStr_Rev[0]);
ConvertCSpaceToString(eFgBppArray_Rev[1], pcFgBppStr_Rev[1]);
Disp("< Currnet Background : WINDOW %d >\n", (int)eBgWin_Rev);
Disp("< Current Foreground1: WINDOW %d >\n", (int)eFgWinArray_Rev[0]);
Disp("< Current Foreground2: WINDOW %d >\n", (int)eFgWinArray_Rev[1]);
Disp("< Current Background's RGB BPP : %s >\n", pcBgBppStr_Rev);
Disp("< Current Foreground1's RGB BPP : %s >\n", pcFgBppStr_Rev[0]);
Disp("< Current Foreground2's RGB BPP : %s >\n", pcFgBppStr_Rev[1]);
}
else if (bIsAllWin == true)
{
int i;
for (i=0; i<5; i++)
{
ConvertCSpaceToString(eWinBpp[i], pcBppStr_All[i]);
if (i==0)
Disp("< Currnet Background : WINDOW 0, BPP: %s >\n", pcBppStr_All[i]);
else
Disp("< Currnet Foreground%d : WINDOW %d, BPP: %s >\n", i, i, pcBppStr_All[i]);
}
}
Disp("========================================================================\n");
Disp("\nSelect the function to test : ");
nSel = GetIntNum();
Disp("\n");
if (nSel == 0)
{
#if (LCD_MODULE_TYPE == LTP700WV_RGB ||LCD_MODULE_TYPE ==LTE480WV_RGB)
LCD_ExitLTP700WV_RGB();
#else
LCD_SetAllWinOnOff(0);
LCD_Stop();
#endif
break;
}
if (nSel>0 && nSel<(sizeof(lcd_rgbif_function)/8-1))
(lcd_rgbif_function[nSel].func)();
}
}
static void TestCpuIf(void)
{
int i=0, nSel;
char pcBgBppStr[50], pcBgPalBppStr[50];
char pcFgBppStr[50], pcFgArgbBppStr[50];
char pcBgBppStr_Rev[50];
char pcFgBppStr_Rev[2][50];
char pcBppStr_All[5][50];
const testFuncMenu lcd_cpuif_function[]=
{
0, "Exit\n",
DisBasicCpu, "Basic Display via CPU IF",
AutoNormalManualCmd, "Command Test (Auto/Normal/Manual Mode) ",
NormalNAutoCmd, "Normal & Auto Command Mode Test ",
ManualRead, "Manual Read Test ",
PartialDis, "Partial Display",
DisIntCpuIf, "Display Interrupt Test (I80)",
VirtualScreen, "Virtual Screen/Soft Scrolling Test",
ColorMap, "Color Map Test",
ColorKey, "Color Key Test",
BlendingPerPlane, "Blending Per Plane Test",
ByPass, "ByPass",
OutputDataFormat, "Output Data Format (Parallel/Split Mode) Test",
//FrmVsync, "FRM & Vsync Signal Test",
0, 0
};
LCD_SetPort();
LCD_InitLDI((CPUIF_LDI)LCD_CPUIF_CS);
while (1)
{
Disp("\n");
for (i=0; (int)(lcd_cpuif_function[i].desc)!=0; i++)
{
Disp("%2d: %s\n", i, lcd_cpuif_function[i].desc);
}
Disp("========================================================================\n");
if (bIsRev == false && bIsAllWin == false)
{
ConvertCSpaceToString(eBgBpp, pcBgBppStr);
ConvertCSpaceToString(ePalBpp, pcBgPalBppStr);
ConvertCSpaceToString(eFgBpp, pcFgBppStr);
ConvertCSpaceToString(eFgArgbBpp, pcFgArgbBppStr);
Disp("< Currnet Background : WINDOW %d >\n", (int)eBgWin);
Disp("< Current Foreground : WINDOW %d >\n", (int)eFgWin);
Disp("< Current Background's RGB BPP : %s >\n", pcBgBppStr);
Disp("< Current Background's PAL BPP : %s >\n", pcBgPalBppStr);
Disp("< Current Foreground's RGB BPP : %s >\n", pcFgBppStr);
Disp("< Current Foreground's ARGB BPP : %s >\n", pcFgArgbBppStr);
}
else if (bIsRev == true)
{
ConvertCSpaceToString(eBgBpp_Rev, pcBgBppStr_Rev);
ConvertCSpaceToString(eFgBppArray_Rev[0], pcFgBppStr_Rev[0]);
ConvertCSpaceToString(eFgBppArray_Rev[1], pcFgBppStr_Rev[1]);
Disp("< Currnet Background : WINDOW %d >\n", (int)eBgWin_Rev);
Disp("< Current Foreground1: WINDOW %d >\n", (int)eFgWinArray_Rev[0]);
Disp("< Current Foreground2: WINDOW %d >\n", (int)eFgWinArray_Rev[1]);
Disp("< Current Background's RGB BPP : %s >\n", pcBgBppStr_Rev);
Disp("< Current Foreground1's RGB BPP : %s >\n", pcFgBppStr_Rev[0]);
Disp("< Current Foreground2's RGB BPP : %s >\n", pcFgBppStr_Rev[1]);
}
else if (bIsAllWin == true)
{
int i;
for (i=0; i<5; i++)
{
ConvertCSpaceToString(eWinBpp[i], pcBppStr_All[i]);
if (i==0)
Disp("< Currnet Background : WINDOW 0, BPP: %s >\n", pcBppStr_All[i]);
else
Disp("< Currnet Foreground%d : WINDOW %d, BPP: %s >\n", i, i, pcBppStr_All[i]);
}
}
Disp("========================================================================\n");
Disp("\nSelect the function to test : ");
nSel = GetIntNum();
Disp("\n");
if (nSel == 0)
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -