📄 power.c
字号:
/*****************************************
NAME: power.c
DESC: SLOW,HOLD mode test
HISTORY:
03.23.2002:purnnamu: first release for 2410
06.02.2002:DonGo: Modified for 2413
*****************************************/
#include "def.h"
#include "option.h"
#include "2443addr.h"
#include "Console.h"
#include "System.h"
#include "PLL.h"
//#include "lcdlib.h"
#include "sleep.h"
#include "stop.h"
#include "power.h"
#include "idle.h"
#include "pll_test.h"
void __irq SlowEint0Int(void);
volatile int slowExit;
void * func_power_test[][2]=
{
// "0123456789012345678"
//Power mode test
(void *)Test_SlowMode, "Slow mode test ",
(void *)Test_HoldMode, "Clk gating test ",
(void *)Test_IdleMode, "Idle mode test ",
(void *)Test_SleepMode, "Sleep mode test ",
(void *)Test_StopMode, "Stop mode test ",
(void *)Test_SoftMode, "Soft Reset Test ",
(void *)Test_BattFaultInterrupt, "nBATT_FLT test ",
(void *)Test_Dvs, "DVS test ",
0,0
};
void Test_Power(void)
{
int i;
printf("\nPower mode test.\n");
// Battery fault setting.
rGPHCON=rGPHCON&~(0xf<<26)|(0xa<<26);
rMISCCR=rMISCCR&~((0x7<<8)|(0x7<<4))|(0x3<<8)|(0x1<<4);
while(1)
{
i=0;
printf("\n\n");
while(1)
{ //display menu
printf("%2d:%s",i,func_power_test[i][1]);
i++;
if((int)(func_power_test[i][0])==0)
{
printf("\n");
break;
}
if((i%3)==0)
printf("\n");
}
printf("\nSelect (\"-1\" to exit) : ");
i = GetIntNum();
if(i==-1) break; // return.
if(i>=0 && (i<((sizeof(func_power_test)-1)/8)) ) // select and execute...
( (void (*)(void)) (func_power_test[i][0]) )();
}
printf("\nPower_Test program end.\n");
}
//////////////////////////////////////////////////////////////////////////
U32 locktime_Exit;
void __irq Locktime_Eint0Int(void)
{
ClearPending(BIT_EINT0);
locktime_Exit=1;
rINTMSK |=BIT_EINT0;
rMPLLCON= (62<<12) | (2<<4) | 1;
}
void __irq SlowEint0Int(void)
{
ClearPending(BIT_EINT0);
slowExit=1;
}
void Test_SlowMode(void)
{
#if 1
int i;
unsigned int saveREFRESH, saveCLKSRC, saveCLKDIV0;
slowExit=0;
printf("S3C2443 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
pISR_EINT0 = (U32)SlowEint0Int;
rSRCPND = BIT_EINT0;
rINTPND = BIT_EINT0;
rINTMSK&=~(BIT_EINT0);
// rSMCCR&=~(0x3<<1);
// rCLKDIV0&=~(1<<3);
printf("[SLOW MODE TEST]\n");
printf(" Press EINT0 key to exit SLOW mode\n");
printf(" Check the CLKOUT0 pad clock is the same as X-tal input in Slow mode.\n");
printf(" Compare the LED Blink speed at each mode.\n");
printf("\n Press any key to enter slow mode.\n");
printf(" CLKDIV0:0x%x\n", rCLKDIV0);
// Uart_TxEmpty(); //To avoid being crushed the character
// Init_LED();
while(!slowExit) { // Normal mode
Led_Display(0xa);
//DoQsort();
for(i=0; i<1000000; i++);
Led_Display(0x5);
//DoQsort();
for(i=0; i<1000000; i++);
if(Uart_GetKey()!=0) break;
}
printf("[exit normal while]\n");
saveCLKSRC = rCLKSRC;
saveCLKDIV0 = rCLKDIV0;
rCLKSRC=rCLKSRC & ~((1<<4)|(1<<3));
rCLKDIV0&=~((0xf<<9)|(0x3<<4)|(1<<2)|(0x3<<0)); // FCLK=reference clock, ARMCLK:HCLK:PCLK=1:1:1
rSMCCR&=~(0x3<<1);
rCLKDIV0&=~(1<<3);
// Re-setting the refresh count for 12MHz HCLK.
saveREFRESH=rREFRESH;
rREFRESH=(U32)(2048+1-12*7.8);
// for(i=0;i<2048;i++);
slowExit=0;
while(!slowExit) {
Led_Display(0xa);
//DoQsort();
for(i=0; i<1000000; i++);
Led_Display(0x5);
//DoQsort();
for(i=0; i<1000000; i++);
if(Uart_GetKey()!=0) break;
}
rINTMSK=BIT_ALLMSK;
rCLKDIV0 = saveCLKDIV0;
rSMCCR|=(0x1<<1);
rCLKSRC = saveCLKSRC;
rREFRESH=saveREFRESH;
// for(i=0;i<2048;i++);
#endif
}
void Test_Dvs(void)
{
int i;
printf("DVS mode test.\n");
rMISCCR=rMISCCR&~((0x7<<8)|(0x7<<4))|(0x3<<8)|(0x2<<4);
printf("CLKOUT1: HCLK, CLKOUT0: FCLK \n");
while(1) { // Normal mode
printf(" DVS mode Off !!!\n");
Led_Display(0xa);
rCLKDIV0|=(1<<13);
Delay(10000);
printf(" DVS mode On !!!\n");
Led_Display(0x5);
rCLKDIV0&=~(1<<13);
Delay(10000);
if(Uart_GetKey()!=0) break;
}
rCLKDIV0&=~(1<<13);
}
void Test_HoldMode(void)
{
int rHCLKCON_save, rPCLKCON_save, rSCLKCON_save;
#if 1
printf("[Power Saving Mode by Stopping Each Block]\n");
printf("Check the current cunsumption. Type any key to proceed.\n");
//Except GPIO,UART0
rHCLKCON_save = rHCLKCON;
rPCLKCON_save = rPCLKCON;
rSCLKCON_save = rSCLKCON;
rHCLKCON=0xffffffff; // All HCLK enable.
rPCLKCON=0xffffffff;
rSCLKCON=0xffffffff;
printf("Control HCLKCON register!!!.\n");
getchar();
/*
printf("Disable HCLK into DRAMC.\n");
rHCLKCON&=~(1<<19);
getchar();
printf("Disable HCLK into SSMC.\n");
rHCLKCON&=~(1<<18);
getchar();
*/
printf("Disable HCLK into CFC.\n");
rHCLKCON&=~(1<<17);
getchar();
printf("Disable HCLK into HSMMC.\n");
rHCLKCON&=~(1<<16);
getchar();
printf("Disable HCLK into USB Device.\n");
rHCLKCON&=~(1<<12);
getchar();
printf("Disable HCLK into USB Host.\n");
rHCLKCON&=~(1<<11);
getchar();
printf("Disable HCLK into LCD(STN).\n");
rHCLKCON&=~(1<<10);
getchar();
printf("Disable HCLK into Display controller.\n");
rHCLKCON&=~(1<<9);
getchar();
printf("Disable HCLK into CAMIF.\n");
rHCLKCON&=~(1<<8);
getchar();
printf("Disable HCLK into DMA5.\n");
rHCLKCON&=~(1<<5);
getchar();
printf("Disable HCLK into DMA4.\n");
rHCLKCON&=~(1<<4);
getchar();
printf("Disable HCLK into DMA3.\n");
rHCLKCON&=~(1<<3);
getchar();
printf("Disable HCLK into DMA2.\n");
rHCLKCON&=~(1<<2);
getchar();
printf("Disable HCLK into DMA1.\n");
rHCLKCON&=~(1<<1);
getchar();
printf("Disable HCLK into DMA0.\n");
rHCLKCON&=~(1<<0);
getchar();
printf("Control PCLKCON register!!!.\n");
printf("Disable PCLK into SPI_1.\n");
rPCLKCON&=~(1<<15);
getchar();
printf("Disable PCLK into SPI_0.\n");
rPCLKCON&=~(1<<14);
getchar();
printf("Disable PCLK into GPIO.\n");
rPCLKCON&=~(1<<13);
getchar();
printf("Disable PCLK into RTC.\n");
rPCLKCON&=~(1<<12);
getchar();
printf("Disable PCLK into WDT.\n");
rPCLKCON&=~(1<<11);
getchar();
printf("Disable PCLK into PWM.\n");
rPCLKCON&=~(1<<10);
getchar();
printf("Disable PCLK into I2S.\n");
rPCLKCON&=~(1<<9);
getchar();
printf("Disable PCLK into AC97.\n");
rPCLKCON&=~(1<<8);
getchar();
printf("Disable PCLK into TSADC.\n");
rPCLKCON&=~(1<<7);
getchar();
printf("Disable PCLK into SPI_HS.\n");
rPCLKCON&=~(1<<6);
getchar();
printf("Disable PCLK into SDI.\n");
rPCLKCON&=~(1<<5);
getchar();
printf("Disable PCLK into I2C.\n");
rPCLKCON&=~(1<<4);
getchar();
printf("Disable PCLK into UART3.\n");
rPCLKCON&=~(1<<3);
getchar();
printf("Disable PCLK into UART2.\n");
rPCLKCON&=~(1<<2);
getchar();
/*
printf("Disable PCLK into UART1.\n");
rPCLKCON&=~(1<<1);
getchar();
*/
printf("Disable PCLK into UART0.\n");
rPCLKCON&=~(1<<0);
getchar();
printf("Control SCLKCON register!!!.\n");
printf("Disable SCLK into DDRCLK.\n");
rSCLKCON&=~(1<<16);
getchar();
/*
printf("Disable SCLK into SMCCLK.\n");
rSCLKCON&=~(1<<15);
getchar();
*/
printf("Disable SCLK into HS_SPI.\n");
rSCLKCON&=~(1<<14);
getchar();
printf("Disable SCLK into HSMMC_EXT.\n");
rSCLKCON&=~(1<<13);
getchar();
printf("Disable SCLK into HSMMC_EPLL.\n");
rSCLKCON&=~(1<<12);
getchar();
printf("Disable SCLK into CAM.\n");
rSCLKCON&=~(1<<11);
getchar();
printf("Disable SCLK into Display Controller.\n");
rSCLKCON&=~(1<<10);
getchar();
printf("Disable SCLK into I2S.\n");
rSCLKCON&=~(1<<9);
getchar();
/*
printf("Disable SCLK into UART.\n");
rSCLKCON&=~(1<<8);
getchar();
*/
printf("Disable SCLK into USB HOST.\n");
rSCLKCON&=~(1<<1);
getchar();
printf("Clock gating test is ended!!!\n");
rHCLKCON = rHCLKCON_save;
rPCLKCON = rPCLKCON_save;
rSCLKCON = rSCLKCON_save;
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -