⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdlib.c.bak

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 BAK
📖 第 1 页 / 共 3 页
字号:
/*****************************************
  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 + -