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