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

📄 lcdlib.c.bak

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 BAK
📖 第 1 页 / 共 3 页
字号:
			// 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)
{
	U32 buf = 0x740000;		// device id
	U8 i;

	buf |= (RS<<17);
	buf |= (RW<<16);
	buf += data;

	SLcdGpioSet(nCS, 0);	// transfer start

	Delay(1);		// 1 -> 120us

	for(i=0; i<24; i++) {
		SLcdGpioSet(SCLK, 0);	// sclk low

		if(buf & (1<<(23-i))) SLcdGpioSet(SDI, 1);
		else SLcdGpioSet(SDI, 0);

		SLcdGpioSet(SCLK, 1);	// sclk high
	}

	SLcdGpioSet(nCS, 1);		// transfer end

	Delay(1);
}

void SLcdPowerOn(void)
{
	SLcdInit1();

	SLcdPowerSet();

	SLcdInit2();

	SLcdRGBModeChange();

	SLcdDisplayOn();

	SLcdRegSet(0x21, 0x0000);
	SLcdSpiSet(0, 0, (U16)0x22);
}

void SLcdPowerOff(void)
{
	SLcdInternalModeChange();

	SLcdDisplayOff();

	SLcdRegSet(0x10, 0x0000);

	SLcdRegSet(0x0a, 0x0100);
}

void SLcdInit1(void)
{
	SLcdRegSet(0x01, 0x0917);	// 0x0117 <-> 0x0917
	SLcdRegSet(0x02, 0x0700);
	SLcdRegSet(0x03, 0x1230);
	SLcdRegSet(0x04, 0x0000);
	SLcdRegSet(0x05, 0x0000);
	SLcdRegSet(0x07, 0x0005);
	SLcdRegSet(0x08, 0x0907);	// 0x0306 <-> 0x0808 -> VFP=7H, VBP=9H, VLW=4H, so 0x0907
	SLcdRegSet(0x0b, 0xec0a);	// 0xe800 <-> 0xec0a
	SLcdRegSet(0x0c, 0x0002);
	SLcdRegSet(0x0d, 0x0734);	// 0x0700 <-> 0x0734
	SLcdRegSet(0x40, 0x0000);
}

void SLcdInit2(void)
{
	SLcdRegSet(0x30, 0x0000);
	SLcdRegSet(0x31, 0x0000);
	SLcdRegSet(0x32, 0x0000);
	SLcdRegSet(0x33, 0x0000);
	SLcdRegSet(0x34, 0x0707);
	SLcdRegSet(0x35, 0x0707);
	SLcdRegSet(0x36, 0x0707);
	SLcdRegSet(0x37, 0x0000);
	SLcdRegSet(0x3f, 0x0000);
	SLcdRegSet(0x41, 0x0000);
	SLcdRegSet(0x42, 0xbf00);
	SLcdRegSet(0x43, 0xc2c0);
	SLcdRegSet(0x44, 0xaf00);
	SLcdRegSet(0x45, 0xbf00);
}

void SLcdPowerSet(void)
{
	SLcdRegSet(0x12, 0x0001);
	SLcdRegSet(0x13, 0x0404);	// 0x0804 <-> 0x0404
	SLcdRegSet(0x14, 0x151e);	// 0x1118 <-> 0x151e

	SLcdRegSet(0x0a, 0x0100);
	SLcdRegSet(0x0a, 0x0101);
	SLcdRegSet(0x0a, 0x0102);
	SLcdRegSet(0x0a, 0x0106);
	SLcdRegSet(0x0a, 0x0107);

	SLcdRegSet(0x10, 0x2814);
	SLcdRegSet(0x11, 0x9010);	// 0x8000 <-> 0x9010

	SLcdRegSet(0x0a, 0x0100);
	SLcdRegSet(0x0a, 0x0101);

	//Delay(333);	// 40000 us / 120 us = 333,  S3C2460X
	Delay(400);	// 40000 us / 100 us = 400

	SLcdRegSet(0x14, 0x351e);	// 0x3118 <-> 0x351e

	SLcdRegSet(0x0a, 0x0100);
	SLcdRegSet(0x0a, 0x0102);

	//Delay(333);	// 40 ms, S3C2460X
	Delay(400);	// 40 ms

	SLcdRegSet(0x13, 0x0414);	// 0x0814 <-> 0x0414

	SLcdRegSet(0x0a, 0x0101);
}

void SLcdDisplayOn(void)
{
	SLcdRegSet(0x07, 0x0005);

	//Delay(333);	// 40 ms, S3C2460X
	Delay(400);	// 40 ms

	SLcdRegSet(0x07, 0x0025);

	SLcdRegSet(0x0a, 0x0100);

	SLcdRegSet(0x07, 0x0027);

	SLcdRegSet(0x07, 0x0037);
}

void SLcdDisplayOff(void)
{
	SLcdRegSet(0x07, 0x0036);

	Delay(333);	// 40ms

	SLcdRegSet(0x07, 0x0026);

	Delay(333);	// 40ms

	SLcdRegSet(0x07, 0x0004);

	SLcdRegSet(0x0a, 0x0100);
}

void SLcdInternalModeChange(void)
{
	SLcdRegSet(0x0c, 0x0002);

	Delay(167);	// 20000 us / 120 us = 167
}

void SLcdRGBModeChange(void)
{
	SLcdRegSet(0x21, 0x0000);
	
	SLcdRegSet(0x0c, 0x0112);

	SLcdSpiSet(0, 0, (U16)0x22);

	//Delay(167);	// 20 ms, S3C2460X
	Delay(200);	// 20 ms
}

void SLcdSleep(void)
{
	SLcdInternalModeChange();

	SLcdDisplayOff();

	SLcdRegSet(0x10, 0x0000);

	SLcdRegSet(0x0a, 0x0100);

	SLcdRegSet(0x10, 0x0002);

	SLcdRegSet(0x0a, 0x0100);
}

void SLcdSleepWakeUp(void)
{
	SLcdRegSet(0x10, 0x0000);

	SLcdRegSet(0x0a, 0x0100);

	SLcdPowerSet();

	SLcdDisplayOn();

	SLcdRGBModeChange();
}

void SLcdStangBy(void)
{
	SLcdInternalModeChange();

	SLcdDisplayOff();

	SLcdRegSet(0x10, 0x0000);

	SLcdRegSet(0x0a, 0x0100);

	SLcdRegSet(0x10, 0x0001);
}

void SLcdStandByWakeUp(void)
{
	SLcdRegSet(0x00, 0x0001);

	Delay(83);	// 10000 / 120 = 83

	SLcdRegSet(0x10, 0x0000);

	SLcdInit1();

	SLcdPowerSet();

	SLcdInit2();

	SLcdRGBModeChange();

	SLcdDisplayOn();

	SLcdRegSet(0x21, 0x0000);
	SLcdSpiSet(0, 0, (U16)0x22);
}    

⌨️ 快捷键说明

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