📄 rtc.c
字号:
/*
*******************************************************************************
* file name: rtc.c
* description: rtc driver
* author: xzChen(chxzh123@163.com)
* QQ / msn: 36725175 / chxzh123@hotmail.com
*******************************************************************************
*/
#ifndef __RTC_C__
#define __RTC_C__
#include "Includes.h"
void RTC_getdate(date *ret)
{
ret->da_year= 2000 + rBCDYEAR;
ret->da_mon = (rBCDMON>>4)*10+(rBCDMON&0x0f);
ret->da_day = (rBCDDATE>>4)*10+(rBCDDATE&0x0f);
}
void RTC_gettime(time *ret)
{
ret->ti_hour= (rBCDHOUR>>4)*10+(rBCDHOUR&0x0f);
ret->ti_min = (rBCDMIN>>4)*10+(rBCDMIN&0x0f);
ret->ti_hund= 0;
ret->ti_sec = (rBCDSEC>>4)*10+(rBCDSEC&0x0f);
}
void RTC_setdate(date *ret)
{
rBCDYEAR= ret->da_year-2000;
rBCDMON = ((ret->da_mon/10)<<4)+(ret->da_mon%10);
rBCDDATE= ((ret->da_day/10)<<4)+(ret->da_day%10);
}
void RTC_settime(time *ret)
{
rBCDHOUR= ((ret->ti_hour/10)<<4)+(ret->ti_hour%10);
rBCDMIN = ((ret->ti_min/10)<<4)+(ret->ti_min%10);
rBCDSEC = ((ret->ti_sec/10)<<4)+(ret->ti_sec%10);
}
void Rtc_Init(void)
{
date sys_date;
time sys_time;
rRTCCON = 0x0; //No reset[3], Merge BCD counters[2], BCD clock select XTAL[1], RTC Control disable[0]
rTICNT = (1<<7) + 127; //Tick time interrupt enable, Tick time count value 127
RTC_getdate(&sys_date);
RTC_gettime(&sys_time);
if (sys_date.da_year> 2099 ||
sys_date.da_mon > 12 ||
sys_date.da_day > 31 ||
sys_time.ti_hour> 23 ||
sys_time.ti_min > 59 ||
sys_time.ti_sec > 59)
{
rBCDYEAR = 0x06;
rBCDMON = 0x01;
rBCDDATE = 0x01;
rBCDHOUR = 0x00;
rBCDMIN = 0x00;
rBCDSEC = 0x00;
}
rRTCCON = rRTCCON & ~(0xf) | 0x1; //No reset, Merge BCD counters, 1/32768, RTC Control enable
rBCDYEAR = rBCDYEAR & ~(0xff) | TESTYEAR;
rBCDMON = rBCDMON & ~(0x1f) | TESTMONTH;
rBCDDATE = rBCDDATE & ~(0x3f) | TESTDATE;
rBCDDAY = rBCDDAY & ~(0x7) | TESTDAY; //SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
rBCDHOUR = rBCDHOUR & ~(0x3f) | TESTHOUR;
rBCDMIN = rBCDMIN & ~(0x7f) | TESTMIN;
rBCDSEC = rBCDSEC & ~(0x7f) | TESTSEC;
rALMYEAR = TESTYEAR2;
rALMMON = TESTMONTH2;
rALMDATE = TESTDATE2;
rALMHOUR = TESTHOUR2;
rALMMIN = TESTMIN2;
rALMSEC = TESTSEC2 + 9;
rRTCALM = 0x7f; //Global,Year,Month,Day,Hour,Minute,Second alarm enable
rRTCCON = 0x0; //No reset, Merge BCD counters, 1/32768, RTC Control disable
rTICNT = (0<<7) + 127; //Tick time interrupt enable, Tick time count value 127
//Period = (n + 1) / 128 second n:Tick time count value(1~127)
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -