www.pudn.com > armexamples.rar > lcd.c


#include  
#include "2410addr.h" 
#include "2410lib.h" 
#include "def.h" 
#include "lcdlib.h" 
#include "glib.h" 
#include "lcd.h" 
 
void Lcd_Port_Init(void); 
void Lcd_Port_Return(void); 
void Lcd_Palette1Bit_Init(void); 
void Lcd_Palette8Bit_Init(void); 
void Lcd_Int_Frame() __attribute__ ((interrupt("IRQ"))); 
void Lcd_Int_Fifo() __attribute__ ((interrupt("IRQ"))); 
void Lcd_Int_Fifo_640480() __attribute__ ((interrupt("IRQ"))); 
 
unsigned save_rGPCUP,save_rGPCDAT,save_rGPCCON; 
unsigned save_rGPDUP,save_rGPDDAT,save_rGPDCON;  
unsigned lcd_count; 
 
static const unsigned short STN256pal[]={ 
	0x0b5e,0xce9a,0xffd9,0x9d99,0xb63a,0xae7c,0xdd71,0x6c57,0xfd4d,0x00ae,0x9c4d,0xb5f8,0xad96,0x0131,0x0176,0xefff,0xcedd,0x9556,0xe4bf,0x00b6,0x22b7,0x002b,0x89de,0x002c,0x57df,0xab5f,0x3031,0x14bf,0x797e,0x5391,0x93ab,0x7239,0x7453,0xafdf,0x71b9,0x8c92,0x014d,0x302e,0x5175,0x0029,0x0969,0x004e,0x2a6d,0x0021,0x3155,0x4b6e,0xd677,0xf6b6,0x9b5f,0x4bb5,0xffd5,0x0027,0xdfdf,0x74d8,0x1256,0x6bcd,0x9b08,0x2ab2,0xbd72,0x84b5,0xfe52,0xd4ad,0x00ad,0xfffc,0x422b,0x73b0,0x0024,0x5246,0x8e5e,0x28b3,0x0050,0x3b52,0x2a4a,0x3a74,0x8559,0x3356,0x1251,0x9abf,0x4034,0x40b1, 
	0x8cb9,0x00b3,0x5c55,0xdf3d,0x61b7,0x1f5f,0x00d9,0x4c59,0x0926,0xac3f,0x925f,0x85bc,0x29d2,0xc73f,0xef5c,0xcb9f,0x827b,0x5279,0x4af5,0x01b9,0x4290,0xf718,0x126d,0x21a6,0x515e,0xefbd,0xd75e,0x42ab,0x00aa,0x10b3,0x7349,0x63b5,0x61a3,0xaadf,0xcb27,0x87df,0x6359,0xc7df,0x4876,0xb5bc,0x4114,0xfe2e,0xef5e,0x65be,0x43b9,0xe5df,0x21c9,0x7d16,0x6abb,0x5c11,0x49f7,0xbc0b,0x9e1a,0x3b0f,0x202b,0xff12,0x821b,0x842f,0xbccf,0xdefb,0x8a3e,0x68fa,0xa4f1,0x38ae,0x28b7,0x21ad,0x31d7,0x0073,0x182b,0x1831,0x3415,0xbdf6,0x2dbf,0x0a5d,0xc73d,0x182c,0x293e,0x7b3d,0x643d,0x3cbd, 
	0x92dd,0x09d4,0x1029,0x7cdd,0x6239,0x182e,0x5aea,0x11eb,0x8abc,0x7bfa,0x00a7,0x2153,0x1853,0x1318,0x0109,0x54fa,0x72a7,0x89e3,0x01cf,0x3a07,0x7b17,0x1a14,0x2150,0x23dc,0x4142,0x1b33,0x00a4,0xf6df,0x08fc,0x18ae,0x3a7e,0x18d1,0xa51c,0xff5a,0x1a0f,0x28fa,0xdfbe,0x82de,0x60d7,0x1027,0x48fa,0x5150,0x6213,0x89d6,0x110d,0x9bbb,0xbedd,0x28e1,0x1925,0xf449,0xaa79,0xd5f4,0x693c,0x110a,0x2889,0x08a2,0x923d,0x10a6,0xd9bc,0x5b2e,0x32ec,0xcf7f,0x1025,0x2148,0x74b4,0x6d59,0x9d14,0x0132,0x00f0,0x56bf,0x00f1,0xffff,0x0173,0x0133,0x00b0,0x00b1,0xf7ff,0x08b1,0xfffe,0x08b0, 
	0x0171,0xf7bf,0x10f3,0xf7fe,0x08ef,0x1192,0xefbe,0x1131,0x2177,0xff9f,0x1116,0xffbc,0x5914,0x22ef,0xb285,0xa6df, 
}; 
 
void Lcd_Port_Init(void) 
{ 
    save_rGPCCON=rGPCCON; 
    save_rGPCDAT=rGPCDAT; 
    save_rGPCUP=rGPCUP; 
    save_rGPDCON=rGPDCON; 
    save_rGPDDAT=rGPDDAT; 
    save_rGPDUP=rGPDUP; 
    rGPCUP=0xffffffff; // Disable Pull-up register 
    rGPCCON=0xaaaaaaaa; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND  
    rGPDUP=0xffffffff; // Disable Pull-up register 
    rGPDCON=0xaaaaaaaa; //Initialize VD[23:8] 
} 
 
void Lcd_Port_Return(void) 
{ 
    rGPCCON=save_rGPCCON; 
    rGPCDAT=save_rGPCDAT; 
    rGPCUP=save_rGPCUP; 
    rGPDCON=save_rGPDCON; 
    rGPDDAT=save_rGPDDAT; 
    rGPDUP=save_rGPDUP; 
} 
 
void Lcd_Palette1Bit_Init(void) 
{ 
    U32 *palette; 
    palette=(U32 *)PALETTE; 
    *palette++=0x0; // Black 
    *palette=0xffff; // White 
} 
 
void Lcd_Palette8Bit_Init(void) 
{ 
    int i;	 
    U32 *palette; 
    rLCDCON5|=(1<<11); // 5:6:5 Palette Setting 
    palette=(U32 *)PALETTE; 
    for(i=0;i<256;i++) 
	*palette++=STN256pal[i]; 
} 
 
 
void Lcd_Int_Frame(void) 
{ 
    rLCDINTMSK|=3; // Mask LCD SUB Interrupt 
 
    // GPG4 is ....  
    rGPGDAT&=(~(1<<4)); // GPG4=Low 
    Delay(50); // GPG4=Low 
    rGPGDAT|=(1<<4); //GPG4=High 
 
    rLCDSRCPND=2; // Clear LCD SUB Interrupt source pending 
    rLCDINTPND=2; // Clear LCD SUB Interrupt pending 
    rLCDINTMSK&=(~(2)); // Unmask LCD FRAME Interrupt 
    ClearPending(BIT_LCD); 
} 
 
 
//240320 
void Lcd_Int_Fifo(void) 
{ 
    rLCDINTMSK|=3; // Mask LCD SUB Interrupt 
 
    if((lcd_count%20)==0) PRINTF("\n"); 
    PRINTF("."); 
    lcd_count++; 
 
    rLCDSRCPND=1; // Clear LCD SUB Interrupt source pending 
    rLCDINTPND=1; // Clear LCD SUB Interrupt pending 
    rLCDINTMSK&=(~(1)); // Unmask LCD FRAME Interrupt 
    ClearPending(BIT_LCD); 
} 
 
void Test_Lcd_Stn_1Bit(void) 
{ 
    int i,j; 
    Lcd_Port_Init(); 
    Lcd_Init(MODE_STN_1BIT); 
    Glib_Init(MODE_STN_1BIT); 
    Lcd_EnvidOnOff(1); // Enable ENVID Bit 
    PRINTF("[STN Mono(1bit/1pixel) LCD Test]\n");               
 
    Glib_ClearScr(0, MODE_STN_1BIT); 
    for(j=0;j31)) 
		    { 
		        Glib_FilledRectangle(i,j,i+19,j+79,((k%16)<<(4*(k/16)))); 
		        k++; 
		    } 
		    else 
		    { 
		        Glib_FilledRectangle(i,j,i+19,j+79,((k-(1+2*(k%16)))<<(4*(k/16)))); 
		        k++; 
		    } 
		} 
    PRINTF("CSTN 4K color mode test 1. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_CSTN_12BIT); 
    for(j=0;j<240;j++) 
		for(i=0;i<320;i++) 
		    PutPixel(i,j,((i/40)<<9)+((j/30)<<5)+(((j/15)%2)<<1)+((i/20)%2)); 
    PRINTF("CSTN 4K color mode test 2. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_CSTN_12BIT); 
    k=0; 
    for(i=160;i<480;i+=20) 
    	for(j=120;j<360;j+=15) 
    	{ 
    	    Glib_FilledRectangle(i,j,i+19,j+14,(((k&0xf)<<8)|((k%4)<<4)|(k&0xf0)) ); 
    	    k++; 
    	} 
 
    // #0		     
    // 00		     
    Glib_Rectangle(0,0,319,239,0xf00);    
    Glib_Line(0,0,319,239,0x0f0);         
    Glib_Line(0,239,319,0,0x00f); 
    // 0# 
    // 00 
    Glib_Rectangle(0+320,0,319+320,239,0xfff); 
    Glib_Line(0+320,0,319+320,239,0xfff);         
    Glib_Line(0+320,239,319+320,0,0xfff); 
    // 00 
    // #0 
    Glib_Rectangle(0,0+240,319,239+240,0xfff); 
    Glib_Line(0,0+240,319,239+240,0xfff);         
    Glib_Line(0,239+240,319,0+240,0xfff); 
    // 00 
    // 0# 
    Glib_Rectangle(0+320,0+240,319+320,239+240,0xfff); 
    Glib_Line(0+320,0+240,319+320,239+240,0xfff);      
    Glib_Line(0+320,239+240,319+320,0+240,0xfff); 
    Glib_Rectangle(50+320,50+240,269+320,189+240,0xfff); 
 
    PRINTF("Virtual Screen Test(CSTN 4K color). Press any key[ijkm\\r]!\n"); 
    MoveViewPort(MODE_CSTN_12BIT); 
    Lcd_MoveViewPort(0,0,MODE_CSTN_12BIT); 
    Lcd_CstnOnOff(0); // Disable ENVID Bit and GPB5 output 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_8Bit_240320(void) 
{ 
    int i,j,k; 
    Lcd_Port_Init(); 
    Lcd_Palette8Bit_Init(); // Initialize 256 palette  
    Lcd_Init(MODE_TFT_8BIT_240320); 
    Glib_Init(MODE_TFT_8BIT_240320); 
    Lcd_Lpc3600Enable(); // Enable LPC3600 
    Lcd_PowerEnable(0, 1); 
    PRINTF("[TFT 256 COLOR(8bit/1pixel) LCD TEST]\n"); 
    rTPAL = (1<<24)|((0xff)<<16); // Enable Temporary Palette : Red 
    Lcd_EnvidOnOff(1); // Enable ENVID Bit 
    PRINTF("TFT 256 color mode test 1. Press any key!\n"); 
    Uart_Getch();  
 
    Glib_ClearScr(0, MODE_TFT_8BIT_240320); // Fill the LCD panel with Black Color 
    k=0; 
    for(i=0;i<320;i+=20) 
		for(j=0;j<240;j+=15) 
		{  
		    Glib_FilledRectangle(j,i,j+14,i+19,(k%256)); 
		    k++; 
		} 
    rTPAL = 0; // Disable Temporary Palette 
    PRINTF("TFT 256 color mode test 2. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_TFT_8BIT_240320); // Fill the LCD panel with Black Color 
    k=0; 
    for(i=0;i<320;i+=10) 
		for(j=0;j<240;j+=10) 
		{  
		    Glib_FilledRectangle(j,i,j+9,i+9,(k%256)); 
		    k+=30; 
		} 
    PRINTF("TFT 256 color mode test 3. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_TFT_8BIT_240320); 
    k=0; 
    for(i=80;i<240;i+=10) 
    { 
    	for(j=60;j<180;j+=10) 
    	{ 
    	    Glib_FilledRectangle(j,i,j+9,i+9,k); 
    	    k++; 
    	} 
    } 
    Glib_Rectangle(0,0,239,319,255);    
    Glib_Line(0,0,239,319,255);         
    Glib_Line(0,319,239,0,255); 
     
    Glib_Rectangle(0+240,0,239+240,319,255); 
    Glib_Line(0+240,0,239+240,319,255);         
    Glib_Line(0+240,319,239+240,0,255); 
     
    Glib_Rectangle(0,0+320,239,319+320,255); 
    Glib_Line(0,0+320,239,319+320,255);         
    Glib_Line(0,319+320,239,0+320,255); 
     
    Glib_Rectangle(0+240,0+320,239+240,319+320,255); 
    Glib_Line(0+240,0+320,239+240,319+320,255);      
    Glib_Line(0+240,319+320,239+240,0+320,255); 
 
    Glib_Rectangle(10+240,10+320,480-11,640-11,255); 
 
    PRINTF("Virtual Screen Test(TFT 256 color). Press any key[ijkm\\r]!\n"); 
    MoveViewPort(MODE_TFT_8BIT_240320); 
    Lcd_MoveViewPort(0,0,MODE_TFT_8BIT_240320); 
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_16Bit_240320(void) 
{ 
    int i,j,k; 
    Lcd_Port_Init(); 
    Lcd_Init(MODE_TFT_16BIT_240320); 
    Glib_Init(MODE_TFT_16BIT_240320); 
    Lcd_Lpc3600Enable(); // Enable LPC3600 
    Lcd_PowerEnable(0, 1); 
    Lcd_EnvidOnOff(1); 
    PRINTF("[TFT 64K COLOR(16bit/1pixel) LCD TEST]\n"); 
 
    Glib_ClearScr(0, MODE_TFT_16BIT_240320); 
    Glib_FilledRectangle(0,0,239,159,0xf800);     
    Glib_FilledRectangle(0,160,239,320,0xf800);     
    PRINTF("TFT 64K color mode test 1. Press any key!\n"); 
    Uart_Getch();  	 
     
 
    Glib_ClearScr(0, MODE_TFT_16BIT_240320); 
    Glib_Rectangle(0,0,239,319,0x07e0);    
    Glib_FilledRectangle(0,0,20,20,65535);    
    Glib_Rectangle(220,300,239,319,65535);    
    Glib_Line(0,0,239,319,0x1f);         
    Glib_Line(239,0,0,319,0xf800); 
    PRINTF("TFT 64K color mode test 2. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_TFT_16BIT_240320); 
    k=0; 
    for(i=80;i<240;i+=10) 
    { 
    	for(j=60;j<180;j+=10) 
    	{ 
    	    Glib_FilledRectangle(j,i,j+9,i+9,k); 
    	    k++; 
    	} 
    } 
 
    Glib_Rectangle(0,0,239,319,65535);    
    Glib_Line(0,0,239,319,65535);         
    Glib_Line(0,319,239,0,65535); 
     
    Glib_Rectangle(0+240,0,239+240,319,255); 
    Glib_Line(0+240,0,239+240,319,255);         
    Glib_Line(0+240,319,239+240,0,255); 
     
    Glib_Rectangle(0,0+320,239,319+320,255); 
    Glib_Line(0,0+320,239,319+320,255);         
    Glib_Line(0,319+320,239,0+320,255); 
     
    Glib_Rectangle(0+240,0+320,239+240,319+320,255); 
    Glib_Line(0+240,0+320,239+240,319+320,255);      
    Glib_Line(0+240,319+320,239+240,0+320,255); 
    Glib_Rectangle(40+240,40+320,480-41,640-41,0x1f); 
 
    PRINTF("Virtual Screen Test(TFT 64K color). Press any key[ijkm\\r]!\n"); 
    MoveViewPort(MODE_TFT_16BIT_240320); 
    Lcd_MoveViewPort(0,0,MODE_TFT_16BIT_240320); 
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_8Bit_240320_On(void) 
{ 
    int i,j,k=0; 
    Lcd_Port_Init(); 
    Lcd_Palette8Bit_Init(); 
    Lcd_Init(MODE_TFT_8BIT_240320); 
    Glib_Init(MODE_TFT_8BIT_240320); 
    Lcd_Lpc3600Enable(); // Enable LPC3600 
    Lcd_PowerEnable(0, 1);     
    PRINTF("[TFT LCD(240x320 ,8bpp) WILL BE TURNED ON EVEN DURING OTHER TEST]\n"); 
    PRINTF("If you'd like to off the TFT LCD, then excute other LCD test program,\n");      
 
//    for(j=0;j<320;j++) 
//        for(i=0;i<240;i++) 
//            PutPixel(i,j,((int)DEMO256[k++])); 
             
    Lcd_EnvidOnOff(1); 
} 
 
 
void Test_Lcd_Tft_8Bit_240320_Bmp(void) 
{ 
    int i,j,k=0; 
    Lcd_Port_Init(); 
    Lcd_Palette8Bit_Init(); 
    Lcd_Init(MODE_TFT_8BIT_240320); 
    Glib_Init(MODE_TFT_8BIT_240320); 
    Lcd_Lpc3600Enable(); // Enable LPC3600 
    Lcd_PowerEnable(0, 1);     
    //Lcd_PowerEnable(0, 1); // Enable LCD_PWREN 
 
//    for(j=0;j<320;j++) 
//        for(i=0;i<240;i++) 
//            PutPixel(i,j,((int)DEMO256[k++])); 
 
    Lcd_EnvidOnOff(1); // Enable ENVID     
/* 
    PRINTF("Do you want to change palette(5:5:1->5:6:5)..........\n");         
    PRINTF("then press any key\n");         
    Uart_Getch(); 
    Lcd_EnvidOnOff(0); 
    PRINTF("One more ,please...\n"); 
    Uart_Getch();     
    Lcd_EnvidOnOff(1); 
    rLCDCON5|=(1<<11); // 5:6:5 Palette Setting 
*/ 
    PRINTF("Press any key to quit!\n");         
    Uart_Getch(); 
    Glib_ClearScr(0, MODE_TFT_8BIT_240320); 
    Delay(5000); 
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_8Bit_240320_IntFr(void) 
{ 
    int i,j,k=0; 
    Lcd_Port_Init(); 
    Lcd_Palette8Bit_Init(); 
    Lcd_Init(MODE_TFT_8BIT_240320); 
    Glib_Init(MODE_TFT_8BIT_240320); 
    Lcd_Lpc3600Enable(); // Enable LPC3600 
    Lcd_PowerEnable(0, 1);     
    rLCDCON5|=(1<<11); // 5:6:5 Palette Setting 
     
//    for(j=0;j<320;j++) 
//        for(i=0;i<240;i++) 
//            PutPixel(i,j,((int)DEMO256[k++])); 
 
    //--------LCD frame interrupt test---------------------------------------------------START 
    //The content of GPG4 is changed to OUTPUT('01').  
    //We will check the frame interrupt with using Logic Analyzer.  
    rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable 
    rGPGDAT=rGPGDAT&(~(1<<4))|(1<<4); // GPG4=High 
    rGPGCON=rGPGCON&(~(3<<8))|(1<<8); // GPG4=Output 
    
    pISR_LCD=(unsigned)Lcd_Int_Frame; 
    rINTMSK=~(BIT_LCD); 
    rLCDINTMSK=(1<<2)|(0<<1)|(1); // 8Words Trigger Level,Unmask Frame int,mask Fifo int 
    //--------LCD frame interrupt test-----------------------------------------------------END 
  
    Lcd_EnvidOnOff(1); // Enable ENVID     
    PRINTF("Press any key to quit!\n");         
    Uart_Getch(); 
    rLCDINTMSK|=3; // Mask LCD SUB Interrupt 
    rINTMSK|=(BIT_LCD); // Mask LCD INT 
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_8Bit_240320_IntFi(void) 
{ 
    int i,j,k=0; 
    Lcd_Port_Init(); 
    Lcd_Palette8Bit_Init(); 
    Lcd_Init(MODE_TFT_8BIT_240320); 
    Glib_Init(MODE_TFT_8BIT_240320); 
    Lcd_Lpc3600Enable(); // Enable LPC3600 
    Lcd_PowerEnable(0, 1);     
    rLCDCON5|=(1<<11); // 5:6:5 Palette Setting 
     
//    for(j=0;j<320;j++) 
//        for(i=0;i<240;i++) 
//            PutPixel(i,j,((int)DEMO256[k++])); 
 
    Lcd_EnvidOnOff(1); // Enable ENVID     
    //--------LCD FIFO interrupt test---------------------------------------------------START 
    pISR_LCD=(unsigned)Lcd_Int_Fifo; 
    rINTMSK=~(BIT_LCD); 
    rLCDINTMSK=(0<<2)|(1<<1)|(0); // 4Words Trigger Level,Mask Frame int,Unmask Fifo int 
    //--------LCD FIFO interrupt test-----------------------------------------------------END 
  
    PRINTF("Press any key to quit!\n");         
    Uart_Getch(); 
    rLCDINTMSK|=3; // Mask LCD SUB Interrupt 
    rINTMSK|=(BIT_LCD); // Mask LCD INT 
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
 
//640480 
void Lcd_Int_Fifo_640480(void) 
{ 
    int i; 
    rLCDINTMSK|=3; // Mask LCD SUB Interrupt 
 
    // GPG4 is ....  
    rGPGDAT&=(~(1<<4)); // GPG4=Low 
    for(i=0;i<1;i++); // GPG4=Low 
    rGPGDAT|=(1<<4); //GPG4=High 
 
    rLCDSRCPND=1; // Clear LCD SUB Interrupt source pending 
    rLCDINTPND=1; // Clear LCD SUB Interrupt pending 
    rLCDINTMSK&=(~(1)); // Unmask LCD FRAME Interrupt 
    ClearPending(BIT_LCD); 
} 
 
 
void Test_Lcd_Tft_1Bit_640480(void) 
{ 
    int i,j; 
    Lcd_Palette1Bit_Init(); 
    Lcd_Port_Init(); 
    Lcd_Init(MODE_TFT_1BIT_640480); 
    Glib_Init(MODE_TFT_1BIT_640480); 
    Lcd_PowerEnable(0, 1);     
    Lcd_EnvidOnOff(1); 
    PRINTF("[TFT Mono(1bit/1pixel) LCD TEST]\n"); 
    Glib_ClearScr(0,MODE_TFT_1BIT_640480); 
 
    rTPAL = (1<<24)|((0xff)<<8); // Enable Temporary Palette : Green 
    PRINTF("TFT Mono mode test 1. Press any key!\n"); 
    Uart_Getch();  	 
 
    rTPAL = 0; 
    Glib_FilledRectangle(0,0,639,239,1); 
    Glib_FilledRectangle(0,239,639,479,0);    
    PRINTF("TFT Mono mode test 2. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_FilledRectangle(0,0,319,479,1); 
    Glib_FilledRectangle(320,0,639,479,0);    
    PRINTF("TFT Mono mode test 3. Press any key!\n"); 
    Uart_Getch();  	 
 
    for(j=0;j>19)==2); 
    	*palette++=((U32)((p_red<<8)|(p_green<<6)|(p_blue<<3))); 
    	PRINTF("VSTATUS=%x\n",(rLCDCON5>>19)); 
    	PRINTF("cdata=%d\n",(int)cdata); 
    } 
    *palette=0x0;     
    Uart_Getch(); 
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_8Bit_640480_Bswp(void) 
{ 
    int k; 
    Lcd_Palette8Bit_Init(); 
    Lcd_Port_Init(); 
    Lcd_Init(MODE_TFT_8BIT_640480); 
    Glib_Init(MODE_TFT_8BIT_640480); 
    Lcd_EnvidOnOff(1); 
    Lcd_PowerEnable(0, 1); 
    rLCDCON5 &= 0x1ffffd;    //BSWP Disable 
    PRINTF("[TFT 256 COLOR(16bit/1pixel) BSWP TEST]\n"); 
 
    Glib_ClearScr(0, MODE_TFT_8BIT_640480); 
    Glib_Rectangle(0,0,639,479,0xff); 
    Glib_Rectangle(1,1,638,478,0x03); 
    Glib_Rectangle(0+100,0+100,639-100,479-100,0xff); 
    Glib_Rectangle(1+100,1+100,638-100,478-100,0x03); 
    Glib_Line(0,0,639,479,0xe0);      
    Glib_Line(639,0,0,479,0x1c); 
    PRINTF("TFT 256 color BSWP test. Press any key excet return!\n"); 
 
    while(Uart_Getch()!='\r') 
    { 
        rLCDCON5 &= 0x1ffffd;    //BSWP Disable 
        rLCDCON5 |= ((k%2)<<1);  //BSWP Enable 
        k++; 
    } 
 
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_16Bit_640480(void) 
{ 
    int i,j,k; 
    Lcd_Port_Init(); 
    Lcd_Init(MODE_TFT_16BIT_640480); 
    Glib_Init(MODE_TFT_16BIT_640480); 
    Lcd_PowerEnable(0, 1); 
    Lcd_EnvidOnOff(1); 
    PRINTF("[TFT 64K COLOR(16bit/1pixel) LCD TEST]\n"); 
 
    Glib_ClearScr(0, MODE_TFT_16BIT_640480); 
    Glib_FilledRectangle(0,0,639,479,0xf800);     
    PRINTF("TFT 64K color mode test 1. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_TFT_16BIT_640480); 
    Glib_Rectangle(0,0,639,479,0x07e0);    
    Glib_FilledRectangle(0,0,20,20,65535);    
    Glib_Rectangle(620,460,639,479,65535);    
    Glib_Line(0,0,639,479,0x1f);         
    Glib_Line(639,0,0,479,0xf800); 
    PRINTF("TFT 64K color mode test 2. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_TFT_16BIT_640480); 
    k=0; 
    for(i=160;i<480;i+=20) 
    	for(j=120;j<360;j+=15) 
    	{ 
	    	while((rLCDCON5>>19)==2); 
    	    Glib_FilledRectangle(i,j,i+19,j+14,k); 
    	    k+=500; 
    	} 
 
    // #0		     
    // 00		     
    Glib_Rectangle(0,0,319,239,65535);    
    Glib_Line(0,0,319,239,65535);         
    Glib_Line(0,239,319,0,65535); 
 
    // 0# 
    // 00 
    Glib_Rectangle(0+320,0,319+320,239,255); 
    Glib_Line(0+320,0,319+320,239,255);         
    Glib_Line(0+320,239,319+320,0,255); 
 
    // 00 
    // #0 
    Glib_Rectangle(0,0+240,319,239+240,255); 
    Glib_Line(0,0+240,319,239+240,255);         
    Glib_Line(0,239+240,319,0+240,255); 
 
    // 00 
    // 0# 
    Glib_Rectangle(0+320,0+240,319+320,239+240,255); 
    Glib_Line(0+320,0+240,319+320,239+240,255);      
    Glib_Line(0+320,239+240,319+320,0+240,255); 
    Glib_Rectangle(50+320,50+240,269+320,189+240,255); 
 
    PRINTF("TFT 64K color mode test 3. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_TFT_16BIT_640480); 
    k=0; 
    for(i=320;i<960;i+=40) 
    	for(j=240;j<720;j+=30) 
    	{ 
    	    Glib_FilledRectangle(i,j,i+39,j+29,k); 
    	    k+=500; 
    	} 
 
    // #0		     
    // 00		     
    Glib_Rectangle(0,0,639,479,65535);    
    Glib_Line(0,0,639,479,65535);         
    Glib_Line(0,479,639,0,65535); 
 
    // 0# 
    // 00 
    Glib_Rectangle(0+640,0,639+640,479,65535);    
    Glib_Line(0+640,0,639+640,479,65535);         
    Glib_Line(0+640,479,639+640,0,65535); 
 
    // 00 
    // #0 
    Glib_Rectangle(0,0+480,639,479+480,65535);    
    Glib_Line(0,0+480,639,479+480,65535);         
    Glib_Line(0,479+480,639,0+480,65535); 
 
    // 00 
    // 0# 
    Glib_Rectangle(0+640,0+480,639+640,479+480,65535);    
    Glib_Line(0+640,0+480,639+640,479+480,65535);         
    Glib_Line(0+640,479+480,639+640,0+480,65535); 
    Glib_Rectangle(50+640,50+480,639+640-50,479+480-50,65535);    
 
    PRINTF("Virtual Screen Test(TFT 64K color). Press any key[ijkm\\r]!\n"); 
    MoveViewPort(MODE_TFT_16BIT_640480); 
    Lcd_MoveViewPort(0,0,MODE_TFT_16BIT_640480); 
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_16Bit_640480_Hwswp(void) 
{ 
    int k; 
    Lcd_Port_Init(); 
    Lcd_Init(MODE_TFT_16BIT_640480); 
    Glib_Init(MODE_TFT_16BIT_640480); 
    Lcd_PowerEnable(0, 1); 
    Lcd_EnvidOnOff(1); 
    rLCDCON5 &= 0x1ffffe;    //HWSWP Disable 
    PRINTF("[TFT 64K COLOR(16bit/1pixel) HWSWP TEST]\n"); 
 
    Glib_ClearScr(0, MODE_TFT_16BIT_640480); 
    Glib_Rectangle(0,0,639,479,0xffff); 
    Glib_Rectangle(1,1,638,478,0xf800); 
    Glib_Rectangle(0+100,0+100,639-100,479-100,0xffff); 
    Glib_Rectangle(1+100,1+100,638-100,478-100,0xf800); 
    Glib_Line(0,0,639,479,0x7e0);      
    Glib_Line(639,0,0,479,0x1f); 
    PRINTF("TFT 64K color HWSWP test. Press any key excet return!\n"); 
 
    while(Uart_Getch()!='\r') 
    { 
        rLCDCON5 &= 0x1ffffe;    //HWSWP Disable 
        rLCDCON5 |= (k%2);       //HWSWP Enable 
        k++; 
    } 
 
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_1Bit_800600(void) 
{ 
    int i,j; 
    Lcd_Port_Init(); 
    Lcd_Palette1Bit_Init();  
    Lcd_Init(MODE_TFT_1BIT_800600); 
    Glib_Init(MODE_TFT_1BIT_800600); 
    PRINTF("[TFT Mono(1bit/1pixel) LCD TEST]\n"); 
 
    rTPAL = (1<<24)|((0xff)<<0); // Enable Temporary Palette : Blue 
//--------LCD FIFO interrupt test---------------------------------------------------START 
	Lcd_EnvidOnOff(1); // Enable ENVID    
	//The content of GPG4 is changed to OUTPUT('01').  
	//We will check the frame interrupt with using Logic Analyzer.  
	rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable 
	rGPGDAT=rGPGDAT&(~(1<<4))|(1<<4); // GPG4=High 
	rGPGCON=rGPGCON&(~(3<<8))|(1<<8); // GPG4=Output 
 
	pISR_LCD=(unsigned)Lcd_Int_Fifo_640480; 
	rINTMSK=~(BIT_LCD); 
	rLCDINTMSK=(0<<2)|(1<<1)|(0); // 4Words Trigger Level,Mask Frame int,Unmask Fifo int 
//        rLCDINTMSK=(1<<2)|(1<<1)|(0); // 8Words Trigger Level,Mask Frame int,Unmask Fifo int     
//        Lcd_EnvidOnOff(1); // Enable ENVID        
//--------LCD FIFO interrupt test-----------------------------------------------------END 
    PRINTF("TFT Mono mode test 1. Press any key!\n"); 
    Uart_Getch();  	 
 
    rTPAL = 0; // Disable TPAL 
    Glib_FilledRectangle(0,0,LCD_XSIZE_TFT_800600-1,LCD_YSIZE_TFT_800600-1,1); 
    PRINTF("TFT Mono mode test 2. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_FilledRectangle(200,200,LCD_XSIZE_TFT_800600-201,LCD_YSIZE_TFT_800600-201,0);    
    PRINTF("TFT Mono mode test 3. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_TFT_1BIT_800600); 
    Glib_Rectangle(200,200,SCR_XSIZE_TFT_800600-201,SCR_YSIZE_TFT_800600-201,1); 
     
    // #0		     
    // 00		     
    Glib_Rectangle(0,0,LCD_XSIZE_TFT_800600-1,LCD_YSIZE_TFT_800600-1,1);    
    Glib_Line(0,0,LCD_XSIZE_TFT_800600-1,LCD_YSIZE_TFT_800600-1,1);         
    Glib_Line(0,LCD_YSIZE_TFT_800600-1,LCD_XSIZE_TFT_800600-1,0,1); 
 
    // 0# 
    // 00 
    Glib_Rectangle(LCD_XSIZE_TFT_800600,0,SCR_XSIZE_TFT_800600-1,LCD_YSIZE_TFT_800600-1,1);    
    Glib_Rectangle(LCD_XSIZE_TFT_800600+100,100,SCR_XSIZE_TFT_800600-101,LCD_YSIZE_TFT_800600-101,1);    
     
    // 00 
    // #0 
    Glib_Rectangle(0,LCD_YSIZE_TFT_800600,LCD_XSIZE_TFT_800600-1,SCR_YSIZE_TFT_800600-1,1);    
    Glib_Rectangle(200,LCD_YSIZE_TFT_800600+200,LCD_XSIZE_TFT_800600-201,SCR_YSIZE_TFT_800600-201,1);    
 
    // 00 
    // 0# 
    Glib_Rectangle(LCD_XSIZE_TFT_800600,LCD_YSIZE_TFT_800600,SCR_XSIZE_TFT_800600-1,SCR_YSIZE_TFT_800600-1,1);    
    Glib_Line(LCD_XSIZE_TFT_800600,LCD_YSIZE_TFT_800600,SCR_XSIZE_TFT_800600-1,SCR_YSIZE_TFT_800600-1,1);         
    Glib_Line(LCD_XSIZE_TFT_800600,SCR_YSIZE_TFT_800600-1,SCR_XSIZE_TFT_800600-1,LCD_YSIZE_TFT_800600,1); 
 
    PRINTF("Virtual Screen Test(Mono). Press any key[ijkm\\r]!\n"); 
    MoveViewPort(MODE_TFT_1BIT_800600); 
    Lcd_MoveViewPort(0,0,MODE_TFT_1BIT_800600); 
//--------LCD FIFO interrupt test---------------------------------------------------START 
    rLCDINTMSK|=3; // Mask LCD SUB Interrupt 
    rINTMSK|=(BIT_LCD); // Mask LCD INT 
//--------LCD FIFO interrupt test-----------------------------------------------------END    
    Lcd_EnvidOnOff(0); 
    Lcd_Port_Return(); 
} 
 
 
void Test_Lcd_Tft_8Bit_800600(void) 
{ 
    int i,j,k; 
    Lcd_Port_Init(); 
    Lcd_Palette8Bit_Init(); 
    Lcd_Init(MODE_TFT_8BIT_800600); 
    Glib_Init(MODE_TFT_8BIT_800600); 
    PRINTF("[TFT 256 COLOR(8bit/1pixel) LCD TEST]\n"); 
 
    rTPAL = (1<<24)|((0xff)<<0); // Enable Temporary Palette : Blue 
//--------LCD FIFO interrupt test---------------------------------------------------START 
	Lcd_EnvidOnOff(1); // Enable ENVID    
	//The content of GPG4 is changed to OUTPUT('01').  
	//We will check the frame interrupt with using Logic Analyzer.  
	rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable 
	rGPGDAT=rGPGDAT&(~(1<<4))|(1<<4); // GPG4=High 
	rGPGCON=rGPGCON&(~(3<<8))|(1<<8); // GPG4=Output 
 
	pISR_LCD=(unsigned)Lcd_Int_Fifo_640480; 
	rINTMSK=~(BIT_LCD); 
	rLCDINTMSK=(0<<2)|(1<<1)|(0); // 4Words Trigger Level,Mask Frame int,Unmask Fifo int 
//        rLCDINTMSK=(1<<2)|(1<<1)|(0); // 8Words Trigger Level,Mask Frame int,Unmask Fifo int     
//        Lcd_EnvidOnOff(1); // Enable ENVID        
//--------LCD FIFO interrupt test-----------------------------------------------------END 
    PRINTF("TFT 256 color mode test 1. Press any key!\n"); 
    Uart_Getch();  	 
 
    Glib_ClearScr(0, MODE_TFT_8BIT_800600); 
    rTPAL = 0; 
    k=0; 
    for(i=0;i