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

📄 lcdlib.c

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 C
📖 第 1 页 / 共 3 页
字号:
{
	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);
}    



//041231
void delayLoop(int count) 
{ 
    int j; 
    for(j = 0; j < count; j++)  ; 
}

//041231
void Write_LDI(int address, int data)
{
    	int     j;
	//unsigned char DELAY=100;
	unsigned char DELAY=10;

	LCD_DEN_Hi; 		//	EN = High					CS high
//	LCD_DCLK_Lo;					
	LCD_DCLK_Hi;							//	SCL High
	LCD_DSERI_Lo;							//	Data Low


	delayLoop(DELAY);

	LCD_DEN_Lo; 		//	EN = Low				CS Low
	delayLoop(DELAY);

	LCD_DCLK_Lo;							//	SCL Low

	delayLoop(DELAY);

	for (j = 7; j >= 0; j--)
	{

		if ((address >> j) & 0x0001)	// DATA HIGH or LOW
			LCD_DSERI_Hi;
		else
			LCD_DSERI_Lo;

		delayLoop(DELAY);

		LCD_DCLK_Hi;			// CLOCK = High
		delayLoop(DELAY);

		if(j != 0)
		{
			LCD_DCLK_Lo;
			delayLoop(DELAY);			// CLOCK = Low
		}
	}

	LCD_DSERI_Lo;							// Data Low
	delayLoop(DELAY);

	LCD_DEN_Hi; 		//	EN = High
	delayLoop(DELAY);

	LCD_DEN_Lo; 		//	EN = Low
	delayLoop(DELAY);

	
	LCD_DCLK_Lo;
	delayLoop(DELAY);			// CLOCK = Low
	
	for (j = 7; j >= 0; j--)
	{

		if ((data >> j) & 0x0001)	// DATA HIGH or LOW
			LCD_DSERI_Hi;
		else
			LCD_DSERI_Lo;

		delayLoop(DELAY);

		LCD_DCLK_Hi;			// CLOCK = High
		delayLoop(DELAY);

		if(j != 0)
		{
			LCD_DCLK_Lo;
			delayLoop(DELAY);			// CLOCK = Low
		}
	}

	LCD_DEN_Hi; 				// EN = High
	delayLoop(DELAY);

}


void InitLDI(void)
{
	// Start LCD clock 		max : 6MHz
	//Reg16_OPCLK_DIV = 0x0202;	 			// 6.4
	
	SET_CONFIG_PORT;
/*	rGPGCON = (rGPGCON&~((0xf<<12)|(0x3<<4)))|(5<<12)|(1<<4);
	rGPGUP = 0xffff;
*/

/*
	LCD_DEN_Hi;
	LCD_DCLK_Hi;
	LCD_DSERI_Hi;
	LCD_RESET_Hi;
	Uart_Printf("ALL High\n"); UartGetChar();

	LCD_DEN_Lo;
	Uart_Printf("LCD_DEN_Lo\n");	UartGetChar();
	LCD_DCLK_Lo;
	Uart_Printf("LCD_DCLK_Lo\n");	UartGetChar();
	LCD_DSERI_Lo;
	Uart_Printf("LCD_DSERI_Lo\n");	UartGetChar();
	
	LCD_RESET_Hi;
*/
	
	LCD_DEN_Hi;
	LCD_DCLK_Hi;
	LCD_DSERI_Hi;
	LCD_RESET_Hi;

	//LCD CLK is about 4.05Mhz
	//rDIRGBIFR1=(18<<0);  //LCLK=HCLK/(CDR+2)=81/(18+2)=4.05Mhz	
	//rDIRGBIFR0|=(1<<12); //LCD panel on


	// LCD Reset high
	LCD_RESET_Hi;	  
//	delayLoop(50000);

	///////////////////////////////////////////////////////////////////
	// Power Setting Function 1
	//////////////////////////////////////////////////////////////////
	Write_LDI(0x22,0x01);	 // PARTIAL 2 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
	Write_LDI(0x03,0x01);	 // RESET REGISTER


	///////////////////////////////////////////////////////////////////
	// Initializing Function 1
	///////////////////////////////////////////////////////////////////
	Write_LDI(0x00,0x0a);	 // CONTROL REGISTER 1
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x01,0x10);	 // CONTROL REGISTER 2
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x02,0x00);	 // RGB INTERFACE REGISTER
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x05,0x00);	 // DATA ACCESS CONTROL REGISTER
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x0D,0x00);	 // 

	// delay about 40ms
	delayLoop(700000);					


	///////////////////////////////////////////////////////////////////
	// Initializing Function 2
	///////////////////////////////////////////////////////////////////
	Write_LDI(0x0E,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x0F,0x00);	 // 
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x10,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x11,0x00);  //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x12,0x00);  //
	delayLoop(5);  // delay about 300ns 
	Write_LDI(0x13,0x00);  // DISPLAY SIZE CONTROL REGISTER
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x14,0x00);  // PARTIAL-OFF AREA COLOR REGISTER 1
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x15,0x00);  // PARTIAL-OFF AREA COLOR REGISTER 2
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x16,0x00);  // PARTIAL 1 DISPLAY AREA STARTING REGISTER 1
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x17,0x00);  // PARTIAL 1 DISPLAY AREA STARTING REGISTER 2
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x34,0x01);  // POWER SUPPLY SYSTEM CONTROL REGISTER 14
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x35,0x00);  // POWER SUPPLY SYSTEM CONTROL REGISTER 7

	// delay about 30ms
	delayLoop(500000);


	////////////////////////////////////////////////////////////////////
	// Initializing Function 3
	////////////////////////////////////////////////////////////////////
	Write_LDI(0x8D,0x01);	 //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x8B,0x28);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x4B,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x4C,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x4D,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x4E,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x4F,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x50,0x00);	 //  ID CODE REGISTER 2 						Check it out

	// delay about 50 us
	delayLoop(900);

	Write_LDI(0x86,0x00);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x87,0x26);	 //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x88,0x02);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x89,0x05);	 //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x33,0x01);	 //  POWER SUPPLY SYSTEM CONTROL REGISTER 13
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x37,0x06);	 //  POWER SUPPLY SYSTEM CONTROL REGISTER 12		Check it out

	// delay about 50 us
	delayLoop(900);

	Write_LDI(0x76,0x00);	 //  SCROLL AREA START REGISTER 2

	// delay about 30ms
	delayLoop(500000);


	/////////////////////////////////////////////////////////////////////
	// Initializing Function 4
	/////////////////////////////////////////////////////////////////////
	Write_LDI(0x42,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x43,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x44,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x45,0x00);  //  CALIBRATION REGISTER
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x46,0xef);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x47,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x48,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x49,0x01);  //  ID CODE REGISTER 1							check it out

	// delay about 50 us
	delayLoop(900);

	Write_LDI(0x4A,0x3f);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x3C,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x3D,0x00);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x3E,0x01);  //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x3F,0x3f);  //
	delayLoop(5);  // delay about 300ns
