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

📄 lcd.c

📁 三星s3c2460开发板完整功能测试代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*****************************************
  NAME: lcd.c
  DESC: lcd test codes
  HISTORY:  2002.03.13:draft ver 0.0
 *****************************************/
#include <string.h>
#include <stdio.h>
#include "2460addr.h"
#include "2460lib.h"
#include "lcdlib.h"
#include "glib.h"
#include "lcd.h"
#include "..\bmp\DEMO256.h"
#include "..\bmp\sghx600qvga16.h"
#include "..\bmp\sghx600iqvga16.h"
#include "..\bmp\sghx600qvga18.h"
#include "..\bmp\sghx600iqqvga16.h"
#include "..\bmp\sghx600iqqvga18.h"
#include "..\bmp\sample_320_240.h"
#include "pll.h"


#define BGRTEST (FALSE)

void __irq Lcd_Int(void);

void SetLcdPort(void);
void ReturnLcdPort(void);
void Test_Lcd_PAR_8Bit_240320(void);
void Test_Lcd_PAR_8BitNoPalette_240320(void);
void Test_Lcd_PAR_16Bit565_240320(void);
void Test_Lcd_PAR_16Bit5551_240320(void);
void Test_Lcd_PAR_24Bit_240320(void);
void Test_Lcd_BGColorMap_240320(void);
void Test_Lcd_FGColorMap_240320(void);
void Test_Osd_240320_Blending(void);
void Test_Osd_16Bit565_240320_Colorkey(void);
void Test_Osd_16Bit565_240320_Compkey(void);
void Test_Osd_16Bit565_240320_Compkey_Direction(void);
void Test_Lcd_SER_8Bit_240320(void);
void Test_Lcd_SER_16Bit565_240320(void);
void Test_Lcd_SER_24Bit_240320(void);
void Test_Lcd_SER_Backlight(void);

void Test_Lcd_PAR_24Bit_Interrupt(void);
void Test_Lcd_SER_8Bit_240320_Pal(void);
void Test_Lcd_SER_Functions(void);

void Test_Lcd_PAR_16Bit_320240(void);	//added by Sue.060322

volatile unsigned int framecnt;
volatile unsigned int fifocnt;


void * lcd_function[][2]=
{
	(void *)Test_Lcd_PAR_16Bit_320240,					"[320x240] Parallel 16bpp basic test \n\n",

	(void *)Test_Lcd_8Bit_240320_On,					"[240x320] Parallel 8bpp Free Run    ",
	(void *)Test_Lcd_16Bit_240320_On,					"[240x320] Parallel 16bpp Free Run   ",
	(void *)Test_Lcd_24Bit_240320_On,					"[240x320] Parallel 24bpp Free Run   ",
	(void *)Test_Lcd_PAR_8Bit_240320,					"[240x320] Parallel 8bpp             ",
	(void *)Test_Lcd_PAR_8BitNoPalette_240320,			"[240x320] Parallel Non-palet 8bpp   ",
	(void *)Test_Lcd_PAR_16Bit565_240320,				"[240x320] Parallel 16bpp 565        ",
	(void *)Test_Lcd_PAR_16Bit5551_240320,				"[240x320] Parallel 16bpp 5551       ",
	(void *)Test_Lcd_PAR_24Bit_240320,					"[240x320] Parallel 24bpp            \n\n",
	
	(void *)Test_Lcd_BGColorMap_240320,					"BG Color Map 240x320                ",
	(void *)Test_Lcd_FGColorMap_240320, 				"FG Color Map 240x320                ",
	(void *)Test_Osd_240320_Blending,					"Osd Blending 240x320 all            ",
	(void *)Test_Osd_16Bit565_240320_Colorkey,			"Color Key test 240x320              ",
	(void *)Test_Osd_16Bit565_240320_Compkey,			"Compare Key Test 240x320            ",
	(void *)Test_Osd_16Bit565_240320_Compkey_Direction, "Compare Key Test with dir 240x320   \n\n",

	(void *)Test_Lcd_SER_8Bit_240320_On,				"[240x320] Serial 8bpp ON            ",
	(void *)Test_Lcd_SER_16Bit_240320_On,				"[240x320] Serial 16bpp ON           ",
	(void *)Test_Lcd_SER_24Bit_240320_On,				"[240x320] Serial 24bpp ON           ",
	(void *)Test_Lcd_SER_8Bit_240320,					"[240x320] Serial 8bpp               ",
	(void *)Test_Lcd_SER_16Bit565_240320,				"[240x320] Serial 16bpp              ",
	(void *)Test_Lcd_SER_24Bit_240320,					"[240x320] Serial 24bpp              ",
	(void *)Test_Lcd_SER_Backlight,						"[240x320] Serial Backlight          ",
	(void *)Test_Lcd_PAR_24Bit_Interrupt,				"[240x320] Parallel 24bpp interrupt  ",
	(void *)Test_Lcd_SER_8Bit_240320_Pal,				"[240x320] Serial 8bpp pallette      ",
	(void *)Test_Lcd_SER_Functions,						"[240x320] Serial function test      ",
	0,0
};

