📄 mylcd.c
字号:
#include <string.h>
#include "2410addr.h"
#include "2410lib.h"
#include "def.h"
#include "lcdlib.h"
#include "glib.h"
#include "lcd.h"
#include "DEMO256.h"
void (*PutPixel)(U32,U32,U32);
void Lcd_Port_Init(void);
void Lcd_Port_Return(void);
void Lcd_Palette1Bit_Init(void);
void Lcd_Palette8Bit_Init(void);
void __irq Lcd_Int_Frame(void);
void __irq Lcd_Int_Fifo(void);
void __irq Lcd_Int_Fifo_640480(void);
void Test_LCD(void);
unsigned save_rGPCUP,save_rGPCDAT,save_rGPCCON;
unsigned save_rGPDUP,save_rGPDDAT,save_rGPDCON;
unsigned lcd_count;
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++=DEMO256pal[i];
}
void __irq 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 __irq Lcd_Int_Fifo(void)
{
rLCDINTMSK|=3; // Mask LCD SUB Interrupt
if((lcd_count%20)==0) Uart_Printf("\n");
Uart_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_Cstn_8Bit(void)
{
int i,j,k;
// Lcd_Port_Init();
LCD_Init_Controler();//Lcd_Init(MODE_CSTN_8BIT);
Glib_Init(MODE_CSTN_8BIT);
Lcd_CstnOnOff(1); // Enable ENVID Bit and GPB5 output
Uart_Printf("[CSTN 256 COLOR(8bit/1pixel) LCD TEST]\n");
Uart_Printf(" R:0 ... 7 \n");
Uart_Printf("G:0 B0:1 B0:1 B0:1 \n");
Uart_Printf("G:. 2:3 2:3 2:3 \n");
Uart_Printf("G:. B0:1 B0:1 B0:1 \n");
Uart_Printf("G:. 2:3 2:3 2:3 \n");
Uart_Printf("G:. B0:1 B0:1 B0:1 \n");
Uart_Printf("G:7 2:3 2:3 2:3 \n");
// Glib_ClearScr(0, MODE_CSTN_8BIT);
for(j=0;j<240;j++)
for(i=0;i<320;i++) //RRRGGGBB
PutPixel(i,j,((i/40)<<5)+((j/30)<<2)+(((j/15)%2)<<1)+((i/20)%2));
Uart_Printf("CSTN 256 color mode test 1. Press any key!\n");
Uart_Getch();
// Glib_ClearScr(0, MODE_CSTN_8BIT);
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);
k++;
}
// #0
// 00
Glib_Rectangle(0,0,319,239,255);
Glib_Line(0,0,319,239,255);
Glib_Line(0,239,319,0,255);
// 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);
Uart_Printf("Virtual Screen Test(CSTN 256 color). Press any key[ijkm\\r]!\n");
MoveViewPort(MODE_CSTN_8BIT);
Lcd_MoveViewPort(0,0,MODE_CSTN_8BIT);
Lcd_CstnOnOff(0); // Disable ENVID Bit and GPB5 output
// Lcd_Port_Return();
//--------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
Uart_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
Uart_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 __irq 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(void)
{
//Test_Lcd_Stn_1Bit();
//Test_Lcd_Stn_2Bit();
//Test_Lcd_Stn_4Bit();
Test_Lcd_Cstn_8Bit();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -