#include "myprintf.h"
#define BCDYEAR (*(volatile unsigned long *)0xE2800088 )
#define BCDMON (*(volatile unsigned long *)0xE2800084 )
#define BCDDAY (*(volatile unsigned long *)0xE2800080 )
#define BCDDAYWEEK (*(volatile unsigned long *)0xE280007c )
#define BCDHOUR (*(volatile unsigned long *) 0xE2800078)
#define BCDMIN (*(volatile unsigned long *)0xE2800074)
#define BCDSEC (*(volatile unsigned long*)0xE2800070)
#define RTCCON (*(volatile unsigned long *)0xE2800040)
char *weekday[] = {" ","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
void rtc_show_time(void)
{
unsigned long year,month,date,hour,min,sec;
unsigned long tday;
RTCCON|=(1<<0);
year = BCDYEAR;
year = 0x2000 + year;
month= BCDMON;
date = BCDDAYWEEK;
hour = BCDHOUR;
min = BCDMIN;
sec = BCDSEC;
tday = BCDDAY;
RTCCON&=~(1<<0);
my_printf("%x : %x : %x %s, %x/%x/%x\r\n", hour, min, sec, weekday[tday], month, date, year);
}
void rtc_set_time()
{
RTCCON|=(1<<0);
// 初始值为重置值
unsigned long year = 13;
unsigned long month = 2;
unsigned long date = 5;
unsigned long hour = 22;
unsigned long min = 36;
unsigned long sec = 0;
unsigned long weekday= 3;
//将时间转化为BCD码
year = ( ((year/100)<<8) +(((year/10)%10)<<4) + (year%10) );
month = ( ((month/10)<<4)+ (month%10) );
date = ( ((date/10)<<4) + (date%10) );
weekday = (weekday%10);
hour =( ((hour/10)<<4) + (hour%10) );
min =( ((min/10)<<4) + (min%10) );
sec =( ((sec/10)<<4) + (sec%10) );
// 保存BCD码
BCDSEC = sec;
BCDMIN = min;
BCDHOUR = hour;
BCDDAYWEEK = date;
BCDDAY = weekday;
BCDMON = month;
BCDYEAR = year;
RTCCON&=~(1<<0);
my_printf("reset success\r\n");
}
qt210移植的rtc
最新推荐文章于 2023-06-04 21:26:14 发布