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

📄 init.c

📁 支持三星原产的S3C2413开发板
💻 C
📖 第 1 页 / 共 3 页
字号:
	// delay about 40ms
	//delayLoop(700000);					
	delayLoop(7000);	// DonGo

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

	// delay about 10ms
	//delayLoop(200000);					
	delayLoop(2000);	// DonGo

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

	// delay about 40ms
	//delayLoop(700000);					
	delayLoop(7000);	// DonGo

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


	// delay about 80ms
	//delayLoop(1400000); 				
	delayLoop(14000);	// DonGo

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

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

	WriteLDI_LTS222(0x1E,0xc1);  // 

	// delay about 10ms
	//delayLoop(200000);					
	delayLoop(20000);	// DonGo

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

	// delay about 20ms
	//delayLoop(400000);					
	delayLoop(4000);	// DonGo

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



	// delay about 10ms
	//delayLoop(200000);					
	delayLoop(2000);		// DonGo
	
//	Reg16_OPCLK_DIV = 0x0201;	 			// 6.4
}
#endif // #if WIDE_LCD==1

/*
	@func   void | InitDisplay | Initializes the LCD controller and displays a splashscreen image.
	@rdesc  N/A.
	@comm	
	@xref   
*/
static void InitDisplay(void)
{
	volatile S3C2413_IOPORT_REG *s2413IOP = (S3C2413_IOPORT_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_IOPORT, FALSE);
	volatile S3C2413_LCD_REG	*s2413LCD = (S3C2413_LCD_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_LCD, FALSE);
	unsigned int clkval_calc;  // 040507

#if WIDE_LCD==1
	RETAILMSG(1, (TEXT("WIDE_LCD is defined...\r\n")));

	// LCD Reset
	s2413IOP->GPEDAT |= (1<<11);	// Reset High
	s2413IOP->GPECON &= ~(3<<22);
	s2413IOP->GPECON |= (1<<22);
	
	delayLoop(500);
	s2413IOP->GPEDAT &= ~(1<<11);	// Reset Low
	delayLoop(1000);
	s2413IOP->GPEDAT |= (1<<11);	// Reset High

	InitLDI_LTV350(); // Initializing LDI    

#else
	// Set up the LCD controller registers to display a power-on bitmap image.
	//
	// From firmware code.

	InitLDI_LTS222();
#endif
	// LCD Port Init.
#ifdef SMDK2413_REV14
	s2413IOP->GPCDAT &= ~(1<<4);	// inseted by J.I for V1.4
#endif
	s2413IOP->GPCDN=0xffff; // Disable Pull-up register
	s2413IOP->GPCCON=0xaaaaaaa8; //aa8; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND 
	s2413IOP->GPDDN=0xffff; // Disable Pull-up register
	s2413IOP->GPDCON=0xaaaaaaaa; //Initialize VD[23:8]
	s2413IOP->GPBDN |= (0x1<<5);
	s2413IOP->GPBCON = (s2413IOP->GPBCON & ~(0x3<<10))|(0x1<<10);

	// LCD Power Enable
	//Now, BACKLIGHT_PWM is always on. It should be changed to controlling PWM Timer @ September 24, 2005
	s2413IOP->GPBDN |= 0x1;
	s2413IOP->GPBDAT |= 0x1;
#ifdef SMDK2413_REV14
	s2413IOP->GPGDN |= (1<<4);
	s2413IOP->GPGDAT |= (1<<4);
#endif
	s2413IOP->GPGCON = (s2413IOP->GPGCON & ~(0x3<<8))|(1<<8);

//	s2413IOP->GPBCON = (s2413IOP->GPBCON & ~(0x3<<10))|(0x1);
	s2413IOP->GPBCON = (s2413IOP->GPBCON & ~(0x3<<2))|(0x1<<2);


	clkval_calc = (WORD)((float)(S3C2413_HCLK)/(2.0*5000000)+0.5)-1;	// 9 or 12
	
	s2413LCD->LCDCON1   =  (clkval_calc		<<  8) |	   /* VCLK = HCLK / ((CLKVAL + 1) * 2) -> About 7 Mhz  */
						   (LCD_MVAL_USED	<<  7)  |	   /* 0 : Each Frame								   */
						   (3		 			<<  5) |	   /* TFT LCD Pannel								   */
						   (12	 			<<  1) |	   /* 16bpp Mode									   */
						   (0		  			<<  0) ;	   /* Disable LCD Output							   */

	s2413LCD->LCDCON2   =  (LCD_VBPD		<< 24) |   /* VBPD		  :   1							  */
						   (LCD_LINEVAL_TFT 	<< 14) |   /* Vertical Size : 320 - 1						  */
						   (LCD_VFPD			<<  6) |   /* VFPD		  :   2							  */
						   (LCD_VSPW			<<  0) ;   /* VSPW		  :   1							  */

	s2413LCD->LCDCON3   =  (LCD_HBPD		<< 19) |   /* HBPD		  :   6							  */
						   (LCD_HOZVAL_TFT  	<<  8) |   /* HOZVAL_TFT	: 240 - 1						  */
						   (LCD_HFPD			<<  0) ;   /* HFPD		  :   2							  */


	s2413LCD->LCDCON4   =  (LCD_MVAL		<<  8) |   /* MVAL		  :  13							  */
						   (LCD_HSPW			<<  0) ;   /* HSPW		  :   4							  */

	s2413LCD->LCDCON5   =  (0	   << 12) |	   /* BPP24BL	   : LSB valid						*/
						   (1		   << 11) |	   /* FRM565 MODE   : 5:6:5 Format					 */
						   (0		   << 10) |	   /* INVVCLK	   : VCLK Falling Edge				*/
						   (1		   <<  9) |	   /* INVVLINE	  : Inverted Polarity				*/
						   (1		   <<  8) |	   /* INVVFRAME	 : Inverted Polarity				*/
						   (0		   <<  7) |	   /* INVVD		 : Normal						   */
						   (0		   <<  6) |	   /* INVVDEN	   : Normal						   */
						   (0		   <<  5) |	   /* Reserved : should be '0'. before, INVPWREN	  : Normal						   */
						   (0		   <<  4) |	   /* INVENDLINE	: Normal						   */
						   (0/*1*/		<<  3) |	/* Reserved : should be '0'. before, PWREN		 : Disable PWREN					*/
						   (0		   <<  2) |	   /* ENLEND		: Disable LEND signal			  */
						   (0		   <<  1) |	   /* BSWP		  : Swap Disable					 */
						   (1		   <<  0) ;	   /* HWSWP		 : Swap Enable					  */

	s2413LCD->LCDSADDR1 = ((IMAGE_FRAMEBUFFER_DMA_BASE >> 22)	 << 21) | 
						  ((M5D(IMAGE_FRAMEBUFFER_DMA_BASE >> 1)) <<  0);

	s2413LCD->LCDSADDR2 = M5D((IMAGE_FRAMEBUFFER_DMA_BASE + (LCD_XSIZE_TFT * LCD_YSIZE_TFT * 2)) >> 1);

	s2413LCD->LCDSADDR3 = (((LCD_XSIZE_TFT - LCD_XSIZE_TFT) / 1) << 11) | (LCD_XSIZE_TFT / 1);		

#ifdef DVS_EN
#if (DVS_METHOD == 1 || DVS_METHOD == 3)
	// Enable LCD Interrupt for DVS + CLOCK Change.
	s2413LCD->LCDINTMSK = (1); // UnMASK LCD Frame Sub Interrupt
#endif
#else
	s2413LCD->LCDINTMSK|=(3); // MASK LCD Sub Interrupt
#endif
#ifdef SMDK2413_REV14
	s2413LCD->TCONSEL = 0;	
#else
	s2413LCD->TCONSEL&=(~7); // Disable LPC3600
#endif

	s2413LCD->TPAL=0; // Disable Temp Palette
	// Display a bitmap image on the LCD...
	//
	memcpy((void *)IMAGE_FRAMEBUFFER_UA_BASE, ScreenBitmap, LCD_ARRAY_SIZE_TFT_16BIT);

	s2413LCD->LCDCON1|=1; // ENVID=ON

	// while (1) ;//

}
// LCD function end...
//=============================================================

void ConfigureGPIO()
{

	volatile S3C2413_IOPORT_REG *s2413IOP = (S3C2413_IOPORT_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_IOPORT, FALSE);
	volatile S3C2413_CLKPWR_REG *s2413CLKPWR = (S3C2413_CLKPWR_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_CLOCK_POWER, FALSE);
#if 0	
	s2413IOP->GPACON	= 0x7fffff;

	s2413IOP->GPBDAT	= 0x62;
	s2413IOP->GPBDN	 = 0x7FF;
	s2413IOP->GPBCON	= 0x2A96A4;

	s2413IOP->GPCDN	 = 0xFFFF;
	s2413IOP->GPCCON	= 0xAAAAAAAA;
									
	s2413IOP->GPEDAT	= 0x1;
	s2413IOP->GPDDN	 = 0xFFFF;
	s2413IOP->GPDCON	= 0xAAAAAAA1;
	
	s2413IOP->GPEDAT	= 0x0;
	s2413IOP->GPEDN	 = 0xFFFF;
	s2413IOP->GPECON	= 0xAAAAAAAA;
	
	s2413IOP->GPFDAT	= 0xF0;
	s2413IOP->GPFDN	 = 0xFF;
	s2413IOP->GPFCON	= 0x55aa;
	
	s2413IOP->GPGDAT	= 0x1000;
	s2413IOP->GPGDN	 = 0xFEFF;
	s2413IOP->GPGCON	= 0x0480FFBA;
	s2413IOP->GPGDAT	|= 0x1<<12;
	s2413IOP->GPGDN	 |= 0x1<<12;
	s2413IOP->GPGCON	= (s2413IOP->GPGCON & ~(0x3<<24)) | 0x1<<24;

	s2413IOP->GPHDAT	= 0x0;
	s2413IOP->GPHDN	 = 0x7FF;
	s2413IOP->GPHCON	= 0x14AAAA;

	s2413IOP->GPJDAT	= 0x1000;
	s2413IOP->GPJDN	 = 0x1FFF;
	s2413IOP->GPJCON	= 0x1AAAAA;

	s2413IOP->MISCCR &= ~(7<<20);
	s2413IOP->MISCCR |= (4<<20);
	s2413IOP->MISCCR &= ~(7<<8);
	s2413IOP->MISCCR |= (5<<8);
	s2413IOP->MISCCR &= ~(7<<4);
	s2413IOP->MISCCR |= (5<<4);
	s2413IOP->MISCCR |= (3<<0);
#endif	

#if 0
	// For USBDevice...
	s2413IOP->GPFCON &= ~(3<<4);
	s2413IOP->GPFCON |=  (1<<4); // output
	s2413IOP->GPFDN  |=  (1<<2); // pulldown disable
	s2413IOP->GPFDAT |=  (1<<2); // output	
	
	//USB port 1 setting
	s2413IOP->MISCCR=s2413IOP->MISCCR&~(1<<3);  // USBD is selected instead of USBH1 
	s2413IOP->MISCCR=s2413IOP->MISCCR&~(1<<13); // USB port 1 is enabled.
	// USB clock setting
#endif

}

