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

📄 rtc.c

📁 本代码是采用ARM7TDMI内核的S3C44BOX芯片硬件测试程序
💻 C
字号:
/****************************************************************
 *		  ARMSYS S3C44B0X  RTC TEST								*  
 ****************************************************************
 
  1.2005.4.25::  RTC TEST
 
 ***************************************************************/
 
#include "..\target\44b.h"
#include "..\target\44blib.h"
#include "..\inc\rtc.h"

void __irq Rtc_Tick(void);
void __irq Rtc_Int(void);

char *date[8] = {"","一","二","三","四","五","六","日"};
volatile unsigned int sec_tick;
volatile int isRtcInt;
volatile int RTC_year,RTC_month,RTC_day,RTC_weekday,RTC_hour,RTC_minute,RTC_sec;

void Display_Rtc(void)
{
    int year;
    int month,day,weekday,hour,minute,sec;
	
	//Rtc_Init();			// SET RTC NEW TIME 1999.12.31 SAT 23:59:50
    //Test_Rtc_Alarm();
    
    pISR_RTC=(unsigned)Rtc_Int;
    rRTCALM=0x7f;
    pISR_TICK=(unsigned)Rtc_Tick;
    rTICINT = 127+(1<<7);	//START
    
	//Uart_Printf("This test should be excuted once RTC test(Alarm) for RTC initialization\n");
    Uart_Printf("\nRTC测试程序运行中,请稍后...\n");
    //Uart_Printf("RTC定时报警中断设定时间为:10秒\n");
    Test_Rtc_Alarm();
    Uart_Printf("RTC节拍中断测试...\n");
    //Uart_Printf("[按任意键退出。]\n");
    rINTMSK=~(BIT_GLOBAL|BIT_RTC|BIT_TICK); 	//rINTMSK=~(BIT_GLOBAL|BIT_TICK);    
    isRtcInt=0;
    while(isRtcInt<15);	//&& Uart_Getch()==0
    rRTCCON = 0x01;    // R/W enable, 1/32768, Normal(merge), No reset
    
    sec=rBCDSEC;
	year = 0x2000 + rBCDYEAR;
	month=rBCDMON;
	day=rBCDDAY;
	weekday=rBCDDATE;
	hour=rBCDHOUR;
	minute=rBCDMIN;
	//sec=rBCDSEC;
	
    Uart_Printf("\n%4x年%2x月%2x日,星期%s,%2x:%2x:%2x\n",year,month,day,date[weekday],hour,minute,sec);
    rINTMSK |= (BIT_GLOBAL | BIT_TICK);		//clear IRQ RTC INT
    Uart_Printf("RTC定时报警中断测试通过!!!!\n");
    Uart_Printf("RTC节拍中断测试通过!!!!\n");
    rRTCCON = 0x0;    	// R/W disable(for power consumption), 1/32768, Normal(merge), No reset
}



void __irq Rtc_Int(void)
{
    rI_ISPC=BIT_RTC;   
    //rI_ISPC; //is needed only when cache=on & wrbuf=on & BSFRD=0
    //Uart_Printf("RTC Alarm Interrupt O.K.\n");
    isRtcInt=17;
}


void Test_Rtc_Alarm(void)  
{
    //Uart_Printf("[RTC Alarm Test for S3C44B0X]\n");
	Uart_Printf("RTC定时报警中断设定时间为:10秒\n");
	rRTCCON = 0x01; // R/W enable, 1/32768, Normal(merge), No reset

    rALMYEAR=rBCDYEAR;
    rALMMON =rBCDMON;
    rALMDAY =rBCDDAY;
    rALMHOUR=rBCDHOUR;
    rALMMIN =rBCDMIN;
    rALMSEC =rBCDSEC+0x10;
    if(rALMSEC>0x59)
    {
       	rALMMIN =rBCDMIN+1;
       	rALMSEC =rALMSEC-0x60;
     }  
   
    Uart_Printf("定时时间:%4x年%2x月%2x日,%2x:%2x:%2x\n",0x2000+rALMYEAR,rALMMON,rALMDAY,rALMHOUR,rALMMIN,rALMSEC);
    rRTCCON = 0x0;    // R/W disable(for power consumption), 1/32768, Normal(merge), No reset
    
}


void __irq Rtc_Tick(void)
{
    rI_ISPC=BIT_TICK;   
   	rRTCCON = 0x01; // R/W enable, 1/32768, Normal(merge), No reset
    RTC_sec=rBCDSEC;
	//if(rBCDYEAR >= 0x90) 
	    //RTC_year = 0x1900 + rBCDYEAR;
	//else 
	RTC_year = 0x2000 + rBCDYEAR;
	RTC_month=rBCDMON;
	RTC_day=rBCDDAY;
	RTC_weekday=rBCDDATE;
	RTC_hour=rBCDHOUR;
	RTC_minute=rBCDMIN;
	//RTC_sec=rBCDSEC;
	Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
	Uart_Printf("%4x年%2x月%2x日,星期%s,%2x:%2x:%2x",RTC_year,RTC_month,
		RTC_day,date[RTC_weekday],RTC_hour,RTC_minute,RTC_sec);
	rRTCCON=0x0;	//END
	isRtcInt++;
    	
}

⌨️ 快捷键说明

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