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

📄 stop.c

📁 基于44B0的Bootload原代码,详细的设计了 44B0开发平台的BOOT
💻 C
字号:
#include  <math.h>
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\rtc.h"

void stopPort(void);
void ReturnPort(void);
void __irq STEINT45(void);
void __irq STAlarm(void);

char wake_int=0;

// Users should not use interrupt in stop mode..
void Test_StopMode(void)
{
    char *date[8] = {"","SUN","MON","TUE","WED","THU","FRI","SAT"};
    unsigned int i, j, portStatus[20];
    unsigned int *memdata,*temp;
    unsigned int save_ref;
    
    memdata = (unsigned int *)malloc(0x100000);
    temp=memdata;

    pISR_EINT4567=(unsigned int)STEINT45;
    pISR_RTC=(U32)STAlarm;
    for(i=0;i<0x40000;i++)
	*(temp+i)=i;

    rLOCKTIME=0xfff;//400us @10MHz

// Save the port configurations
    for(i=0;i<20;i++)
	portStatus[i]=*( (volatile U32 *)(0x1d20000+(i<<2)) );

    Uart_Printf("[STOP Mode Test]\n");
    Uart_Printf("After 5 seconds, S3C44B0X will wake up by RTC alarm interrupt.\n");
    Uart_Printf("S3C44B0X will also wake up by EINT4 and EINT5.\n\n");
    Uart_TxEmpty(0);	//Wait until UART0 Tx buffer empty.
    
    Rtc_Init();

    rALMYEAR=TESTYEAR2 ;
    rALMMON =TESTMONTH2;
    rALMDAY =TESTDAY2  ;
    rALMHOUR=TESTHOUR2 ;
    rALMMIN =TESTMIN2  ;
    rALMSEC =TESTSEC2+9; 
//test rtc current
    rRTCALM=0x7f;   //Start RTC alarm
//    Display_Rtc();
//    Uart_TxEmpty(0);
//test rtc current

    rINTMSK=BIT_GLOBAL;//Before entering Stop mode interrupts must be masked!!

    stopPort();//RTC,ADC off
//test slow->stop
//    rPCONE |= 0x3;
//    rCLKSLOW=2|(1<<4)|(1<<5); //SLOWVAL=2,Fout=Fin/(2x2),PLL off. 
//    while(1);
//test slow->stop

    rLCDCON1 &= 0xfffffffe;//Before entering the stop mode LCD must be off    
    EnterPWDN(0x1);//Entering Power down mode.
    rCLKCON=0x7ff8; //Thaw mode -> normal mode.

//test slow->stop
//    rCLKSLOW=2|(1<<4)|(0<<5); //SLOWVAL=2,Fout=Fin/(2x2),PLL on.   
//    for(i=0;i<2048;i++);      //Wait S/W PLL lock time.
//    rCLKSLOW=2;      //SLOWVAL=2,Fout=Fpllo,PLL on.
//test slow->stop

    rLCDCON1 |= 0x1;
    for(i=0;i<20;i++)// Retrun original port configurations 
        *( (volatile U32 *)(0x1d20000+(i<<2)) )=portStatus[i];

//test rtc current
    rRTCCON = 0x01; //R/W enable to write rRTCALM
//    Uart_Printf("%4x,%2x,%2x,%s,%2x:%2x:%2x\n",0x2000 + rBCDYEAR,rBCDMON,rBCDDAY,date[rBCDDATE],rBCDHOUR,rBCDMIN,rBCDSEC);
    //Display_Rtc();
//test rtc current
    rRTCALM = 0x0;  //Stop RTC alram
    rRTCCON = 0x0;  //R/W disable :Stop RTC

    rINTMSK = ~(BIT_GLOBAL | BIT_EINT4567);

    switch(wake_int)
    {
	case 1:
	    Uart_Printf("\nS3C44B0X is waked by EINT4\n");
	    break;
	case 2:
	    Uart_Printf("\nS3C44B0X is waked by EINT5\n");
	    break;
	case 0:
	    Uart_Printf("\nS3C44B0X is waked by Alarm\n");
	    break;
	default :
	    Uart_Printf("\nCheck int!!!\n");
	    break;
    }

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

    Uart_Printf("Self-refresh data verifing...\n");
    for(i=0;i<0x40000;i++)
    {
	j=*(temp+i);
	if(j!=i)
	{
	    Uart_Printf("Memory test fail after Self-refresh\n"); 
	    break;
	}
    }
    if(j+1==i)
	Uart_Printf("Stop mode and self-refresh test O.K.\n");

    free(memdata);
    wake_int=0;
    rINTMSK = BIT_GLOBAL | BIT_EINT4567;
}

void __irq STEINT45(void)
{
    wake_int=rEXTINTPND;
    rEXTINTPND=0xf;		//clear EXTINTPND reg.
    rI_ISPC=BIT_EINT4567;
    
}

void __irq STAlarm(void)
{
    rI_ISPC=BIT_RTC;
    wake_int=0;
}

void stopPort(void)
{
// The I/O ports have to be configured 
// properly to reduce STOP mode current.
// pullup + output=high
    rPCONA=0x3ff;

    rPDATB=0x600;
    rPCONB=0x1ff;

    rPDATC=0x5400;
    rPUPC=0xfc00;
    rPCONC=0x11100000;

    rPDATD=0xff;
    rPUPD=0xff;
    rPCOND=0x5555;

    rPUPE=0x106;
    rPCONE=0x28;

    rPUPF=0x3;
    rPCONF=0x0;

    rPUPG=0x30;
    rPCONG=0xf00;

    rSPUCR=0x0;		
    rEXTINT=0x22222222;	//falling edge

    rRTCCON=0x0;    //RTC R/W disable for power consumption
    rADCCON |=0x20; //ADC sleep mode
}

⌨️ 快捷键说明

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