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

📄 lcd_test.c

📁 三星 s3c6400测试代码
💻 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_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 + -