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

📄 power_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:

		printf("System stablilization counter register!\n");
		SYSC_OSCSTAB(1);
		SYSC_PWRSTAB(1);

   	  	/////////////////////////////////
   	    	// 1) Check&Enable HCLK_GATE[22,21,0]
      		// 2) Check BLK_PWR_STAT 
	       // 3) Check&Clear WAKEUP_STAT
	       //////////////////////////////
		CheckHCLK_ForPM();
	       CheckBLKPWR_ForPM();
		CheckWAKESTAT_ForPM(1);

		
		printf("Choose Wake-up Event :  0: Warm Reset,  1: All Sleep Wake-up Source\n");
		uINTSEL = GetIntNum();

		//Outp32SYSC(0x804, 0x80); 	// for test
		SYSC_SetBATF(eFLT_SLEEP, uINTSEL);
		//Outp32SYSC(0x804, 0x18);

		printf("OTHERs: 0x%x\n", Inp32SYSC(0x900));
		printf("PWR_CFG: 0x%x\n", Inp32SYSC(0x804));

		
		while(!UART_GetKey())
		{

		DisplayLED(0xC);
		Delay(3000);
		DisplayLED(0xF);
		Delay(3000);

		}

		printf("CPU doesn't go to Sleep Mode\n");

	}

	

}




//////////
// Function Name : IDLET_CFG 
// Function Description : Idle Mode Test - Validation Test ( 1 Int. Source Enable, Not adapted DVS Scheme)
// Input : 	None
// Output :	None 
// Version : v0.1

void IDLET_CFG (void)
{
	
	u32 uTemp, uRegValue;

	printf("[IDLE Mode Baisc Test]\n");
	printf("After 10 seconds, S3C6400 will wake up by RTC alarm interrupt.\n");
	printf("S3C6400 will also wake up by EINT9, EINT10, EINT11 or BATT_FLT.\n");
	
	uTemp=0;
	
	printf("Choose Battery Fault Event :  0: Interrupt,  1: ESLEEP\n");
	uTemp = GetIntNum();

	switch(uTemp)
	{
		case 0: 
			SetBatteryFaultEvent(eFLT_INT);
			break;
		case 1:
			InitData_SDRAM(_DRAM_BaseAddress+0x1000000, 0x10000);
			SetBatteryFaultEvent(eFLT_SLEEP);				// IDLE 档吝俊 甸绢啊瘤 臼绰促...:
		       break;
	}


	// Wake-up Source Setting
	printf("Wake-up sourceis set! \n");
	SetAlarmWakeup();
	SetEintWakeup();
	SetADCTSWakeup();
	//SetAlarmTick();
	
	// For Test(Temp) - Inform Register
	Outp32Inform(0,0xABCD6400);
	
	// Enter Idle Mode
	// CFG_STANDBYWFI = ignore  or  IDLE
	printf("CPU will goes to IDLE Mode \n");
	//SYSC_SetCFGWFI(eIDLE,1);		// IDLE,  Clock Enable (O.K)
	//SYSC_SetCFGWFI(eIGNORE,1);	// IGNORE,  Clock Enable(O.K)
	SYSC_SetCFGWFI(eIDLE,0);		// IDLE,  Clock Disable
	//Outp32SYSC(0x800, 0x1);			// Fail

       //Test case : bus power down
       SYSC_BLKPwrOffAll();

       //Added case : Clock Off Case
        Outp32SYSC(0x30, 0xFDDFFFFE);	//IROM, MEM0, MFC

#if 0
	//for test => hidden bit test PWR_CFG[1]
	//Outp32SYSC(0x804, 0xB6);			// reset 凳 ??
	// Outp32SYSC(0x804,0x17);			// 馆览 绝澜. 
	//Outp32SYSC(0x804, 0xB0);			// 馆览 绝澜. 
	//Outp32SYSC(0x804, 0xB4);			// 馆览 绝澜.
	//Outp32SYSC(0x804, 0xB2);				// Reset 凳 
	//Outp32SYSC(0x804, 0x8F);
	//Outp32SYSC(0x804, 0x82);
	//printf("PWR_CFG: 0x%x\n", Inp32SYSC(0x804));
	//while(!UART_GetKey());
#endif

	// Test Case - Bus Transfer Test 	
	DMAC_InitCh(DMA0, DMA_ALL, &oDmac0_T);
	INTC_SetVectAddr(NUM_DMA0,  Dma0Done_T);
	//INTC_Enable(NUM_DMA0);
  	DMACH_Setup(DMA_A, 0x0, 0x52000000, 0, 0x53000000, 0, BYTE, 0x100000, DEMAND, MEM, MEM, SINGLE, &oDmac0_T);
        // Enable DMA
	DMACH_Start(&oDmac0_T);
	
	// Enter Idle Mode
	MMU_WaitForInterrupt();


	printf("Return to Normal Mode \n\n");
	
	printf("rWAKEUP_STAT=0x%x\n", Inp32SYSC(0x908));
	uRegValue=Inp32SYSC(0x908);
	Outp32SYSC(0x908,uRegValue);
	printf("rWAKEUP_STAT=0x%x\n Wake-up Status Clear\n", Inp32SYSC(0x908));
       SYSC_BLKPwrONAll();
       Outp32SYSC(0x30, 0xFFFFFFFF);	//IROM, MEM0, MFC
	SYSC_RdBLKPWR();

	// Int. Disable
	INTC_Disable(NUM_EINT1);
	INTC_Disable(NUM_RTC_ALARM);
	INTC_Disable(NUM_BATF);
	INTC_Disable(NUM_RTC_TIC);

}

//////////
// Function Name : STOPT_CFG  -- ing..
// Function Description : Stop Mode Test - Baisc Test 
// Input : 	None
// Output :	None 
// Version : v0.1
void STOPT_CFG_EVT1 (void)
{
	u32 uTemp;
	u32  uOSCEN;
	//u32 uRegValue2_bk, uRegValue3_bk;
	//u32 uRegValue_SRC, uRegValue_DIV0;
	//u32 uTTT0, uTTT1;
	u32 uARM_Memory,uTop_Memory,uARM_Logic,uTop_Logic, uHidden;
	u32 uOSCTime;
	u32 uTemp0, uTemp2;
	u32 uRet, uDSTOP;


	uDSTOP= DeepStopStatus();
	SYSC_RdRSTSTAT(1);

	if( uDSTOP && !(g_OnTest_DSTOP) )									// must be changed
	{
		
		CheckData_SDRAM(_DRAM_BaseAddress+0x1000000, 0x10000);

		//Check & Clear Wake-up Source 
		SYSC_ClrWKUPSTAT();

		printf("\nCheck Stepping Stone...\n\n");
		uRet = Compare(0x0C000000, 0x52000000, 0x100);
		if (uRet)
			{
			Disp("Stepping Stone Data Retention Success..\n");
			}
			else
			{
			Disp("Stepping Stone Data Retention  Failed..\n");
			}

		//Read RawInterrupt Status
		printf("VIC0RawStatus: 0x%x \n", Inp32(0x71200008));
		printf("VIC1RawStatus: 0x%x \n", Inp32(0x71300008));

		printf("Deep Stop mode test is done\n");
		g_OnTest_DSTOP = 1;
	}
else			// Entering into Deep Stop Mode
	{
		g_OnTest_DSTOP=0;

	printf("\n[STOP CFG Test]\n");

//test 2.24  -Operating Mode Change
/*
	SYSC_ChangeMode(eASYNC_MODE);
	SYSC_GetClkInform();
	UART_InitDebugCh(0, 115200);
	printf("\n\n");
	printf("ARMCLK: %.2fMHz  HCLKx2: %.2fMHz  HCLK: %.2fMHz  PCLK: %.2fMHz\n",(float)g_ARMCLK/1.0e6, (float)g_HCLKx2/1.0e6, (float)g_HCLK/1.0e6, (float)g_PCLK/1.0e6);
	printf("SYNC Mode : %d\n", g_SYNCACK);
	printf("\n");    
*/

	//GPIO_SetFunctionEach(eGPIO_F, eGPIO_14, 1);
	//GPIO_SetDataEach(eGPIO_F, eGPIO_14, 0);

	// User Key Input
	printf(" Choose Oscillator Enable or Disable :  0 : Disable,  1: Enable \n");
	uOSCEN = GetIntNum();
	printf(" Choose uARM_Logic :  0 : OFF,  1: ON \n");
	uARM_Logic = GetIntNum();
	printf(" Choose uARM_Memory :  0 : OFF,  1: ON \n");
	uARM_Memory = GetIntNum();
	printf(" Choose uTop_Logic :  0 : RET  1: ON \n");
	uTop_Logic = GetIntNum();
	printf(" Choose uTop_Memory :  0 : OFF,  1: RET\n");
	uTop_Memory = GetIntNum();

	printf(" Choose Hidden Stop Mode:  0 : Sub Block OFF,  1: Sub Block Enable\n");
	uHidden = GetIntNum();

	printf(" Oscillator settle-down time:  \n");
	uOSCTime = GetIntNum();


	////////////////////////////////
	//  Save I/O Ports 
	////////////////////////////////
	// Save the port configurations
	//printf("I/O Port is stored!\n");
	//for(i=0;i<36;i++) {
	//	portStatus[i]=*( (volatile U32 *)0x56000000 + i);	// 0x5600_0000:GPACON addr.
	//	}
	//printf("I/O Port is set for Stop Mode!\n");
	//ConfigStopGPIO();
	//ConfigMiscIO_stop();

	Outp32Inform(5, 0x0);
	printf("Wake-up source is set!\n");
	////////////////////////////////
	// Wake-up Source Setting
	//      Wake-up Source Interrupts are must enabled at Stop Mode
	////////////////////////////////
   	//SetAlarmWakeup();
	SetEintWakeup();
	SetKeypadWakeup();
	//SetAlarmTick();
	Outp32SYSC(0x804, 0x1<<7);
	SetBatteryFaultEvent(eFLT_INT);
	SetADCTSWakeup();
//	SetHSIWakeup();

	// For Test - Retention Stepping Stone
	printf("Test pattern for SDRAM Self-Refresh is filled!\n");
	InitData_SDRAM(_DRAM_BaseAddress+0x1000000, 0x10000);
	printf("\nCopy Stepping Stone...\n\n");
	Copy(0x0C000000, 0x52000000, 0x100);


	//printf("Oscillator settle-down time is set\n");
	//SYSC_OSCSTAB(1);				// Check...
	
#if 1

	//Test Case - Normal CFG OFF
	SYSC_CtrlNORCFG(eNOR_DOMAINV, 0);
	SYSC_CtrlNORCFG(eNOR_DOMAINI, 0);
	SYSC_CtrlNORCFG(eNOR_DOMAINP, 0);
	SYSC_CtrlNORCFG(eNOR_DOMAINF, 0);
	SYSC_CtrlNORCFG(eNOR_DOMAINS, 0);
	SYSC_CtrlNORCFG(eNOR_DOMAINETM, 1);
	SYSC_CtrlNORCFG(eNOR_IROM, 1);
#endif
	Delay(100);
	SYSC_RdBLKPWR();


	
#if 0
	printf("PHY OFF\n");
	uTTT1 = Inp32SYSC(0x900);
	uTTT1 = uTTT1|(1<<14);		
	Outp32SYSC(0x900, uTTT1);	//  USB_PWR_DN_EN
	//Outp32(0x7C100000, 0xF);		//  USB_Power Down
	uTTT1 = Inp32(0x7C100004);
	uTTT1 = uTTT1 |(1<<3);
	Outp32(0x7C100004,uTTT1 );			//  
	
	Outp32(0x7C100000, 0xF);		//  USB_Power Down
#endif	
	
	//For Test. (07.02.12- )
	SYSC_OSCSTAB(uOSCTime);			
	SYSC_PWRSTAB(0x1);			
	SYSC_FPCSTAB(0x1);			

	switch(uHidden)
	{
		case 0:
				SYSC_SetSTOPCFG(uARM_Memory, uTop_Memory, uARM_Logic, uTop_Logic);
				uTemp0=Inp32SYSC(0x814);
				//uTemp0=Inp32SYSC(0x814);
				//uTemp0 |=(1<<31);
				//Outp32SYSC(0x814, uTemp0);
				printf("Normal_CFG: 0x%x\n",Inp32SYSC(0x810));
				printf("STOP_CFG: 0x%x\n", uTemp0);
				break;
		case 1:
				uTemp0 = Inp32SYSC(0x814);
				uTemp2 = ((1<<16)|(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)); 	// STOP(SUB Enable) -> SLEEP  Fail
				//uTemp2 = ((0<<16)|(0<<15)|(0<<14)|(0<<13)|(0<<12)|(0<<9));
				uTemp0 =  (uTemp0 & ~(0x3FFFFF<<8)) | ((uARM_Memory<<29)|(uTop_Memory<<20)|(uARM_Logic<<17)|(uTop_Logic<<8)|uTemp2);	
				Outp32SYSC(0x814, uTemp0);
				printf("Normal_CFG: 0x%x\n",Inp32SYSC(0x810));
				printf("STOP_CFG: 0x%x\n", uTemp0);
				break;
	}

	// for Test  WFI Wake-up 
	//INTC_Disable(NUM_RTC_TIC);
	//INTC_Disable(NUM_RTC_ALARM);
	//INTC_Disable(NUM_EINT1);
	
	//SYSTEM_DisableVIC( );
	//SYSC_SetSTOPCFG(uDeepStop,1, uDeepStop, 0);   // for test 2.12,  TOP Memory ON
	SYSC_SetCFGWFI(eSTOP, uOSCEN);
      printf("PWR_CFG: 0x%x\n", Inp32SYSC(0x804));
      Delay(10);



       /////////////////////////////////
       // 1) Check&Enable HCLK_GATE[22,21,0]
       // 2) Check BLK_PWR_STAT 
       // 3) Check&Clear WAKEUP_STAT
       //////////////////////////////
	CheckHCLK_ForPM();
       CheckBLKPWR_ForPM();
	CheckWAKESTAT_ForPM(1);
      
	// Normal CFG 
	printf("\nCPU will goes to Stop Mode!\n\n");
      UART_TxEmpty();	
	Outp32Inform(7, Inp32SYSC(0x90c));

  	MMU_WaitForInterrupt();


	Delay(10);


	DisplayLED(0x3);
	RTC_SetCON(0,0,0,0,0,0);	
	
	printf("\nCheck Stepping Stone...\n\n");
	uRet = Compare(0x0C000000, 0x52000000, 0x100);
	if (uRet)
			{
			Disp("Stepping Stone Data Retention Success..\n");
			}
			else
			{
			Disp("Stepping Stone Data Retention  Failed..\n");
			}

	
	printf("Return to Normal Mode.\n");

	printf("rWAKEUP_STAT=0x%x\n", Inp32SYSC(0x908));
	uTemp=Inp32SYSC(0x908);
	Outp32SYSC(0x908,uTemp);
	printf("rWAKEUP_STAT=0x%x\n\n Wake-up Status Clear", Inp32SYSC(0x908));
	
	SYSC_RdBLKPWR();

	// Int. Disable
	INTC_Disable(NUM_EINT1);
	INTC_Disable(NUM_RTC_ALARM);
	INTC_Disable(NUM_RTC_TIC);
	
}

	INTC_Disable(NUM_EINT1);
	INTC_Disable(NUM_RTC_ALARM);
	INTC_Disable(NUM_BATF);
	INTC_Disable(NUM_PENDN);

}



//////////
// Function Name : SLEEPT_CFG_EVT1  -- ing..
// Function Description : Sleep Mode Test - Baisc Test 
// Input : 	None
// Output :	None 
// Version : v0.1
void SLEEPT_CFG_EVT1 (void)
{
	u32 uRstId;
	//u32 uPortStatus[32];		// must be change
	u32 uInform0, uInform7;
	u32 uTTT1;
		
	printf("rINFORM0: 0x%x\n", Inp32Inform(0));
	printf("rINFORM7: 0x%x\n", Inp32Inform(7));

	uInform0 = 0xABCD6400;
	uInform7 = 0x6400ABCD;
	
	uRstId = SYSC_RdRSTSTAT(1);
	
		//SYSC_CtrlNORCFG(eNOR_DOMAINV, 0);
		SYSC_CtrlNORCFG(eNOR_DOMAINI, 1);
		SYSC_CtrlNORCFG(eNOR_DOMAINP, 1);
		SYSC_CtrlNORCFG(eNOR_DOMAINF, 1);
		SYSC_CtrlNORCFG(eNOR_DOMAINS, 1);
		//SYSC_CtrlNORCFG(eNOR_DOMAINETM,0);		// OFF矫 Sleep Wake-up Fail...
		SYSC_CtrlNORCFG(eNOR_IROM, 1);

	Delay(10);
	SYSC_RdBLKPWR();
	if( ( uRstId == 3 ) && !(g_OnTest) )
	{
		printf("Wake-up form SLEEP Mode \n");
		CheckData_SDRAM(_DRAM_BaseAddress+0x1000000, 0x10000);

		//Check Information Register Value
		if( (uInform0 !=Inp32Inform(0) )||(uInform7 != Inp32Inform(7)))
		{
			printf(" Information Register Value is wrong!!! \n");
		}
		else 
		{
			printf(" Information Register Value is correct!!! \n");
		}

		//Check & Clear Wake-up Source 
		SYSC_ClrWKUPSTAT();
		//test
		Check_AliveSFR(1);
		
		printf("SLEEP mode test is done\n");
		g_OnTest = 1;
	}
	else			// Entering into SLEEP Mode

⌨️ 快捷键说明

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