📄 rtc.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 + -