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

📄 stop.c

📁 三星2443芯片
💻 C
📖 第 1 页 / 共 2 页
字号:
	// GPC[15:0], GPD[15:0]
	
	//GPC
	rGPCCON &=~(0xffffffff<<0);
	rGPCCON |= ((0x0<<30)|(0x0<<28)|(0x0<<26)|(0x0<<24)|(0x0<<22)|(0x0<<20)|(0x0<<18)|(0x0<<16)\
	           |(0x0<<14)|(0x0<<12)|(0x0<<10)|(0x0<<8)|(0x0<<6)|(0x0<<4)|(0x0<<2)|(0x0<<0));
	
	rGPCUDP &=~(0xffffffff<<0);
	#ifdef		__EVT1	
	rGPCUDP |= ((0x2<<30)|(0x2<<28)|(0x2<<26)|(0x2<<24)|(0x2<<22)|(0x2<<20)|(0x2<<18)|(0x2<<16)
	           |(0x2<<14)|(0x2<<12)|(0x2<<10)|(0x2<<8)|(0x2<<6)|(0x2<<4)|(0x2<<2)|(0x2<<0));
	#else
	rGPCUDP |= ((0x0<<30)|(0x0<<28)|(0x0<<26)|(0x0<<24)|(0x0<<22)|(0x0<<20)|(0x0<<18)|(0x0<<16)
	           |(0x0<<14)|(0x0<<12)|(0x0<<10)|(0x0<<8)|(0x0<<6)|(0x0<<4)|(0x0<<2)|(0x0<<0));
	#endif
	
	rGPCDAT &=~ (0x1fff<<0);
	rGPCDAT |= ((0x0<<14)|(0x1<<13)|(0x0<<12)|(0x1<<11)|(0x0<<10)|(0x1<<9)|(0x1<<8)|(0x0<<3)|(0x1<<2)|(0x1<<1)|(0x1<<0));

	//GPD
	rGPDCON &=~(0xffffffff<<0);
	rGPDCON |= ((0x0<<30)|(0x0<<28)|(0x0<<26)|(0x0<<24)|(0x0<<22)|(0x0<<20)|(0x0<<18)|(0x0<<16)\
	           |(0x0<<14)|(0x0<<12)|(0x0<<10)|(0x0<<8)|(0x0<<6)|(0x0<<4)|(0x0<<2)|(0x0<<0));	           
	
	           
	rGPDUDP &=~(0xffffffff<<0);
	#ifdef		__EVT1
	rGPDUDP |= ((0x2<<30)|(0x2<<28)|(0x2<<26)|(0x2<<24)|(0x2<<22)|(0x2<<20)|(0x2<<18)|(0x2<<16)\
	           |(0x2<<14)|(0x2<<12)|(0x2<<10)|(0x2<<8)|(0x2<<6)|(0x2<<4)|(0x2<<2)|(0x2<<0));
	#else
	rGPDUDP |= ((0x0<<30)|(0x0<<28)|(0x0<<26)|(0x0<<24)|(0x0<<22)|(0x0<<20)|(0x0<<18)|(0x0<<16)\
	           |(0x0<<14)|(0x0<<12)|(0x0<<10)|(0x0<<8)|(0x0<<6)|(0x0<<4)|(0x0<<2)|(0x0<<0));
	#endif
	
	rGPDDAT &=~ (0xffff<<0);
	rGPDDAT |= ((0x0<<14)|(0x1<<13)|(0x0<<12)|(0x1<<11)|(0x0<<10)|(0x1<<9)|(0x1<<8)|(0x0<<3)|(0x1<<2)|(0x1<<1)|(0x1<<0));


///////////////////////////////////////////////////////////////////////////////////////////	
	// VDD_CAM IO
	// GPJ[15:0],
	
	//GPJ
	rGPJCON &=~(0x3ffffff<<0);
	rGPJCON |= ((0x0<<24)|(0x0<<22)|(0x0<<20)|(0x0<<18)|(0x0<<16)\
	           |(0x0<<14)|(0x0<<12)|(0x0<<10)|(0x0<<8)|(0x0<<6)|(0x0<<4)|(0x0<<2)|(0x0<<0));
	           
	rGPJUDP &=~(0x3ffffff<<0);
	#ifdef		__EVT1
	rGPJUDP |= ((0x2<<24)|(0x2<<22)|(0x2<<20)|(0x2<<18)|(0x2<<16)\
	           |(0x2<<14)|(0x2<<12)|(0x2<<10)|(0x2<<8)|(0x2<<6)|(0x2<<4)|(0x2<<2)|(0x2<<0));
	#else
	rGPJUDP |= ((0x0<<24)|(0x0<<22)|(0x0<<20)|(0x0<<18)|(0x0<<16)\
	           |(0x0<<14)|(0x0<<12)|(0x0<<10)|(0x0<<8)|(0x0<<6)|(0x0<<4)|(0x0<<2)|(0x0<<0));
	#endif
	
	rGPJDAT &=~ (0x1fff<<0);
	rGPJDAT |= ((0x0<<12)|(0x1<<11)|(0x0<<10)|(0x1<<9)|(0x1<<8)\
	             |(0x0<<7)|(0x1<<6)|(0x1<<5)|(0x1<<4)|(0x0<<3)|(0x1<<2)|(0x1<<1)|(0x1<<0));

///////////////////////////////////////////////////////////////////////////////////////////
	// VDD_RMOP
	rMSLCON = 0x0;
	#ifdef		__EVT1
	rGPMCON &=~((0x3<<2) | (0x3<<0));
	rGPMUDP &=~((0x3<<4) |(0x3<<2) | (0x3<<0));
	rGPMUDP |= ((0x3<<4) | (0x3<<2) | (0x3<<0));
	#endif

///////////////////////////////////////////////////////////////////////////////////////////	
	// VDD_SMOP : stop wakeup iteration fail or not?
	rMSLCON = 0x0;
	#ifdef		__EVT1	
	rDATAPDEN &=~((0x1<<0)|(0x1<<1)|(0x1<<2)|(0x1<<3)|(0x1<<4)|(0x1<<5)); // reset value = 0x3f; --> 0x30 = 2uA
	rDATAPDEN = (0x3<<4);
	#else
	rGPKUDP &=~((0x1<<0)|(0x1<<1)|(0x1<<2)|(0x1<<3)|(0x1<<4)|(0x1<<5)); // reset value = 0x3f; --> 0x30 = 2uA
	rGPKUDP |= (0x3<<4);
	#endif
}

volatile unsigned int mslcon_bakup,mslcon_bakup2;
void ConfigMiscIO_stop(void)
{
	mslcon_bakup = rMISCCR;
	rMISCCR |= (1<<13)|(1<<12);
}




volatile unsigned int cnt_Stop=0;
//volatile unsigned int error=0;
void Test_StopMode(void)
{
     
	
	printf("[STOP Mode Test]\n");

	#ifdef		__EVT1
	#else
	// Save the port configurations
	for(i=0;i<32;i++) {
		portStatus1[i]=*( (volatile U32 *)0x56000000 + i);	// 0x5600_0000:GPACON addr.
	}
	
	for(i=0;i<16;i++) {
		portStatus2[i]=*( (volatile U32 *)0x560000d0 + i);	// 0x5600_00d0:GPJCON addr.
	}  	
	#endif
	   
	   
	printf("S3C2443 will wake up by EINT0 & EINT11 (Falling Edge Triggered).\n");
	#ifdef		__EVT1
	rEXTINT0 = rdEXTINT0 & (~(1<<3));
	rEXTINT0 = (rdEXTINT0 | (1<<3)); //
	#else
	rGPFUDP &= ~(1<<1);   // Pull up down disable
	#endif
	
	rGPFCON=rGPFCON & ~(3<<0)|(2<<0);	//GPF0=EINT0
	
	#ifdef		__EVT1
	rEXTINT0=rdEXTINT0&~(0x7<<0)|(0x2<<0);  //EINT0=falling edge triggered
	#else
	rEXTINT0=rEXTINT0&~(0x7<<0)|(0x2<<0);  //EINT0=falling edge triggered
	#endif
	

	rGPGUDP &=~ (1<<7);
	rGPGCON=rGPGCON & ~(3<<6)|(2<<6);	//GPG3=EINT11
	#ifdef		__EVT1
	rEXTINT1=rdEXTINT1&~(7<<12)|(2<<12);  //EINT11=falling edge triggered	
	rEXTINT1= rdEXTINT1 | (1<<15);
	#else
	rEXTINT1=rEXTINT1&~(7<<12)|(2<<12);  //EINT11=falling edge triggered	
	#endif
	
	
 
	printf("\nNow, I am entering Stop mode.\n");
	Uart_TxEmpty();	//Wait until UART0 Tx buffer empty.
		
	pISR_EINT0	= (U32)Eint0Int;
	pISR_EINT8_23 = (U32)Eint8_23Int;
	pISR_RTC	  = (U32)AlarmInt;
	pISR_TICK	  = (U32)Tick_WakeDN;
			
	
	
		
	rEINTPEND |= (1<<11); // clear EINT11 pending bit in rEINTPEND
	rSRCPND = BIT_EINT0 | BIT_RTC | BIT_EINT8_23|BIT_TICK;
	rINTPND = BIT_EINT0 | BIT_RTC | BIT_EINT8_23|BIT_TICK;
	rEINTMASK &= ~(1<<11);
	rINTMSK &=~(BIT_EINT0|BIT_RTC|BIT_EINT8_23|BIT_TICK);
	
	
	rADCCON|=(1<<2);	// ADC stanby.
	
	
	
 	LcdEnvidOnOff(0);// jcs 060610 //Before entering stop mode, LCD must be off	
	Delay(1);
	 


	ConfigStopGPIO();
	ConfigMiscIO_stop();


 /*
	printf("Alarm wake-up (y/n)? ");
	if(getchar()=='y')
	{
		printf("\nS3C2443 will wake up by RTC alarm(10 sec) \n");
		SetAlarmWakeUp2();
	}

	printf("RTC tick interrupt (y/n)? ");
	if(getchar()=='y')
	{
		printf("\nS3C2443 will wake up by RTC tick(4 sec) \n");
		RTC_TimeTickSet();  // wake up will be occurred after 4sec!!!
	}
*/	
//    SetAlarmWakeUp2();
	
	printf("rPWRCFG: 0x%x", rPWRCFG);
	Uart_TxEmpty();
	
	// Entering the STOP mode
	//*************************//

    rOSCSET=0xffff;
	printf("rOSCSET: %x\n", rOSCSET);
	
	rPWRCFG=(1<<15)|(0<<9)|(0<<8)|(0<<7)|(0<<4)|(0<<3)|(0<<2)|(1<<0);
	rPWRMODE=(1<<16);


      /////////////////////////////// wakeup ///////////////////////////////
	rPWRMODE &= ~(1<<16); 
	rPWRCFG=(1<<4); // USB Phy power on



	//rTICNT0 &= ~(0<<7);			// Tick Time Interrupt Enable
	
	//Restore the port configurations
	#ifdef		__EVT1
	#else
	for(i=0;i<32;i++){
		*( (volatile U32 *)0x56000000 + i)=portStatus1[i];
	}

       for(i=0;i<16;i++){
		*( (volatile U32 *)0x560000d0 + i)=portStatus2[i];
	}
	#endif   
	rINTMSK &=~(BIT_EINT0|BIT_RTC|BIT_EINT8_23|BIT_TICK);
	rINTMSK =BIT_ALLMSK;


	Led_Display(0xa);
//	Lcd_EnvidOnOff(1);  // jcs 060610
	
	printf("Return to Normal Mode.\n");
	
	 printf("wake-up= %08x\n", rWKUPSTAT);

	//Check wake-up source
	if( rWKUPSTAT & (1<<0) )		// EINT?
	{
		printf("\n__ Wake-up by EINT\n");
		rWKUPSTAT |= (1<<0);
	}
	else if( rWKUPSTAT & (1<<1) )	// RTC?
	{
		printf("\n__ Wake-up by RTC Alarm\n");
		rWKUPSTAT |= (1<<1);
	}
	else if( rWKUPSTAT & (1<<4) )	// RTC?
	{
		printf("\n__ Wake-up by RTC tick\n");
		rWKUPSTAT |= (1<<4);
	}
	else if( rWKUPSTAT & (1<<5) )	// BATFLT?
	{
		printf("\n__ Wake-up by nBATFLT\n");
		rWKUPSTAT |= (1<<5);
	}
	
}


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 ESLEEP\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 = 0x533c2443;
}




void RTC_TimeTickSet(void)
{
	printf("RTC Tick set\n");


	rRTCCON = (rRTCCON & ~(0x7<<5)) | (1<<5);

	
	rTICNT0=0x7f; // upper count
	rTICNT1=0xff; // Lower count
	
	rTICNT0 |= (1<<7);	// Tick Time Interrupt Enable
	

  	rRTCCON|=0x1;  	
  
}















⌨️ 快捷键说明

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