#ifdef DVS_EN
void ChangeVoltage(int vtg)
{
	volatile S3C2413_IOPORT_REG *s2413IOP = (S3C2413_IOPORT_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_IOPORT, FALSE);
	UINT8 temp;
	
//  port setting  
// GPF4:D0, GPF5:D1, GPF6:D2, GPF7:D3, GPB7:D4, GPB8:Latch enable
	CurrVoltage = vtg;
	temp = s2413IOP->GPFDAT;
	switch(vtg) {
	case V090:	// 0.9V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(1<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(0<<6)|(1<<5)|(1<<4);   //D3~0
		break;
	case V095:	// 0.95V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(1<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(0<<6)|(0<<5)|(1<<4);   //D3~0
		break;
	case V0975:	// 0.975V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(1<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(0<<6)|(0<<5)|(0<<4);   //D3~0
		break;
	case V100:	// 1.0V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(1<<5)|(1<<4);   //D3~0
		break;
	case V105:	// 1.05V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(1<<5)|(0<<4);   //D3~0
		break;
	case V110:	// 1.1V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(0<<5)|(1<<4);   //D3~0
		break;
	case V115:	// 1.15V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(0<<5)|(0<<4);   //D3~0
		break;
	case V120:	// 1.2V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(1<<5)|(1<<4);   //D3~0
		break;
	case V125:	// 1.25V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(1<<5)|(0<<4);   //D3~0
		break;
	case V130:	// 1.3V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(0<<5)|(1<<4);   //D3~0
		break;
	case V135:	// 1.35V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(0<<5)|(0<<4);   //D3~0
		break;
	case V140:	// 1.4V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(1<<6)|(1<<5)|(1<<4);   //D3~0
		break;
	case V145:	// 1.45V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(1<<6)|(1<<5)|(0<<4);   //D3~0
		break;
	case V150:	// 1.5V
		s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7);   //D4
		s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(1<<6)|(0<<5)|(1<<4);   //D3~0
		break;

	default:
		break;
	}

//  port setting  
// GPF4:D0, GPF5:D1, GPF6:D2, GPF7:D3, GPB7:D4, GPB8:Latch enable, GPB10: OE
	s2413IOP->GPBCON=(s2413IOP->GPBCON&0x3f3fff)|(1<<14);   // GPB7: Output
//	s2413IOP->rGPBUP&=~(1<<7);
	s2413IOP->GPFCON=(s2413IOP->GPFCON&0x00ff)|(0x5500);  // GPF4~7: Output 
//	s2413IOP->rGPFUP&=~(0xf<<4);

	s2413IOP->GPBDAT&=~(1<<8);   //Latch enable
	s2413IOP->GPBCON=(s2413IOP->GPBCON&0x3cffff)|(1<<16);   // GPB8: Output

	s2413IOP->GPBDAT|=(1<<10);   //Output enable
	s2413IOP->GPBCON=(s2413IOP->GPBCON&0x0fffff)|(1<<20);   // GPB10: Output
	
//	s2413IOP->rGPBUP&=~(1<<8);
	s2413IOP->GPBDAT|=(1<<8);   //Latch disable
	
	s2413IOP->GPFDAT = temp;
}

int GetCurrentVoltage(void)
{
	return CurrVoltage;
}
#endif

//=================================================================
// User test code...
volatile S3C2413_IOPORT_REG *g_pIOPRegs;
volatile S3C2413_INTR_REG *g_pINTRegs;
volatile S3C2413_CLKPWR_REG *g_pCLKRegs;
volatile S3C2413_MEMCTRL_REG *g_pMEMRegs;

void user_test(void)
{
	g_pINTRegs		= (S3C2413_INTR_REG*)OALPAtoVA(S3C2413_BASE_REG_PA_INTR, FALSE);
	g_pIOPRegs		= (S3C2413_IOPORT_REG*)OALPAtoVA(S3C2413_BASE_REG_PA_IOPORT, FALSE);
	g_pCLKRegs		= (S3C2413_CLKPWR_REG*)OALPAtoVA(S3C2413_BASE_REG_PA_CLOCK_POWER, FALSE);	
	g_pMEMRegs		= (S3C2413_MEMCTRL_REG*)OALPAtoVA(S3C2413_BASE_REG_PA_MEMCTRL, FALSE);		

	RETAILMSG(1, (TEXT("\n--------------------------------------\n")));
	RETAILMSG(1, (TEXT("User_test() start.\n")));

	// Start User test code...



	RETAILMSG(1, (TEXT("FCLK out to GPH10....\n")));
	g_pIOPRegs->MISCCR &= ~((7<<8) | (7 <<4));	// CLKSEL1. CLKSEL0
	g_pIOPRegs->MISCCR |= (2<<8) | (3<<4) ;		// Clockout1 = FCLK(2). Clkout0=HCLK(3), FCLK(4)

	g_pIOPRegs->GPHCON |= (1<<10);		// GPH10 Pull-down disable.
	g_pIOPRegs->GPHCON &= ~(3<<20);	// Clear GPH10.
	g_pIOPRegs->GPHCON |= (2<<20);		// GPH10=CLKOUT1.

	g_pIOPRegs->GPHCON |= (1<<9);
	g_pIOPRegs->GPHCON &= ~(3<<18);
	g_pIOPRegs->GPHCON |= (2<<18);		// GPH9=CLKOUT0

//	s2413IOP->MISCCR = (s2413IOP->MISCCR & ~(0x7 << 8)) | (0x3 << 8);		// CLKSEL1,     011 -> HCLK
//	s2413IOP->MISCCR = (s2413IOP->MISCCR & ~(0x7 << 4)) | (0x4 << 4);		// CLKSEL0,     100 -> PCLK
//	s2413IOP->GPHCON = (s2413IOP->GPHCON & ~(0x3 << 18)) | (0x2 << 18);		// GPH9 -> CLKOUT0
//	s2413IOP->GPHCON = (s2413IOP->GPHCON & ~(0x3 << 20)) | (0x2 << 20);		// GPH10 -> CLKOUT1
	

	RETAILMSG(1,(_T(" - BANKCFG:%xh.\n"), g_pMEMRegs->BANKCFG));
	RETAILMSG(1,(_T(" - BANKCON1:%xh.\n"), g_pMEMRegs->BANKCON1));
	RETAILMSG(1,(_T(" - BANKCON2:%xh.\n"), g_pMEMRegs->BANKCON2));
	RETAILMSG(1,(_T(" - BANKCON3:%xh.\n"), g_pMEMRegs->BANKCON3));
	RETAILMSG(1,(_T(" - REFRESH:%xh.\n"), g_pMEMRegs->REFRESH));
	RETAILMSG(1,(_T(" - TIMEOUT:%xh.\n"), g_pMEMRegs->TIMEOUT));		

	RETAILMSG(1, (TEXT("MISCCR:%xh\r\n"), g_pIOPRegs->MISCCR));

	// End User test code...

	RETAILMSG(1, (TEXT("User_test() end.\n")));
	RETAILMSG(1, (TEXT("--------------------------------------\n")));

}
//=================================================================

⌨️ 快捷键说明

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