📄 lcdlib.c.bak
字号:
*palette++=DEMO256pal[i];// correction is needed
break;
case PAL_565_8BPPFG:
rLCDCON2|=(2<<9);
palette=(U32 *)PALETTEFG;
for(i=0;i<256;i++)
*palette++=DEMO256pal[i];// correction is needed
break;
case PAL_5551_1BPP:
rLCDCON2|=(3<<9);
palette=(U32 *)PALETTEBG;
*palette++=0x0;//black
*palette=0xffff;//white
break;
case PAL_5551_2BPP:
rLCDCON2|=(3<<9);
palette=(U32 *)PALETTEBG;
*palette++=0xf801; // red
*palette++=0x7c1; //green
*palette++=0x3f; // blue
*palette=0xffff; // white
break;
case PAL_5551_4BPP:
rLCDCON2|=(3<<9);
palette=(U32 *)PALETTEBG;
*palette++=0x0; //black
for(i=0; i<14; i++)
*palette++=4369*i;
*palette=0xffff; //white
break;
case PAL_5551_8BPPBG:
rLCDCON2|=(3<<9);
palette=(U32 *)PALETTEBG;
for(i=0;i<256;i++)
*palette++=DEMO256pal[i];// correction is needed
break;
case PAL_5551_8BPPFG:
rLCDCON2|=(3<<9);
palette=(U32 *)PALETTEFG;
for(i=0;i<256;i++)
*palette++=DEMO256pal[i];// correction is needed
break;
default:
break;
}
}
/*
void Lcd_Palette_Init(void)
{
unsigned char cdata, p_red, p_green, p_blue;
U32 *palette;
palette=(U32 *)PALETTE;
*palette++=0; //black
for(cdata=1;cdata<255;cdata++)
{
p_red=(cdata & 0xe0);
p_green=(cdata & 0x1c);
p_blue=(cdata & 0x03);
*palette++=((U32)((p_red<<8)|(p_green<<6)|(p_blue<<3)));
}
*palette=0xffff; //white
}
*/
void LcdEnvidOnOff(U32 onoff)
{
#if 1
if(onoff==1)
rLCDCON1 = rLCDCON1|(3); // ENVID On using Per Frame method
else
rLCDCON1 &= (~3); // ENVID Off using Per Frame method
#else
if(onoff==1) {
rLCDCON1 = rLCDCON1|(3); // ENVID On using Per Frame method
LcdSetFrameInterrupt(FRAMESEL0_VSYNC, FRAMESEL1_NONE);
}
else {
rLCDCON1 &= (~3); // ENVID Off using Per Frame method
rLCDINTCON &= ~((1<<7)|(3));
}
#endif
}
void LcdEnvidOnOffDirect(U32 onoff)
{
#if 1
if(onoff==1)
rLCDCON1 = (rLCDCON1 & ~(3))|(1<<1); // ENVID On using Direct method
else
rLCDCON1 &= (~3); // ENVID Off for using Direct method
#else
if(onoff==1) {
rLCDCON1 = (rLCDCON1 & ~(3))|(1<<1); // ENVID On using Direct method
LcdSetFrameInterrupt(FRAMESEL0_VSYNC, FRAMESEL1_NONE);
}
else {
rLCDCON1 &= (~3); // ENVID Off for using Direct method
rLCDINTCON &= ~((1<<7)|(3));
}
#endif
}
void LcdSelectBuffer(U32 whichbuffer)
{
//WhichFrameBuffer=whichbuffer;
switch(whichbuffer) {
case BGBUFFER1:
rLCDCON1=(rLCDCON1&~(1<<21))|(0<<21);
break;
case BGBUFFER2:
rLCDCON1=(rLCDCON1&~(1<<21))|(1<<21);
break;
case FGBUFFER1:
rLCDCON1=(rLCDCON1&~(1<<20))|(0<<20);
break;
case FGBUFFER2:
rLCDCON1=(rLCDCON1&~(1<<20))|(1<<20);
break;
default:
break;
}
}
void LcdSetFrameInterrupt(U32 framesel0, U32 framesel1)
{
rLCDINTCON=(rLCDINTCON&~(0xf<<8))|((0x3&framesel0)<<10)|((0x3&framesel1)<<8)|(1<<7)|(1);
}
void LcdEnableFrameInterrupt(U32 framesel0, U32 framesel1)
{
rLCDCON1 &= (~3); // ENVID Off
while(((rLCDCON2>>15)&0x3ff)); //waiting for end of current frame.
rLCDCON1 = rLCDCON1|(3); // ENVID On using Per Frame method
rLCDINTCON=(rLCDINTCON&~(0xf<<8))|((0x3&framesel0)<<10)|((0x3&framesel1)<<8)|(1<<7)|(1);
}
void LcdDisableFrameInterrupt(void)
{
rLCDINTCON &=~((1<<7)|1);
rLCDCON1 &= (~3); // ENVID Off
}
void LcdEnableFifoInterrupt(U32 fifosel, U32 fifolevel)
{
rLCDCON1 &= (~3); // ENVID Off
while(((rLCDCON2>>15)&0x3ff)); //waiting for end of current frame.
rLCDCON1 = rLCDCON1|(3); // ENVID On using Per Frame method
rLCDINTCON=(rLCDINTCON&~(0x7f))|((0x3&fifosel)<<5)|((0x7&fifolevel)<<2)|(1<<1)|(1);
}
void LcdDisableFifoInterrupt(void)
{
rLCDINTCON &=~(3);
rLCDCON1 &= (~3); // ENVID Off
}
void LcdSetFifoInterrupt(U32 fifosel, U32 fifolevel)
{
rLCDINTCON=(rLCDINTCON&~(0x1f<<2))|((0x3&fifosel)<<10)|((0x7&fifolevel)<<8)|(1<<1)|(1);
}
void LcdOsdEnDiable(U32 endisable)
{
if(endisable==1)
rLCDOSD1 |= (1<<9);
else
rLCDOSD1 &= (~(1<<9));
}
void LcdOsdSetAlpha(U32 alpha)
{
rLCDOSD1 = (rLCDOSD1 & ~(0xff))|(alpha & 0xff);
}
void LcdOsdSelectFunction(U32 function)
{
if(function==OSD_COLORKEY)
rLCDKEYCON|=(1<<25);
else if(function==OSD_BLENDING)
rLCDKEYCON&=(~(1<<25));
}
void LcdOsdChangeCoordination(U32 topx, U32 topy, U32 botx, U32 boty)
{
rLCDOSD2=(rLCDOSD2&~(0x3fffff))|((0x3ff&topx)<<11)|(0x3ff&topy);
rLCDOSD3=(rLCDOSD3&~(0x3fffff))|((0x3ff&botx)<<11)|(0x3ff&boty);
}
void LcdDitheringEnDisable(U32 endisable)
{
if(endisable==1)
rLCDDITHCON|=1;
else
rLCDDITHCON&=(~1);
}
void LcdBGColorMap(U32 endisable, U32 bgcolor)
{
rLCDBGCON=(rLCDBGCON&~(0xffffff))|(0xffffff&bgcolor);
if(endisable==1)
rLCDBGCON=(1<<24)|(rLCDBGCON&~(0xffffff))|(0xffffff&bgcolor);
else
rLCDBGCON&=(~(1<<24));
}
void LcdFGColorMap(U32 endisable, U32 fgcolor)
{
rLCDFGCON=(rLCDFGCON&~(0xffffff))|(0xffffff&fgcolor);
if(endisable==1)
rLCDFGCON=(1<<24)|(rLCDFGCON&~(0xffffff))|(0xffffff&fgcolor);
else
rLCDFGCON&=(~(1<<24));
}
void LcdColorKeyInit(U32 displaytype)
{
U32 redkey, greenkey, bluekey;
U32 redcol, greencol, bluecol;
U32 compkey, colval;
redkey=greenkey=bluekey=0xff;
redcol=greencol=bluecol=0x0;
switch(displaytype&0xf) {
case 3: //8BPP palettized.
if(((rLCDCON2>>9)&0x3)==1) {//666
redkey&=(0x3);
greenkey&=(0x3);
bluekey&=(0x3);
redcol=(0xfc);
greencol=0;
bluecol=0;
}
else if(((rLCDCON2>>9)&0x3)==2) {//565
redkey&=(0x7);
greenkey&=(0x3);
bluekey&=(0x7);
redcol=(0xf8);
greencol=0;
bluecol=0;
}
else if(((rLCDCON2>>9)&0x3)==3) {//5551
redkey &= (0x7);
greenkey &= (0x7);
bluekey &= (0x6);
redcol=(0xf8);
greencol=0;
bluecol=1;
}
break;
case 4: //8BPP non-palettized.
redkey &= (0x1f);
greenkey &= (0x1f);
bluekey &= (0x3f);
redcol=(0xc0);
greencol=0;
bluecol=0;
break;
case 5: //16BPP 565
redkey &= (0x7);
greenkey &= (0x3);
bluekey &= (0x7);
redcol=(0xf8);
greencol=0;
bluecol=0;
break;
case 6: //16BPP 5551
redkey &= (0x7);
greenkey &= (0x7);
bluekey &= (0x6);
redcol=(0xf8);
greencol=0;
bluecol=1;
break;
case 7: //18BPP
redkey &= (0x3);
greenkey &= (0x3);
bluekey &= (0x3);
redcol=(0xfc);
greencol=0;
bluecol=0;
break;
default:
break;
}
compkey=(redkey<<16)|(greenkey<<8)|(bluekey);
colval=(redcol<<16)|(greencol<<8)|(bluecol);
rLCDKEYCON=(rLCDKEYCON&~(0x1ffffff))|(0<<24)|(0xffffff&compkey);
rLCDKEYVAL=(0xffffff&colval);
}
void LcdSetColorKey(U32 direction, U32 compkey, U32 colval)
{
rLCDKEYCON=(rLCDKEYCON&~(0x1ffffff))|((0x1&direction)<<24)|(0xffffff&compkey);
rLCDKEYVAL=(0xffffff&colval);
}
void MoveViewPort(U32 displaytype, U32 whichframebuffer)
{
U32 vframewidth, framewidth, vframeheight, frameheight;
int vx=0,vy=0,vd;
vd=((displaytype&0xf)==0x0)*32+((displaytype&0xf)==0x1)*16+((displaytype&0xf)==0x2)*8+((displaytype&0xf)==0x3)*4
+((displaytype&0xf)==0x4)*4+((displaytype&0xf)==0x5)*2+((displaytype&0xf)==0x6)*2 +((displaytype&0xf)==0x7)*1;
switch(displaytype&0xff00) {
case 0x1100:
case 0x2100:
vframewidth=BG_VXSIZE_176220;
framewidth=BG_XSIZE_176220;
vframeheight=BG_VYSIZE_176220;
frameheight=BG_YSIZE_176220;
break;
case 0x1200:
case 0x2200:
vframewidth=BG_VXSIZE_240320;
framewidth=BG_XSIZE_240320;
vframeheight=BG_VYSIZE_240320;
frameheight=BG_YSIZE_240320;
break;
case 0x1400:
case 0x2400:
vframewidth=BG_VXSIZE_640480;
framewidth=BG_XSIZE_640480;
vframeheight=BG_VYSIZE_640480;
frameheight=BG_YSIZE_640480;
break;
case 0x1800:
case 0x2800:
vframewidth=BG_VXSIZE_800600;
framewidth=BG_XSIZE_800600;
vframeheight=BG_VYSIZE_800600;
frameheight=BG_YSIZE_800600;
break;
case 0x4100:
vframewidth=FG_VXSIZE_176220;
framewidth=FG_XSIZE_176220;
vframeheight=FG_VYSIZE_176220;
frameheight=FG_YSIZE_176220;
break;
case 0x4200:
vframewidth=FG_VXSIZE_240320;
framewidth=FG_XSIZE_240320;
vframeheight=FG_VYSIZE_240320;
frameheight=FG_YSIZE_240320;
break;
case 0x4400:
vframewidth=FG_VXSIZE_640480;
framewidth=FG_XSIZE_640480;
vframeheight=FG_VYSIZE_640480;
frameheight=FG_YSIZE_640480;
break;
case 0x4800:
vframewidth=FG_VXSIZE_800600;
framewidth=FG_XSIZE_800600;
vframeheight=FG_VYSIZE_800600;
frameheight=FG_YSIZE_800600;
break;
default:
break;
}
while(1) {
switch(Uart_Getch()) {
case 'i':
if(vy>=vd)vy-=vd;
break;
case 'j':
if(vx>=vd)vx-=vd;
break;
case 'k':
if(vx<=(vframewidth-framewidth-vd))vx+=vd;
break;
case 'm':
if(vy<=(vframeheight-frameheight-vd))vy+=vd;
break;
case '\r':
return;
default:
break;
}
Uart_Printf("vx=%3d,vy=%3d\n",vx,vy);
LcdMoveViewPort(vx,vy, displaytype, whichframebuffer);
}
}
void LcdMoveViewPort(int vx,int vy, U32 displaytype, U32 whichframebuffer)
{
U32 addr;
U32 vframewidth, frameheight;
U32 bytefactor;
switch(displaytype&0xf) {
case 0x0:
bytefactor=1;
break;
case 0x1:
bytefactor=2;
break;
case 0x2:
bytefactor=4;
break;
case 0x3:
bytefactor=8;
break;
case 0x4:
bytefactor=8;
break;
case 0x5:
bytefactor=16;
break;
case 0x6:
bytefactor=16;
break;
case 0x7:
bytefactor=32;
break;
default:
break;
}
switch(displaytype&0xff00) {
case 0x1100:
case 0x2100:
vframewidth=BG_VXSIZE_176220;
frameheight=BG_YSIZE_176220;
break;
case 0x1200:
case 0x2200:
vframewidth=BG_VXSIZE_240320;
frameheight=BG_YSIZE_240320;
break;
case 0x1400:
case 0x2400:
vframewidth=BG_VXSIZE_640480;
frameheight=BG_YSIZE_640480;
break;
case 0x1800:
case 0x2800:
vframewidth=BG_VXSIZE_800600;
frameheight=BG_YSIZE_800600;
break;
case 0x4100:
vframewidth=FG_VXSIZE_176220;
frameheight=FG_YSIZE_176220;
break;
case 0x4200:
vframewidth=FG_VXSIZE_240320;
frameheight=FG_YSIZE_240320;
break;
case 0x4400:
vframewidth=FG_VXSIZE_640480;
frameheight=FG_YSIZE_640480;
break;
case 0x4800:
vframewidth=FG_VXSIZE_800600;
frameheight=FG_YSIZE_800600;
break;
default:
break;
}
switch(whichframebuffer) {
case BGBUFFER1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -