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

📄 lcdlib.c

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 C
📖 第 1 页 / 共 3 页
字号:
			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:
			// The processor mode should be superviser mode.  
			SET_IF();
			while(((rLCDCON2&(0x7ff<<15))>>15)!=1);
			addr=(LCDFRAMEBUFFERBG1+(vx*bytefactor/8)+vy*(vframewidth*bytefactor/8));
			rLCDSADDRB1= addr;
			rLCDEADDRB1=LCDBASEL(addr+(vframewidth*frameheight*bytefactor/8));
			CLR_IF();
			break;
		case BGBUFFER2:
			// The processor mode should be superviser mode.  
			SET_IF();
			while(((rLCDCON2&(0x7ff<<15))>>15)!=1);
			addr=(LCDFRAMEBUFFERBG2+(vx*bytefactor/8)+vy*(vframewidth*bytefactor/8));
			rLCDSADDRB2= addr;
			rLCDEADDRB2=LCDBASEL(addr+(vframewidth*frameheight*bytefactor/8));
			CLR_IF();
			break;
		case FGBUFFER1:
			// The processor mode should be superviser mode.  
			SET_IF();
			while(((rLCDCON2&(0x7ff<<15))>>15)!=1);
			addr=(LCDFRAMEBUFFERFG1+(vx*bytefactor/8)+vy*(vframewidth*bytefactor/8));
			rLCDSADDRF1= addr;
			rLCDEADDRF1=LCDBASEL(addr+(vframewidth*frameheight*bytefactor/8));
			CLR_IF();
			break;
		case FGBUFFER2:
			// The processor mode should be superviser mode.  
			SET_IF();
			while(((rLCDCON2&(0x7ff<<15))>>15)!=1);
			addr=(LCDFRAMEBUFFERFG2+(vx*bytefactor/8)+vy*(vframewidth*bytefactor/8));
			rLCDSADDRF2= addr;
			rLCDEADDRF2=LCDBASEL(addr+(vframewidth*frameheight*bytefactor/8));
			CLR_IF();
			break;
		default:
			break;
	}

}    


/*
void MoveViewPort(void)
{
    int vx=0,vy=0,vd;
	vd=((DisplayType&0xf)==0x1)*32+((DisplayType&0xf)==0x2)*16+((DisplayType&0xf)==0x4)*8
        +((DisplayType&0xf)==0x6)*4+((DisplayType&0xf)==0x8)*4 +((DisplayType&0xf)==0xa)*2+
        ((DisplayType&0xf)==0xc)*2+((DisplayType&0xf)==0xe)*1;        
	
    while(1) {
    	switch(Uart_Getch()) {
    	case 'i':
		    if(vy>=vd)vy-=vd;    	   	
    	    break;
    	case 'j':
    	    if(vx>=vd)vx-=vd;
    		break;
    	case 'k':
		    if(DisplayType&0x100) {
				if(vx<=(BG_VXSIZE_176220-BG_XSIZE_176220-vd))vx+=vd;   	    
			}
		    else if(DisplayType&0x200) {
				if(vx<=(BG_VXSIZE_240320-BG_XSIZE_240320-vd))vx+=vd;   	    
			}
	        else if(DisplayType&0x400) {
				if(vx<=(BG_VXSIZE_640480-BG_XSIZE_640480-vd))vx+=vd;   	    
			}
	        else if(DisplayType&0x800) {
				if(vx<=(BG_VXSIZE_800600-BG_XSIZE_800600-vd))vx+=vd;   	    
			}
	   	    break;
    	case 'm':
			if(DisplayType&0x100) {
				if(vy<=(BG_VYSIZE_176220-BG_YSIZE_176220-vd))vy+=vd;   	    
			}
		    else if(DisplayType&0x200) {
				if(vy<=(BG_VYSIZE_240320-BG_YSIZE_240320-vd))vy+=vd;   	    
			}
			else if(DisplayType&0x400) {
				if(vy<=(BG_VYSIZE_640480-BG_YSIZE_640480-vd))vy+=vd;   	    
			}
			else if(DisplayType&0x800) {
				if(vy<=(BG_VYSIZE_800600-BG_YSIZE_800600-vd))vy+=vd;   	    
			}
	   	    break;
    	case '\r':
	   	    return;
    	default:
	    break;
		}
		Uart_Printf("vx=%3d,vy=%3d\n",vx,vy);
		LcdMoveViewPort(vx,vy);
    }
}


void LcdMoveViewPort(int vx,int vy)
{
	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:
			// The processor mode should be superviser mode.  
			SET_IF();
			while(((rLCDCON2&(0x7ff<<15))>>15)!=1);
			addr=(LCDFRAMEBUFFERBG1+(vx*bytefactor/8)+vy*(vframewidth*bytefactor/8));
			rLCDSADDRB1= addr;
			rLCDEADDRB1=LCDBASEL(addr+(vframewidth*frameheight*bytefactor/8));
			CLR_IF();
			break;
		case BGBUFFER2:
			// The processor mode should be superviser mode.  
			SET_IF();
			while(((rLCDCON2&(0x7ff<<15))>>15)!=1);
			addr=(LCDFRAMEBUFFERBG2+(vx*bytefactor/8)+vy*(vframewidth*bytefactor/8));
			rLCDSADDRB2= addr;
			rLCDEADDRB2=LCDBASEL(addr+(vframewidth*frameheight*bytefactor/8));
			CLR_IF();
			break;
		case FGBUFFER1:
			// The processor mode should be superviser mode.  
			SET_IF();
			while(((rLCDCON2&(0x7ff<<15))>>15)!=1);
			addr=(LCDFRAMEBUFFERFG1+(vx*bytefactor/8)+vy*(vframewidth*bytefactor/8));
			rLCDSADDRF1= addr;
			rLCDEADDRF1=LCDBASEL(addr+(vframewidth*frameheight*bytefactor/8));
			CLR_IF();
			break;
		case FGBUFFER2:
			// The processor mode should be superviser mode.  
			SET_IF();
			while(((rLCDCON2&(0x7ff<<15))>>15)!=1);
			addr=(LCDFRAMEBUFFERFG2+(vx*bytefactor/8)+vy*(vframewidth*bytefactor/8));
			rLCDSADDRF2= addr;
			rLCDEADDRF2=LCDBASEL(addr+(vframewidth*frameheight*bytefactor/8));
			CLR_IF();
			break;
		default:
			break;
	}
}    
*/
void SLcdGpioSet(U8 type, U8 data)
{
	U32 GPDATBuf;
	
	rGPCON_L = (rGPCON_L & ~(0x3f<<8))|(0x15<<8);
	switch (type)
	{
	case nCS:
		if(data) GPDATBuf |= (1<<6);
		else GPDATBuf &= ~(1<<6);
		break;
	case SCLK:
		if(data) GPDATBuf |= (1<<5);
		else GPDATBuf &= ~(1<<5);
		break;
	case SDI:
		if(data) GPDATBuf |= (1<<4);
		else GPDATBuf &= ~(1<<4);
		break;
	case ALL:
		if(data) GPDATBuf |= (7<<4);
		else GPDATBuf &= ~(7<<4);
		break;
	default:
		break;
	}

	rGPDAT = GPDATBuf;
}

void SLcdRegSet(U8 IndexReg, U16 Inst)
{
	SLcdSpiSet(0, 0, (U16)IndexReg);	// Set Index Register
	SLcdSpiSet(1, 0, (U16)Inst);		// Write Instruction
}

void SLcdSpiSet(U8 RS, U8 RW, U16 data)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -