?? power_test.c
字號:
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 + -