📄 lcdlib.c.bak
字号:
/*****************************************
NAME: lcdlib.c
DESC: lcd configuration low-level codes
HISTORY:
2002.03.13:draft ver 0.0
*****************************************/
#include <string.h>
#include "24a0addr.h"
#include "24a0lib.h"
#include "def.h"
#include "lcdlib.h"
#include "..\bmp\demo256.h"
//volatile U32 DisplayType;
//volatile U32 WhichFrameBuffer;
U32 mpegframebuffer;
void LcdBGInit(U32 displaytype)
{
U32 pagewidth, offsize, bytefactor;
U32 clkval, pnrmode, bppmode;
U32 vbpd, vfpd, vspw, hbpd, hfpd, hspw;
U32 lineval, hozval;
U32 hwswp;
U32 framebuffer1, framebuffer2;
if(displaytype&0x1000)
pnrmode=PNRMODE_SER_RGB;
else
pnrmode=PNRMODE_PAR_RGB;
switch(displaytype&0xf) {
case 0x0:
bytefactor=1;
bppmode=BPPMODE_1BPP;
break;
case 0x1:
bytefactor=2;
bppmode=BPPMODE_2BPP;
break;
case 0x2:
bytefactor=4;
bppmode=BPPMODE_4BPP;
break;
case 0x3:
bytefactor=8;
bppmode=BPPMODE_8BPP;
break;
case 0x4:
bytefactor=8;
bppmode=BPPMODE_8BPPNP;
break;
case 0x5:
bytefactor=16;
bppmode=BPPMODE_16BPP565;
break;
case 0x6:
bytefactor=16;
bppmode=BPPMODE_16BPP5551;
break;
case 0x7:
bytefactor=32;
bppmode=BPPMODE_18BPP;
break;
default:
break;
}
switch(displaytype&0xff00) {
case 0x1100:
clkval=CLKVAL_SER_176220;
vbpd=VBPD_176220;
vfpd=VFPD_176220;
vspw=VSPW_176220;
hbpd=HBPD_176220;
hfpd=HFPD_176220;
hspw=HSPW_176220;
lineval=LINEVAL_176220;
hozval=HOZVAL_176220;
pagewidth=BG_XSIZE_176220*bytefactor/8;
offsize=(BG_VXSIZE_176220-BG_XSIZE_176220)*bytefactor/8;
break;
case 0x2100:
clkval=CLKVAL_PAR_176220;
vbpd=VBPD_176220;
vfpd=VFPD_176220;
vspw=VSPW_176220;
hbpd=HBPD_176220;
hfpd=HFPD_176220;
hspw=HSPW_176220;
lineval=LINEVAL_176220;
hozval=HOZVAL_176220;
pagewidth=BG_XSIZE_176220*bytefactor/8;
offsize=(BG_VXSIZE_176220-BG_XSIZE_176220)*bytefactor/8;
break;
case 0x2200:
clkval=CLKVAL_PAR_240320;
vbpd=VBPD_240320;
vfpd=VFPD_240320;
vspw=VSPW_240320;
hbpd=HBPD_240320;
hfpd=HFPD_240320;
hspw=HSPW_240320;
lineval=LINEVAL_240320;
hozval=HOZVAL_240320;
pagewidth=BG_XSIZE_240320*bytefactor/8;
offsize=(BG_VXSIZE_240320-BG_XSIZE_240320)*bytefactor/8;
break;
case 0x2400:
clkval=CLKVAL_PAR_640480;
vbpd=VBPD_640480;
vfpd=VFPD_640480;
vspw=VSPW_640480;
hbpd=HBPD_640480;
hfpd=HFPD_640480;
hspw=HSPW_640480;
lineval=LINEVAL_640480;
hozval=HOZVAL_640480;
pagewidth=BG_XSIZE_640480*bytefactor/8;
offsize=(BG_VXSIZE_640480-BG_XSIZE_640480)*bytefactor/8;
break;
case 0x2800:
clkval=CLKVAL_PAR_800600;
vbpd=VBPD_800600;
vfpd=VFPD_800600;
vspw=VSPW_800600;
hbpd=HBPD_800600;
hfpd=HFPD_800600;
hspw=HSPW_800600;
lineval=LINEVAL_800600;
hozval=HOZVAL_800600;
pagewidth=BG_XSIZE_800600*bytefactor/8;
offsize=(BG_VXSIZE_800600-BG_XSIZE_800600)*bytefactor/8;
break;
default:
break;
}
framebuffer1=LCDFRAMEBUFFERBG1;
framebuffer2=LCDFRAMEBUFFERBG2;
#if 1
hwswp=0;
if(displaytype&MODE_NO_VIRTUAL_16B) {
offsize=0;
hwswp=1;
}
if(displaytype&MODE_NO_VIRTUAL_24B) {
offsize=0;
hwswp=0;
}
/* if(displaytype&MODE_MPEG_DISPLAY_16B) {
offsize=0;
hwswp=1;
framebuffer1=mpegframebuffer;
}
if(displaytype&MODE_MPEG_DISPLAY_24B) {
offsize=0;
hwswp=0;
framebuffer1=mpegframebuffer;
} */
#endif
rLCDCON1=(rLCDCON1&((1<<20)|(7<<6)))|(0<<21)|(1<<19)|(clkval<<13)|(1<<12)|(pnrmode<<9)|(bppmode<<2)|0;
rLCDCON1=(0<<21)|(1<<19)|(clkval<<13)|(1<<12)|(pnrmode<<9)|(bppmode<<2)|0;
rLCDCON2=(2<<9)|(1<<6)|(1<<5)|(hwswp);
rLCDTCON1=(vbpd<<16)|(vfpd<<8)|(vspw);
rLCDTCON2=(hbpd<<16)|(hfpd<<8)|(hspw);
rLCDTCON3=(lineval<<11)|(hozval);
rLCDSADDRB1=LCDFRAMEBUFFERBG1;
rLCDEADDRB1=LCDBASEL(LCDFRAMEBUFFERBG1+(pagewidth+offsize)*(lineval+1));
rLCDVSCRB1=(offsize<<13)|(pagewidth);
rLCDSADDRB2=LCDFRAMEBUFFERBG2;
rLCDEADDRB2=LCDBASEL(LCDFRAMEBUFFERBG2+(pagewidth+offsize)*(lineval+1));
rLCDVSCRB2=(offsize<<13)|(pagewidth);
}
/* Version before Feb 18
void LcdBGInit(U32 displaytype)
{
U32 pagewidth, offsize, bytefactor;
U32 clkval, pnrmode, bppmode;
U32 vbpd, vfpd, vspw, hbpd, hfpd, hspw;
U32 lineval, hozval;
U32 hwswp;
if(displaytype&0x1000)
pnrmode=PNRMODE_SER_RGB;
else
pnrmode=PNRMODE_PAR_RGB;
switch(displaytype&0xf) {
case 0x0:
bytefactor=1;
bppmode=BPPMODE_1BPP;
break;
case 0x1:
bytefactor=2;
bppmode=BPPMODE_2BPP;
break;
case 0x2:
bytefactor=4;
bppmode=BPPMODE_4BPP;
break;
case 0x3:
bytefactor=8;
bppmode=BPPMODE_8BPP;
break;
case 0x4:
bytefactor=8;
bppmode=BPPMODE_8BPPNP;
break;
case 0x5:
bytefactor=16;
bppmode=BPPMODE_16BPP565;
break;
case 0x6:
bytefactor=16;
bppmode=BPPMODE_16BPP5551;
break;
case 0x7:
bytefactor=32;
bppmode=BPPMODE_18BPP;
break;
default:
break;
}
switch(displaytype&0xff00) {
case 0x1100:
clkval=CLKVAL_SER_176220;
vbpd=VBPD_176220;
vfpd=VFPD_176220;
vspw=VSPW_176220;
hbpd=HBPD_176220;
hfpd=HFPD_176220;
hspw=HSPW_176220;
lineval=LINEVAL_176220;
hozval=HOZVAL_176220;
pagewidth=BG_XSIZE_176220*bytefactor/8;
offsize=(BG_VXSIZE_176220-BG_XSIZE_176220)*bytefactor/8;
break;
case 0x2100:
clkval=CLKVAL_PAR_176220;
vbpd=VBPD_176220;
vfpd=VFPD_176220;
vspw=VSPW_176220;
hbpd=HBPD_176220;
hfpd=HFPD_176220;
hspw=HSPW_176220;
lineval=LINEVAL_176220;
hozval=HOZVAL_176220;
pagewidth=BG_XSIZE_176220*bytefactor/8;
offsize=(BG_VXSIZE_176220-BG_XSIZE_176220)*bytefactor/8;
break;
case 0x2200:
clkval=CLKVAL_PAR_240320;
vbpd=VBPD_240320;
vfpd=VFPD_240320;
vspw=VSPW_240320;
hbpd=HBPD_240320;
hfpd=HFPD_240320;
hspw=HSPW_240320;
lineval=LINEVAL_240320;
hozval=HOZVAL_240320;
pagewidth=BG_XSIZE_240320*bytefactor/8;
offsize=(BG_VXSIZE_240320-BG_XSIZE_240320)*bytefactor/8;
break;
case 0x2400:
clkval=CLKVAL_PAR_640480;
vbpd=VBPD_640480;
vfpd=VFPD_640480;
vspw=VSPW_640480;
hbpd=HBPD_640480;
hfpd=HFPD_640480;
hspw=HSPW_640480;
lineval=LINEVAL_640480;
hozval=HOZVAL_640480;
pagewidth=BG_XSIZE_640480*bytefactor/8;
offsize=(BG_VXSIZE_640480-BG_XSIZE_640480)*bytefactor/8;
break;
case 0x2800:
clkval=CLKVAL_PAR_800600;
vbpd=VBPD_800600;
vfpd=VFPD_800600;
vspw=VSPW_800600;
hbpd=HBPD_800600;
hfpd=HFPD_800600;
hspw=HSPW_800600;
lineval=LINEVAL_800600;
hozval=HOZVAL_800600;
pagewidth=BG_XSIZE_800600*bytefactor/8;
offsize=(BG_VXSIZE_800600-BG_XSIZE_800600)*bytefactor/8;
break;
default:
break;
}
hwswp=0;
if(displaytype&MODE_POST_DISPLAY_16B || displaytype&MODE_CAMERA_DISPLAY_16B) {
offsize=0;
hwswp=1;
}
if(displaytype&MODE_POST_DISPLAY_24B || displaytype&MODE_CAMERA_DISPLAY_24B) {
offsize=0;
hwswp=0;
}
rLCDCON1=(0<<21)|(1<<19)|(clkval<<13)|(1<<12)|(pnrmode<<9)|(bppmode<<2)|0;
rLCDCON2=(2<<9)|(1<<6)|(1<<5)|(hwswp);
rLCDTCON1=(vbpd<<16)|(vfpd<<8)|(vspw);
rLCDTCON2=(hbpd<<16)|(hfpd<<8)|(hspw);
rLCDTCON3=(lineval<<11)|(hozval);
rLCDSADDRB1=LCDFRAMEBUFFERBG1;
rLCDEADDRB1=LCDBASEL(LCDFRAMEBUFFERBG1+(pagewidth+offsize)*(lineval+1));
rLCDVSCRB1=(offsize<<13)|(pagewidth);
rLCDSADDRB2=LCDFRAMEBUFFERBG2;
rLCDEADDRB2=LCDBASEL(LCDFRAMEBUFFERBG2+(pagewidth+offsize)*(lineval+1));
rLCDVSCRB2=(offsize<<13)|(pagewidth);
}
*/
void LcdFGInit(U32 displaytype)
{
U32 pagewidth, offsize, bytefactor;
U32 bppmode;
U32 lefttopx, lefttopy, rightbotx, rightboty;
U32 lineval;
switch(displaytype&0xf) {
case 0x3:
bytefactor=8;
bppmode=BPPMODE_8BPP;
break;
case 0x4:
bytefactor=8;
bppmode=BPPMODE_8BPPNP;
break;
case 0x5:
bytefactor=16;
bppmode=BPPMODE_16BPP565;
break;
case 0x6:
bytefactor=16;
bppmode=BPPMODE_16BPP5551;
break;
case 0x7:
bytefactor=32;
bppmode=BPPMODE_18BPP;
break;
default:
break;
}
switch(displaytype&0xff00) {
case 0x4100:
lefttopx=lefttopy=0;
rightbotx=lefttopx+FG_XSIZE_176220-1;
rightboty=lefttopy+FG_YSIZE_176220-1;
lineval=FG_YSIZE_176220-1;
pagewidth=FG_XSIZE_176220*bytefactor/8;
offsize=(FG_VXSIZE_176220-FG_XSIZE_176220)*bytefactor/8;
break;
case 0x4200:
lefttopx=lefttopy=0;
rightbotx=lefttopx+FG_XSIZE_240320-1;
rightboty=lefttopy+FG_YSIZE_240320-1;
lineval=FG_YSIZE_240320-1;
pagewidth=FG_XSIZE_240320*bytefactor/8;
offsize=(FG_VXSIZE_240320-FG_XSIZE_240320)*bytefactor/8;
break;
case 0x4400:
lefttopx=lefttopy=0;
rightbotx=lefttopx+FG_XSIZE_640480-1;
rightboty=lefttopy+FG_YSIZE_640480-1;
lineval=FG_YSIZE_640480-1;
pagewidth=FG_XSIZE_640480*bytefactor/8;
offsize=(FG_VXSIZE_640480-FG_XSIZE_640480)*bytefactor/8;
break;
case 0x4800:
lefttopx=lefttopy=0;
rightbotx=lefttopx+FG_XSIZE_800600-1;
rightboty=lefttopy+FG_YSIZE_800600-1;
lineval=FG_YSIZE_800600-1;
pagewidth=FG_XSIZE_800600*bytefactor/8;
offsize=(FG_VXSIZE_800600-FG_XSIZE_800600)*bytefactor/8;
break;
default:
break;
}
if((displaytype&MODE_NO_VIRTUAL_16B)||(displaytype&MODE_NO_VIRTUAL_24B))
offsize=0;
rLCDCON1=(rLCDCON1&~((1<<20)|(7<<6)))|(bppmode<<6);
rLCDOSD1=(0<<9)|(0<<8)|(0xff);
rLCDOSD2=(lefttopx<<11)|(lefttopy);
rLCDOSD3=(rightbotx<<11)|(rightboty);
rLCDSADDRF1=LCDFRAMEBUFFERFG1;
rLCDEADDRF1=LCDBASEL(LCDFRAMEBUFFERFG1+(pagewidth+offsize)*(lineval+1));
rLCDVSCRF1=(offsize<<13)|(pagewidth);
rLCDSADDRF2=LCDFRAMEBUFFERFG2;
rLCDEADDRF2=LCDBASEL(LCDFRAMEBUFFERFG2+(pagewidth+offsize)*(lineval+1));
rLCDVSCRF2=(offsize<<13)|(pagewidth);
}
void PaletteInit(U32 type)
{
U32 *palette;
U32 i;
LcdEnvidOnOff (0); // Envid Off for updating palette ram.
while(((rLCDCON2>>15)&0x3ff)); //waiting for line-end
switch(type) {
case PAL_666_1BPP:
rLCDCON2|=(1<<9);
palette=(U32 *)PALETTEBG;
*palette++=0x0; //black
*palette=0x3ffff; //white
break;
case PAL_666_2BPP:
rLCDCON2|=(1<<9);
palette=(U32 *)PALETTEBG;
*palette++=0x3f000; // red
*palette++=0xfc0; //green
*palette++=0x3f; // blue
*palette=0x3ffff; // white
break;
case PAL_666_4BPP:
rLCDCON2|=(1<<9);
palette=(U32 *)PALETTEBG;
*palette++=0x0; //black
for(i=0; i<14; i++)
*palette++=17476*i;
*palette=0x3ffff; //white
break;
case PAL_666_8BPPBG:
rLCDCON2|=(1<<9);
palette=(U32 *)PALETTEBG;
for(i=0;i<256;i++)
*palette++=DEMO256pal[i]; // correction is needed
break;
case PAL_666_8BPPFG:
rLCDCON2|=(1<<9);
palette=(U32 *)PALETTEFG;
for(i=0;i<256;i++)
*palette++=DEMO256pal[i];// correction is needed
break;
case PAL_565_1BPP:
rLCDCON2|=(2<<9);
palette=(U32 *)PALETTEBG;
*palette++=0x0;//black
*palette=0xffff;//white
break;
case PAL_565_2BPP:
rLCDCON2|=(2<<9);
palette=(U32 *)PALETTEBG;
*palette++=0xf800; // red
*palette++=0x7e0; //green
*palette++=0x1f; // blue
*palette=0xffff; // white
break;
case PAL_565_4BPP:
rLCDCON2|=(2<<9);
palette=(U32 *)PALETTEBG;
*palette++=0x0; //black
for(i=0; i<14; i++)
*palette++=4369*i;
*palette=0xffff; //white
break;
case PAL_565_8BPPBG:
rLCDCON2|=(2<<9);
palette=(U32 *)PALETTEBG;
for(i=0;i<256;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -