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

📄 power.c

📁 Samsung S3C2443 Test program source code
💻 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 + -