📄 rtc.c
字号:
/*
;************************************************************************************************************
;* 北京精仪达盛科技有限公司
;* 研 发 部
;*
;* http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------
;*
;* 文件名称 : RTC.c
;* 文件功能 : 该文件为实时时钟函数。
;* 补充说明 :
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM7开发小组
;* 修改日期 : 2004/04/25
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : XXXX
;* 创建日期 : XXXX
;* 版本声明 : XXXX
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
#include "../inc/44b.h"
#include "../inc/rtc.h"
#define RTC_RW_EN() rRTCCON = 1 //|= 1
#define RTC_RW_DS() rRTCCON &= 0xfe
extern int MCLK;
/*
*************************************************************************************************************
- 函数名称 : void RtcSetDay(TIME_STRUC *time)
- 函数说明 : 设定日
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
void RtcSetDay(TIME_STRUC *time)
{
RTC_RW_EN(); //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768
rBCDYEAR = time->year;; //年
rBCDMON = time->month; //月
rBCDDAY = time->day; //日
RTC_RW_DS();
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetWeek(TIME_STRUC *time)
- 函数说明 : 设定星期
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
void RtcSetWeek(TIME_STRUC *time)
{
RTC_RW_EN();
rBCDDATE = time->weekday;
RTC_RW_DS();
}
/*
*************************************************************************************************************
- 函数名称 : void RtcSetTime(TIME_STRUC *time)
- 函数说明 : 设定小时、分、秒
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
void RtcSetTime(TIME_STRUC *time)
{
RTC_RW_EN(); //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768
rBCDHOUR = time->hour; //小时
rBCDMIN = time->min; //分
rBCDSEC = time->sec; //秒
RTC_RW_DS();
}
/*
*************************************************************************************************************
- 函数名称 : void RtcInit(TIME_STRUC *time)
- 函数说明 : 实时时钟初始化
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
void RtcInit(TIME_STRUC *time)
{
RTC_RW_EN(); //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768
rBCDYEAR = time->year;; //年
rBCDMON = time->month; //月
rBCDDAY = time->day; //日
rBCDDATE = time->weekday; //星期
rBCDHOUR = time->hour; //小时
rBCDMIN = time->min; //分
rBCDSEC = time->sec; //秒
rTICINT = 0x80+127; //enable tick timer interrupt, set tick timer interrupt time = (127+1)/128 second
RTC_RW_DS();
}
/*
*************************************************************************************************************
- 函数名称 : void RtcAlarm(TIME_STRUC *time)
- 函数说明 : 实时时钟报警
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
void RtcAlarm(TIME_STRUC *time)
{
rALMYEAR = time->year; //年
rALMMON = time->month; //月
rALMDAY = time->day; //日
rALMHOUR = time->hour; //小时
rALMMIN = time->min; //分
rALMSEC = time->sec; //秒
rRTCALM = 0x7f; //全局警报使能控制,年、月、日、星期、时分秒警报使能控制
}
/*
*************************************************************************************************************
- 函数名称 : void RtcGetTime(TIME_STRUC *time)
- 函数说明 : 得到实时时钟
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
void RtcGetTime(TIME_STRUC *time)
{
unsigned char m;
RTC_RW_EN(); //RTC读写使能
time->year = 2000 + rBCDYEAR;
time->weekday = rBCDDATE;
m = rBCDMON;
time->month = m;//(m>>4)*10 + (m&0xf); //BCD码转十进制
m = rBCDDAY;
time->day = m;//(m>>4)*10 + (m&0xf); //BCD码转十进制
m = rBCDHOUR;
time->hour = m;//(m>>4)*10 + (m&0xf); //BCD码转十进制
m = rBCDMIN;
time->min = m;//(m>>4)*10 + (m&0xf); //BCD码转十进制
m = rBCDSEC;
time->sec = m;//(m>>4)*10 + (m&0xf); //BCD码转十进制
RTC_RW_DS(); //RTC读写禁止(降低功率消耗),选择BCD时钟、计数器,无复位,1/32768
}
/*
*************************************************************************************************************
- 函数名称 : void InitSysTimer(unsigned char Freq)
- 函数说明 : 初始化系统定时器
- 输入参数 : TIME_STRUC *time
- 输出参数 : 无
*************************************************************************************************************
*/
void InitSysTimer(unsigned char Freq)
{
rTCON &= 0xf0ffffff; //clear manual update bit, stop Timer 5
rTCFG0 &= 0xff00ffff; //定时器4/5的预分频为16
rTCFG0 |= (16-1)<<16;
rTCFG1 &= 0xff0fffff; //定时器5的MUX为1/8
rTCFG1 |= 2<<20;
rTCNTB5 = MCLK/(Freq*16*8); //定时器5的重装值,在ENABLE之前设定
rTCON |= 0x02000000; //定时器5的MANUAL UPDATE BIT设为1
rTCON &= 0xf0ffffff; //MANUAL UPDATE BIT清零
rTCON |= 0x05000000; //定时器5 start, 设为INTERVAL模式
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -