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

📄 power.c

📁 一个简单的helloworld编程
💻 C
字号:
#include  <math.h>
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\power.h"
#include "..\inc\rtc.h"

#define FIN 4000000

char slw_exit=0;
void __irq SLWEint0Int(void);

void Test_SlowMode(void)
{
    int i;
    unsigned int save_MCON[9];
    unsigned int MemCon[9]={0,0,0,0,0,0,0x18000,0x18000,0x800000+2033};
    
    pISR_EINT0=(U32)SLWEint0Int;
    rINTMSK =~(BIT_GLOBAL|BIT_RTC|BIT_EINT0);
    
    for(i=0;i<9;i++)
	save_MCON[i]=((unsigned int *)0x01c80004)[i];//  *(unsigned int *)(0x01c80004+4*i);
    	
    Uart_Printf("[POWER DOWN MODE TEST]\n");
    Uart_Printf("1)Entering SLOW mode.\n");
    Uart_Printf("  But, The frequency,in 1Mhz, is about %dms.\n",MCLK*20/1000000);
    Uart_Printf("  Press keyboard to exit SLOW mode\n");
    Uart_TxEmpty(0);	//To avoid being crushed the character

    rLOCKTIME=0x320;	//count=t_lock*Fin=800 (t_lock=200us, Fin=4MHz)

    rCLKSLOW=2|(1<<4)|(1<<5); //PLL off,SLOW mode,SLVAL=2 Fout=Fin/(2*SLVAL)=1MHz

    ChangeMemCon(MemCon);//change memory control register(60MHz-->1MHz)

    while(!slw_exit)
    //now!  slow mode:1Mhz, PLL off
    {
	Led_Display(0xf);
	Delay(100);
	Led_Display(0x0);
	Delay(100);
    }

    rINTMSK |=BIT_RTC;
    for(i=0;i<9;i++)
	MemCon[i]=save_MCON[i];

    ChangeMemCon(MemCon);//change memory control register(1MHz-->66MHz)

    rCLKSLOW=2|(1<<4)|(0<<5);	//PLL on

    for(i=0;i<2048;i++);	//wait during PLL lock-time

    rCLKSLOW=2; 		//exit SLOW mode(disable slow_bit)
    slw_exit=0;
}
void __irq SLWEint0Int(void)
{
    rI_ISPC=BIT_EINT0;	//clear pending_bit
    slw_exit=1;
}


void Test_PLL(void)
{
    int P_div, M_div, S_val, S_div, mck;

    Uart_Printf("[Running change test of M/P/S value]\n");

    Uart_Printf("Input M vlaue\n");
    M_div=Uart_GetIntNum();        
    Uart_Printf("Input P vlaue\n");
    P_div=Uart_GetIntNum();    
    Uart_Printf("Input S vlaue\n");
    S_div=Uart_GetIntNum();
    S_val=pow(2,S_div);
    mck=(  (M_div+8)*FIN  )/(  (P_div+2)*S_val  );

    Uart_Printf("MCLK=%d,M=0x%x,P=0x%x,S=0x%x\n",mck,M_div,P_div,S_div);
    Uart_Printf("Now change PLL value\n");
    Uart_TxEmpty(0);
    
    ChangePllValue(M_div,P_div,S_div);
    Uart_Init(mck,115200);
    Uart_Printf("...I'm running in changed MCLK...\nPress any key to return!\n");

    while(!Uart_GetKey())
    {
	Led_Display(0xf);
	Delay(1000);
	Led_Display(0x0);
	Delay(1000);;
    }

    ChangePllValue(PLL_M,PLL_P,PLL_S);
    Uart_Init(0,115200);
    Uart_Printf("Returned original clock\n");
}


void Test_HoldMode(void)
{
    Uart_Printf("[HOLD Mode(Normal mode with some stopped blocks)]\n");
    Uart_Printf("IIS,IIC,ADC,RTC,UART1,SIO,ZDMA,Timer,LCD are stopped step by step.\n");
    Uart_Printf("Check the current cunsumption. Type any key to exit.\n");	
    //Except GPIO,BDMA,UART0
    Uart_Printf("IIS off.\n");
    rCLKCON=0x3ff8;
    Uart_Getch();
    Uart_Printf("IIC off.\n");
    rCLKCON=0x1ff8;
    Uart_Getch();
    Uart_Printf("ADC off.\n");
    rADCCON|=0x20;
    rCLKCON=0x0ff8;
    Uart_Getch();
    Uart_Printf("RTC_control off.\n");
    rCLKCON=0x07f8;
    Uart_Getch();
    Uart_Printf("UART1 off.\n");
    rCLKCON=0x05f8;
    Uart_Getch();
    Uart_Printf("SIO off.\n");
    rCLKCON=0x05d8;
    Uart_Getch();
    Uart_Printf("ZDMA01 off.\n");
    rCLKCON=0x05c8;
    Uart_Getch();
    Uart_Printf("TIMER0123 off.\n");
    rCLKCON=0x05c0;
    Uart_Getch();
    Uart_Printf("LCD off.\n");
    rCLKCON=0x0580;
    Uart_Getch();

    Uart_Printf("Return to Normal Mode.\n");	    
    rCLKCON=0x7ff8; //IIS,IIC,ADC,RTC,UART,BRDMA,SIO,ZDMA,Timer,LCD	       
}


⌨️ 快捷键说明

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