void LcdDisplayFunction(void)
{
	int i;
	
	i=0;	
	printf("\n\n");
	while(1)	{   //display menu
	    printf("%2d:%s",i,lcd_function[i][1]);
	    i++;
	    if((int)(lcd_function[i][0])==0) {
			printf("\n");
			break;
	    }
	    if((i%2)==0) printf("\n");
	}
}

void Ch28_LCD(void)
{
	int i;

	SetLcdPort();
	
	printf("\n----Test of LCD Controller----\n");

	//LCD Initializtion

	rPRIORITY1 &= ~(0x7);
	rPRIORITY1 |= 0x2;
	LcdBacklightOnOff(255); //Backlight on

	printf("If you want to test Post Processor, then you must download image to memory before testing\n");
	
	while(1) {
		LcdDisplayFunction();
		printf("\nSelect(Press Enter key to exit): ");
		i = GetIntNum();
		//printf("IN:%d.\n\n", i);
		if( i==(-1) ) break;
		
		if(i>=0 && (i<(sizeof(lcd_function)/8)) ) 
	    	( (void (*)(void)) (lcd_function[i][0]) )();	// execute selected function.
	}
	
	ReturnLcdPort();
}


void SetLcdPort(void)
{
	//Configure UART port
	rGPGCON = 0xaaaaaaaa;	// enable all uart channel [31:0]
	rGPGPU = 0xffff;	//Uart port pull-up disable [15:0]
}       


void ReturnLcdPort(void)
{       
	//Pop UART GPIO port configuration
	rGPGCON = 0;
	rGPGPU = 0;
}


void __irq Lcd_Int(void)
{

	rINTSUBMSK |= BIT_SUB_LCD_VSYNC|BIT_SUB_LCD_FIFO;

	if(rSUBSRCPND&(BIT_SUB_LCD_VSYNC))
	{
		rSUBSRCPND = BIT_SUB_LCD_VSYNC;
		printf("Frame Sync. Interrupte is occured!\n");
	}
	else if(rSUBSRCPND&(BIT_SUB_LCD_FIFO))
	{
		rSUBSRCPND = BIT_SUB_LCD_FIFO;
		printf("FIFO Interrupt is occured!\n");
	}
	else 
		printf("Strange Interrupt is occured!\n");
	
	ClearPending(BIT_LCD);//Clear Source Pending, Interrupt Pending	   

	rINTSUBMSK &= ~(BIT_SUB_LCD_VSYNC|BIT_SUB_LCD_FIFO);
}

void __irq Lcd_Int_DualBuffer(void)
{
	rINTSUBMSK|=BIT_SUB_LCD_VSYNC|BIT_SUB_LCD_FIFO|BIT_SUB_POST;

	framecnt++;

	rSUBSRCPND|=BIT_SUB_LCD_VSYNC; //Clear SUB Interrupt Source Pending.
	ClearPending(BIT_LCD);//Clear Source Pending, Interrupt Pending	   
	rINTSUBMSK&=~(BIT_SUB_LCD_VSYNC);
}

