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

📄 sleep.c

📁 samsung 最新芯片2450 的测试程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************

  NAME: sleep.c
  DESC: Sleep mode test
  HISTORY:
  08.24.2002:purnnamu
	LCDVFn is connected the analog circuit in LCD. 
	So, this signal should be output L.
  05.xx.2003:DonGo modifid for 2442X, Power-off -> Sleep. naming change.
  12.04.2006:grmoon
  	- S3C2443 GPIO configuration setup
  10.31.2007: SKY
  	- Modified for 2450	
 ****************************************************************/
#include "System.h"
#include "sleep.h"

static void __irq Eint0Int(void)
 {
 	printf("INTPND:%x, SRCPND:%x \n", rINTPND, rSRCPND);
	rEINTMASK |= (1<<0);	
	rEINTPEND |= (1<<0);
	ClearPending(BIT_EINT0);
	printf("EINT0 interrupt is occurred for Sleep wake-up.\n");
}
#if 0
static void __irq Eint11Int(void)
 {
 	printf("INTPND:%x, SRCPND:%x \n", rINTPND, rSRCPND);
	rEINTMASK |= (1<<11);
	rEINTPEND |= (1<<11);
	ClearPending(BIT_EINT8_23);
	printf("EINT11 interrupt is occurred for Sleep wake-up.\n");
}
#endif
static void __irq AlarmInt(void)
{
	printf("INTPND:%x, SRCPND:%x \n", rINTPND, rSRCPND);
	rINTMSK |= BIT_RTC;	
	ClearPending(BIT_RTC);	
	printf("ALARM interrupt is occurred for Sleep wake-up.\n");
	//rRTCCON = 0x0;	// R/W disable, but interrupt will be generated.
}

static void __irq TickInt(void)
{
	printf("INTPND:%x, SRCPND:%x \n", rINTPND, rSRCPND);
	rINTMSK |= BIT_TICK;	
	ClearPending(BIT_TICK);
	printf("Tick interrupt is occurred for Sleep wake-up.\n");
	rTICNT0 &=~(0x1<<7);	// Tick Time Interrupt disable	
}

static void __irq BattFaultInt(void)
{
	printf("INTPND:%x, SRCPND:%x \n", rINTPND, rSRCPND);
	rINTMSK|= (BIT_BAT_FLT);	// mask.
	ClearPending(BIT_BAT_FLT)
	printf("BATT_FLT interrupt is occurred for Sleep wake-up.\n");

}

//================================================================================
void Test_SleepMode(void)
{
	//U32 portStatus1[32]; // A ~ H,  8*4=32
	//U32 portStatus2[16]; // J ~ M,  4*4=16	   
	printf("[SLEEP Mode Test]\n");
	printf("S3C2450 will wake up by EINT0 (Falling Edge Triggered).\n");

	rGPFCON = (rGPFCON & ~0x3)|(2<<0);			//GPF0 = EINT0
	rGPGCON = (rGPGCON & ~0xc0)|(2<<6);		//GPG3 = EINT11	
	rGPFUDP= (rGPFUDP & ~0x3);			//GPF0 up down disable
	rGPGUDP= (rGPGUDP & ~0xc0);		//GPG3 = EINT11	up down disable
	rEXTINT0 = (rEXTINT0 | (1<<3)); //EINT0 filter enable
	rEXTINT1 = (rEXTINT1 | (1<<15));//EINT11 filter enable
	rEXTINT0 = (rEXTINT0 & ~(7<<0))  | (0x2<<0) ; //EINT0=falling edge triggered
	rEXTINT1 = (rEXTINT1 & ~(7<<12)) | (0x2<<12); //EINT11=falling edge triggered

	pISR_EINT0=(U32)Eint0Int;
	//pISR_EINT8_23=(U32)Eint11Int;
	pISR_BAT_FLT = (U32)BattFaultInt;
	pISR_RTC=(U32)AlarmInt;	
	pISR_TICK	  = (U32)TickInt;	
	
	rEINTPEND = 0xffffff;
	rSRCPND = BIT_EINT0|BIT_EINT8_23|BIT_BAT_FLT|BIT_RTC|BIT_TICK; //to clear the previous pending states
	rINTPND = BIT_EINT0|BIT_EINT8_23|BIT_BAT_FLT|BIT_RTC|BIT_TICK;



	#if 1
 	printf("Alarm wake-up (y/n)? ");
	if(getchar()=='y')
	{
		printf("\nS3C2450 will wake up by RTC alarm(10 sec) \n");
		SetAlarmWakeUp();
	}

	printf("RTC tick interrupt (y/n)? ");
	if(getchar()=='y')
	{
		printf("\nS3C2450 will wake up by RTC tick(4 sec) \n");
		RTC_TimeTickSet();  // wake up will be occurred after 4sec!!!
	}
	
	#endif
	
	rINFORM1+=1;
	/*	
	rINFORM2=0x77777777;
	rINFORM3=0x99999999;
	
	rGSTATUS3 = 0x55555555;
	rGSTATUS4 = 0xaaaaaaaa;
	*/	

	#if 0 // sdram test

	// if(rINFORM1!=0x0)
	if(1)		
	{
		a=0x30000000;
		for(i=0x31000000;i<(0x31000000+0x3f0000);i+=4)
		{
		//if(*((unsigned int *)i)!=(0xaaaa5555))
		if(*((unsigned int *)i)!=*((unsigned int *)a))
    		{
    	    		printf("Mem Error:%x=%x(%x)\n",i,*((unsigned int *)i),i^0x5555aaaa);
    	    		error++;
    		}
    		if(error>20)
	   	 break;
    		a+=4;
		}
		if(error)
		printf("SDRAM self-refresh test:FAILED\n"); 
		else 
		printf("SDRAM self-refresh test:O.K.\n");	
		}
	a=0x30000000;
	for(i=0x31000000;i<(0x31000000+0x3f0000);i+=4)
	{
    	*((unsigned int *)i)=*((unsigned int *)a);
    	//*((unsigned int *)i)=0xaaaa5555;
    	a+=4;
	}
	printf("write done\n");
	Uart_TxEmpty();
	#endif    
    
	//ConfigSleepGPIO();
    

	//printf("GPFCON=%08x, GPFUDP=%08x, , GPFDAT=%08x \n",rGPFCON, rGPFUDP, rGPFDAT);
	//printf("VIDCON0=%08x, LCDCON1=%08x \n",rVIDCON0, rLCDCON1);
	rADCCON|=(1<<2);
	/* Pin Configuration in Sleep Mode */
	rMISCCR|=(1<<12); //USB port0 = suspend
	//Lcd_EnvidOnOff(0);  // jcs 060610 			//LCD must be off before entering Sleep mode.	
	//set flag sleep wakeup : rINFORM0 = 0x2BED
	rINFORM0 = 0x2BED;

 	//Delay(20000);


	// Entering the SLEEP mode
	//*************************//
	printf("\nNow, I am entering Sleep mode.\n");
	printf("Sleep count: %x\n", rINFORM1);	
	rRSTCON=0x1ff80;
	rOSCSET=0xffff;	
	#if 1
 	printf("WFI mode(y/n)? ");
	if(getchar()=='y')
	{
	Uart_TxEmpty();	//Wait until UART0 Tx buffer empty.		
	rEINTMASK &= ~((1<<11)|(1<<0));
	rINTMSK &= ~(BIT_EINT0|BIT_EINT8_23|BIT_BAT_FLT|BIT_RTC|BIT_TICK);	
	rPWRCFG=(1<<15)|(0<<9)|(0<<8)|(0<<7)|(0<<4)|(0<<3)|(0<<2)|(1<<0);

	rPWRCFG|=(1<<17);	
	rPWRCFG&=~(0x3<<5)|(0x03<<5);	
	MMU_WaitForInterrupt();
	}
	else
	#endif
	{	
	Uart_TxEmpty();	//Wait until UART0 Tx buffer empty.		
	rEINTMASK &= ~((1<<11)|(1<<0));
	rINTMSK &= ~(BIT_EINT0|BIT_EINT8_23|BIT_BAT_FLT|BIT_RTC|BIT_TICK);	
	rPWRCFG=(1<<15)|(0<<9)|(1<<8)|(1<<7)|(0<<4)|(0<<3)|(0<<2)|(1<<0);
	
	rPWRMODE=rPWRMODE&~(0xffff<<0)| (0x2BED<<0); // Go To BED	
	}	
	

	//*************************//
	
}


void Test_SoftMode(void)
{

	printf("Software reset Test : 0x%x \n", rRSTSTAT);
		//Check wake-DN reset
	if( rRSTSTAT & (1<<0) )		// nRESET?
	{
		printf("\n__ Wake-UP by nRESET\n");
		rRSTSTAT |= (1<<0);
	}
	else if( rRSTSTAT & (1<<2) )	// WDTRST?
	{
		printf("\n__ Wake-UP by WDTRST\n");
		rRSTSTAT |= (1<<2);
	}
	else if( rRSTSTAT & (1<<3) )	// SLEEP?
	{
		printf("\n__ Wake-UP by SLEEP\n");
		rRSTSTAT |= (1<<3);
	}
	else if( rRSTSTAT & (1<<4) )	// ESLEEP?
	{
		printf("\n__ Wake-UP by Deep stop\n");
		rRSTSTAT |= (1<<4);
	}
	else if( rRSTSTAT & (1<<5) )	// SWRST?
	{
		printf("\n__ Wake-UP by SWRST\n");
		rRSTSTAT |= (1<<5);
	}
	
//	rPWRCFG|=(1<<9);  // nand reset disable

	rSWRST = 0x533c2450;
}

int batt_flag=0;
//=========================================================================
static void __irq BattFault(void)
{
	rINTMSK |= (BIT_BAT_FLT);	// mask.
	ClearPending(BIT_BAT_FLT)

	printf("BATT_FLT interrupt occured\n");
	batt_flag=1;
	//Batt_Sleep();

}

//================================================================================
void Test_BattFaultInterrupt(void)
{
	int i;
	
	printf("Battery fault interrupt test.\n");
	printf("Detect low-level.\n");

	printf("0, 2 : Ignore.\n");
	printf("1 : Generation interrupt.\n");
	printf("3 : The system enters into the Sleep mode when nBatt_flt is asserted.\n");
	printf("Select battery function : ");
	
	i = GetIntNum() & 0x3;
	
	rPWRCFG = rPWRCFG & ~(0x3<<0) |(i<<0);
	printf("%d is selected\n", i);
	
	pISR_BAT_FLT = (U32)BattFault;
	rSRCPND = BIT_BAT_FLT;
	rINTPND = BIT_BAT_FLT;
	
	if(i==3)
	{
		printf("S3C2450 will wake up by EINT0 (Falling Edge Triggered).\n");
	
		rGPFUDP &= ~(1<<1);   // Pull up down disable
		rGPFCON=rGPFCON & ~(3<<0)|(2<<0);	//GPF0=EINT0
		rEXTINT0=rEXTINT0&~(0x7<<0)|(0x2<<0);  //EINT0=falling edge triggered
		
		rPWRCFG|=(1<<15);
		printf(" PWRCFG:0x%x\n", rPWRCFG);
	}

	rINTMSK = rINTMSK & ~(BIT_BAT_FLT);	// unmask.

		while(batt_flag==0)
		{
			if(Uart_GetKey()!=0) break;	
		}
				  	
	batt_flag=0;
	rPWRCFG = rPWRCFG & ~(0x3<<0);	
	//Batt_Sleep();
	printf("exit.\n");
		
}


//===========================================================================
void Test_InitSDRAM(void)
//Initialize SDRAM for SDRAM self-refresh test.
{
	int i;
	
	printf("[SDRAM Initialization]\n");

⌨️ 快捷键说明

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