//	Write_LDI(0x40,0x03);  //	horizontal back porch	
	Write_LDI(0x40,0x01);  //	horizontal back porch	 //050105 Boaz.Kim
	delayLoop(5);  // delay about 300ns
//	Write_LDI(0x41,0x04);  //	vertical back porch
	Write_LDI(0x41,0x0a);  //	horizontal back porch	//050105 Boaz.Kim
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x8F,0x05);  //

	// delay about 30ms
	delayLoop(500000);

	/////////////////////////////////////////////////////////////////////
	// Initializing Function 5
	/////////////////////////////////////////////////////////////////////
	Write_LDI(0x90,0x05);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x91,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x92,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x93,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x94,0x33);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x95,0x05);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x96,0x05);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x97,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x98,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x99,0x44);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x9A,0x33);  //  
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x9B,0x33);  //
	delayLoop(5);  // delay about 300ns
	Write_LDI(0x9C,0x33);  //
	delayLoop(5);  // delay about 300ns

#if 1	
	Write_LDI(0x9D,0x80);  //	16 or 18bit RGB
#else
	Write_LDI(0x9D,0x81);  //	6bit RGB
#endif

	// delay about 30ms
	delayLoop(500000);


	/////////////////////////////////////////////////////////////////////
	// Power Setting 2
	/////////////////////////////////////////////////////////////////////
	Write_LDI(0x1D,0x08);  //

	// delay about 30ms
	delayLoop(500000);
	  
	Write_LDI(0x23,0x00);  //  PARTIAL 2 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2
	// delay about 50 us
	delayLoop(900);
	Write_LDI(0x24,0x94);  //  POWER SUPPLY SYSTEM CONTROL REGISTER 1
	// delay about 50 us
	delayLoop(900);
	Write_LDI(0x25,0x6f);  //  POWER SUPPLY SYSTEM CONTROL REGISTER 2

	// delay about 40ms
	delayLoop(700000);					


	/////////////////////////////////////////////////////////////////////
	// Power Setting 3
	/////////////////////////////////////////////////////////////////////
	Write_LDI(0x28,0x1e);  // 
	Write_LDI(0x1A,0x00);  // 
	Write_LDI(0x21,0x10);  //  PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2 
	Write_LDI(0x18,0x25);  //  PARTIAL 2 DISPLAY AREA STARTING REGISTER 1

	// delay about 40ms
	delayLoop(700000);					

	Write_LDI(0x19,0x48);  //  PARTIAL 2 DISPLAY AREA STARTING REGISTER 2
	Write_LDI(0x18,0xe5);  //  PARTIAL 2 DISPLAY AREA STARTING REGISTER 1

	// delay about 10ms
	delayLoop(200000);					

	Write_LDI(0x18,0xF7);  //  PARTIAL 2 DISPLAY AREA STARTING REGISTER 1 

	// delay about 40ms
	delayLoop(700000);					

	Write_LDI(0x1B,0x07);  // org
//	Write_LDI(0x1B,0x01);  // 90 rotate
//	Write_LDI(0x1B,0x02);  // 90 rotate
//	Write_LDI(0x1B,0x03);  // 90 rotate


	// delay about 80ms
	delayLoop(1400000); 				

	Write_LDI(0x1F,0x6b);  // org
//	Write_LDI(0x1F,0x5E);  // 90 rotate

	Write_LDI(0x20,0x51);  //  org, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
//	Write_LDI(0x20,0x5F);  //  90 rotate, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1

	Write_LDI(0x1E,0xc1);  // 

	// delay about 10ms
	delayLoop(200000);					

	Write_LDI(0x21,0x00);  //  PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2 
	Write_LDI(0x3B,0x01);  // 

	// delay about 20ms
	delayLoop(400000);					

	Write_LDI(0x00,0x20);  //  CONTROL REGISTER 1
	Write_LDI(0x02,0x01);  //  RGB INTERFACE REGISTER

	// delay about 10ms
	delayLoop(200000);					
	
//	Reg16_OPCLK_DIV = 0x0201;	 			// 6.4

}

⌨️ 快捷键说明

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