void __irq Lcd_Int_FGDualBuffer(void)
{
	rINTSUBMSK|=BIT_SUB_LCD_VSYNC;

	if((rLCDCON1>>20)&1)
		rLCDCON1&=(~(1<<20));
	else
		rLCDCON1=(rLCDCON1&~(1<<20))|(1<<20);
/*
	if((rLCDCON1>>20)&1)
		LcdSelectBuffer(FGBUFFER1);
	else
		LcdSelectBuffer(FGBUFFER2);
*/	
	rSUBSRCPND|=BIT_SUB_LCD_VSYNC; //Clear SUB Interrupt Source Pending.
	ClearPending(BIT_LCD);//Clear Source Pending, Interrupt Pending	   

}
void Test_Lcd_8Bit_240320_On(void)
{

//	DisplayType=MODE_PAR_8BIT_240320;
//	WhichFrameBuffer=BGBUFFER1;	
	int i,j,k;

	SetLcdPort();

	PaletteInit(PAL_565_8BPPBG); // Initialize 256 palette 
	LcdBGInit(MODE_PAR_8BIT_240320);
	GlibInit(MODE_PAR_8BIT_240320, BGBUFFER1);

	
	GlibClearScr(0);

	k=0;
	for(j=0; j<BG_YSIZE_240320; j++)
		for(i=0; i<BG_XSIZE_240320; i++)
			PutPixel(i,j,DEMO256[k++]);

	LcdEnvidOnOff(1); // Enable ENVID Bit

} 

void Test_Lcd_16Bit_240320_On(void)
{

//	DisplayType=MODE_PAR_8BIT_240320;
//	WhichFrameBuffer=BGBUFFER1;	
	int i,j,k;

	SetLcdPort();

	LcdBGInit(MODE_PAR_16BIT565_240320);
	GlibInit(MODE_PAR_16BIT565_240320, BGBUFFER1);

	
	GlibClearScr(0);

	k=0;
	for(j=0; j<BG_YSIZE_240320; j++)
		for(i=0; i<BG_XSIZE_240320; i++)
			PutPixel(i,j,sghx600iqvga16[k++]);
			//PutPixel(i,j,pqvga16bsm5[k++]);

	LcdEnvidOnOff(1); // Enable ENVID Bit

} 


void Test_Lcd_24Bit_240320_On(void)
{

	int i,j,k;

	SetLcdPort();

	LcdBGInit(MODE_PAR_24BIT_240320);
	GlibInit(MODE_PAR_24BIT_240320, BGBUFFER1);

	
	GlibClearScr(0);

	k=0;
	for(j=0; j<BG_YSIZE_240320; j++)
		for(i=0; i<BG_XSIZE_240320; i++)
			PutPixel(i,j,sghx600qvga18[k++]);

	LcdEnvidOnOff(1); // Enable ENVID Bit

} 


void Test_Lcd_PAR_8Bit_240320(void)
{
	int i,j,k;


	PaletteInit(PAL_565_8BPPBG); // Initialize 256 palette 
	LcdBGInit(MODE_PAR_8BIT_240320);
	GlibInit(MODE_PAR_8BIT_240320, BGBUFFER1);


	printf("[256 COLOR(8bit/1pixel) Parallel Mode LCD TEST]\n");

	GlibClearScr(0); // Fill the LCD panel with Black Color
	LcdEnvidOnOff(1); // Enable ENVID Bit
	getchar();

	GlibFilledRectangle(0, 0, BG_XSIZE_240320/2-1, BG_YSIZE_240320-1,51);
	GlibFilledRectangle(BG_XSIZE_240320/2 , 0, BG_XSIZE_240320-1, BG_YSIZE_240320-1,52);	
	printf("256 Color Parallel mode test 1. Press any key to continue!\n");
	getchar(); 
	
	GlibClearScr(0); // Fill the LCD panel with Black Color
	k=0;
	for(j=0; j<BG_YSIZE_240320; j+=16)
		for(i=0; i<BG_XSIZE_240320; i+=16)
			GlibFilledRectangle(i,j,i+15,j+15,(k++)%255);
	printf("256 Color Parallel mode test 2. Press any key to continue!\n");
	getchar();

	GlibClearScr(0); // Fill the LCD panel with Black Color
	k=0;
	for(j=0; j<BG_YSIZE_240320; j+=10)
		for(i=0; i<BG_XSIZE_240320; i+=8)
			GlibFilledRectangle(i, j, i+7, j+9, (k++)%255); 
	printf("256 Color Parallel mode test 3. Press any key to continue!\n");
	getchar(); 


	GlibClearScr(0); // Fill the LCD panel with Black Color
	//First Quarter
	GlibRectangle(0, 0, BG_XSIZE_240320-1, BG_YSIZE_240320-1, 255); //red
	GlibLine(0, 0, BG_XSIZE_240320-1, BG_YSIZE_240320-1, 3);//red
	GlibLine(0, BG_YSIZE_240320-1, BG_XSIZE_240320-1, 0, 3);//red
	//Second Quarter
	GlibFilledRectangle(BG_XSIZE_240320, 0, BG_XSIZE_240320+29, 29, 8);
	GlibFilledRectangle(BG_VXSIZE_240320-30, 0, BG_VXSIZE_240320-1, 29, 18);
	GlibFilledRectangle(BG_XSIZE_240320, BG_YSIZE_240320-30, BG_XSIZE_240320+29, BG_YSIZE_240320-1, 150);
	GlibFilledRectangle(BG_VXSIZE_240320-30, BG_YSIZE_240320-30, BG_VXSIZE_240320-1, BG_YSIZE_240320-1, 200);
	GlibRectangle(BG_XSIZE_240320, 0, BG_VXSIZE_240320-1, BG_YSIZE_240320-1, 255);
	GlibLine(BG_XSIZE_240320, 0, BG_VXSIZE_240320-1, BG_YSIZE_240320-1, 3);
	GlibLine(BG_XSIZE_240320, BG_YSIZE_240320-1, BG_VXSIZE_240320-1, 0, 3);
	//Third Quarter
	GlibRectangle(0, BG_YSIZE_240320, BG_XSIZE_240320-1, BG_VYSIZE_240320-1, 18);
	GlibLine(0, BG_YSIZE_240320, BG_XSIZE_240320-1, BG_YSIZE_240320+BG_YSIZE_240320/2, 255);
	GlibLine(0, BG_VYSIZE_240320-1, BG_XSIZE_240320-1, BG_YSIZE_240320+BG_YSIZE_240320/2, 255);
	GlibLine(0, BG_YSIZE_240320+BG_YSIZE_240320/2, BG_XSIZE_240320-1, BG_YSIZE_240320, 255);	
	GlibLine(0, BG_YSIZE_240320+BG_YSIZE_240320/2, BG_XSIZE_240320-1, BG_VYSIZE_240320-1, 255);	
	//Fourth Quarter
	GlibRectangle(BG_XSIZE_240320, BG_YSIZE_240320, BG_VXSIZE_240320-1, BG_VYSIZE_240320-1, 255);
	GlibLine(BG_XSIZE_240320, BG_YSIZE_240320, BG_XSIZE_240320+BG_XSIZE_240320/2, BG_VYSIZE_240320-1, 3);
	GlibLine(BG_VXSIZE_240320-1, BG_YSIZE_240320, BG_XSIZE_240320+BG_XSIZE_240320/2, BG_VYSIZE_240320-1, 3);
	GlibLine(BG_XSIZE_240320, BG_VYSIZE_240320-1, BG_XSIZE_240320+BG_XSIZE_240320/2, BG_YSIZE_240320, 3);
	GlibLine(BG_VXSIZE_240320-1, BG_VYSIZE_240320-1, BG_XSIZE_240320+BG_XSIZE_240320/2, BG_YSIZE_240320, 3);	

	printf("256 Color Parallel mode test for Virtual Screen. Press any key[ijkm\\r]!\n");
	MoveViewPort(MODE_PAR_8BIT_240320, BGBUFFER1);
	LcdMoveViewPort(0, 0, MODE_PAR_8BIT_240320, BGBUFFER1);
	LcdEnvidOnOff(0);
}


void Test_Lcd_PAR_8BitNoPalette_240320(void)
{
	int i,j,k;
	

	LcdBGInit(MODE_PAR_8BITNP_240320);
	GlibInit(MODE_PAR_8BITNP_240320, BGBUFFER1);
	
	printf("[256 COLOR(8bit/1pixel) Parallel Mode LCD TEST]\n");

	GlibClearScr(0); // Fill the LCD panel with Black Color
	LcdEnvidOnOff(1); // Enable ENVID Bit
	getchar();
	

	GlibClearScr(0); // Fill the LCD panel with Black Color
	GlibFilledRectangle(0, 0, BG_XSIZE_240320/2-1, BG_YSIZE_240320-1,51);
	GlibFilledRectangle(BG_XSIZE_240320/2 , 0, BG_XSIZE_240320-1, BG_YSIZE_240320-1,52);	
	printf("256 Color Parallel mode test 1. Press any key to continue!\n");
	getchar(); 
	
	GlibClearScr(0); // Fill the LCD panel with Black Color
	k=0;
	for(j=0; j<BG_YSIZE_240320; j+=16)
		for(i=0; i<BG_XSIZE_240320; i+=16)
			GlibFilledRectangle(i,j,i+15,j+15,(k++)%255);
	printf("256 Color Parallel mode test 2. Press any key to continue!\n");
	getchar();

	GlibClearScr(0); // Fill the LCD panel with Black Color
	k=0;
	for(j=0; j<BG_YSIZE_240320; j+=10)
		for(i=0; i<BG_XSIZE_240320; i+=8)
			GlibFilledRectangle(i, j, i+7, j+9, (k++)%255); 
	printf("256 Color Parallel mode test 3. Press any key to continue!\n");
	getchar(); 


	GlibClearScr(0); // Fill the LCD panel with Black Color
	//First Quarter
	GlibRectangle(0, 0, BG_XSIZE_240320-1, BG_YSIZE_240320-1, 255); //red
	GlibLine(0, 0, BG_XSIZE_240320-1, BG_YSIZE_240320-1, 3);//red
	GlibLine(0, BG_YSIZE_240320-1, BG_XSIZE_240320-1, 0, 3);//red
	//Second Quarter
	GlibFilledRectangle(BG_XSIZE_240320, 0, BG_XSIZE_240320+29, 29, 8);
	GlibFilledRectangle(BG_VXSIZE_240320-30, 0, BG_VXSIZE_240320-1, 29, 18);
	GlibFilledRectangle(BG_XSIZE_240320, BG_YSIZE_240320-30, BG_XSIZE_240320+29, BG_YSIZE_240320-1, 150);
	GlibFilledRectangle(BG_VXSIZE_240320-30, BG_YSIZE_240320-30, BG_VXSIZE_240320-1, BG_YSIZE_240320-1, 200);
	GlibRectangle(BG_XSIZE_240320, 0, BG_VXSIZE_240320-1, BG_YSIZE_240320-1, 255);
	GlibLine(BG_XSIZE_240320, 0, BG_VXSIZE_240320-1, BG_YSIZE_240320-1, 3);
	GlibLine(BG_XSIZE_240320, BG_YSIZE_240320-1, BG_VXSIZE_240320-1, 0, 3);
	//Third Quarter
	GlibRectangle(0, BG_YSIZE_240320, BG_XSIZE_240320-1, BG_VYSIZE_240320-1, 18);
	GlibLine(0, BG_YSIZE_240320, BG_XSIZE_240320-1, BG_YSIZE_240320+BG_YSIZE_240320/2, 255);
	GlibLine(0, BG_VYSIZE_240320-1, BG_XSIZE_240320-1, BG_YSIZE_240320+BG_YSIZE_240320/2, 255);
	GlibLine(0, BG_YSIZE_240320+BG_YSIZE_240320/2, BG_XSIZE_240320-1, BG_YSIZE_240320, 255);	
	GlibLine(0, BG_YSIZE_240320+BG_YSIZE_240320/2, BG_XSIZE_240320-1, BG_VYSIZE_240320-1, 255);	

⌨️ 快捷键说明

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