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

📄 lcdlib.c.bak

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