RTC 就是实时时钟芯片, 用来在系统断电时, 利用备用的锂电池继续记录时间。 S5PV210 的RTC有下面的特点
1.支持BCD数字
2.支持alarm功能
3.支持tick功能
4.支持毫秒级tick time。
操作有一下相关内容:类似与DS1302,先设置值,然后就可以读。
1.使能RTC控制器,使能rtc 控制器
2.使能rtc tick timer,这里应该是中断允许。
3.向寄存器写时间相关的日期,操作的时候可以读取。
参考代码如下:
char *day[8] = {" ","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
void rtc_realtime_display(void)
{
int counter = 0;
unsigned long usec = 0;
// 使能rtc控制器
rtc_enable(true);
// 使能rtc tick timer
rtc_ticktime_enable(true);
// 打印5次时间
while( counter < 5)
{
if(usec != BCDSEC)
{
usec = BCDSEC;
rtc_print();
counter++;
}
}
// 关闭rtc控制器
rtc_ticktime_enable(false);
// 关闭rtc tick timer
rtc_enable(false);
}
// 使能/关闭rtc控制器
void rtc_enable(unsigned char bdata)
{
unsigned long uread;
uread = RTCCON;
RTCCON = (uread&~(1<<0))|(bdata);
}
// 使能/关闭Tick timer
void rtc_ticktime_enable(unsigned char bdata)
{
unsigned long uread;
uread = RTCCON;
RTCCON = ( (uread&~(1<<8)) | (bdata<<8) );
}
// 打印时间
void rtc_print(void)
{
unsigned long uyear,umonth,udate,uday,uhour,umin,usec;
uyear = BCDYEAR;
uyear = 0x2000 + uyear;
umonth= BCDMON;
udate = BCDDATE;
uhour = BCDHOUR;
umin = BCDMIN;
usec = BCDSEC;
uday = BCDDAY;
printf("%2x : %2x : %2x %10s, %2x/%2x/%4x\r\n", uhour, umin, usec, day[uday], umonth, udate, uyear);
}
void rtc_settime(void)
{
// 初始值为重置值
unsigned long year = 12;
unsigned long month = 5;
unsigned long date = 1;
unsigned long hour = 12;
unsigned long min = 0;
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) );
rtc_enable(true);
// 保存BCD码
BCDSEC = sec;
BCDMIN = min;
BCDHOUR = hour;
BCDDATE = date;
BCDDAY = weekday;
BCDMON = month;
BCDYEAR = year;
rtc_enable(false);
printf("reset success\r\n");
}