📄 rtc.c
字号:
#ifndef _Include
#include "Include.h"
#endif
TIME_STRUC TIME2220;
/****************************************************************************
* 名称:RTCIni()
* 功能:初始化实时时钟。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void RTCIni(void)
{
PCF8563Init();
PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
ILR=0x03; //清除报警和计数器中断
AMR=0x00; //报警屏闭关
ALSEC=0x00; //秒报警值
CIIR=0x00; //禁止中断
LPC2220SetRTC();
CIIR=0x01; //打开秒值递增报警
CCR=0x01; //使能时钟
VICVectAddr8 = (int)IRQ_RTCReflash;
VICVectCntl8 = (0x20 | VIC_RTC);
}
/****************************************************************************
* 名称:OpenRTC_IRQ()
* 功能:打开RTC中断
* 入口参数:无
* 出口参数:无
****************************************************************************/
void OpenRTC_IRQ(void)
{
VICIntEnable |= INT_RTC; // 中断使能 实时时钟
}
/****************************************************************************
* 名称:CloseRTC_IRQ()
* 功能:关闭RTC中断
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CloseRTC_IRQ(void)
{
VICIntEnClr = INT_RTC; // 中断使能 实时时钟
}
/****************************************************************************
* 名称:LPC2220SetRTC()
* 功能:设置实时时钟。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void LPC2220SetRTC(void)
{
CCR = 0x00; // 停止RTC
PCF8563TimeGet();
YEAR = 2000+(TIME8563.year>>4)*10+(TIME8563.year&0x0f); // 初始化年
MONTH = (TIME8563.month>>4)*10+(TIME8563.month&0x0f); // 初始化月
DOM = (TIME8563.day>>4)*10+(TIME8563.day&0x0f); // 初始化日
DOW = TIME8563.weekday&0x07;
HOUR = (TIME8563.hour>>4)*10+(TIME8563.hour&0x0f);
MIN = (TIME8563.min>>4)*10+(TIME8563.min&0x0f);
SEC = (TIME8563.sec>>4)*10+(TIME8563.sec&0x0f);
CCR=0x01; //使能时钟
}
/****************************************************************************
* 名称:ReadTimeRtc()
* 功能:读取RTC的时间值
* 入口参数:无
* 出口参数:无
****************************************************************************/
void ReadTimeRtc(void)
{
INT32U datas;
INT32U times;
INT32U bak;
times = CTIME0; // 读取完整时钟寄存器
datas = CTIME1;
bak = (datas>>16)&0xFFF; // 取得年值
TIME2220.year=bak;
bak = (datas>>8)&0x0F; // 取得月值
TIME2220.month=bak;
bak = datas&0x1F; // 取得日值
TIME2220.day=bak;
bak = (times>>24)&0x07; // 取得星期值
TIME2220.weekday=bak;
bak = (times>>16)&0x1F; // 取得时的值
TIME2220.hour=bak;
bak = (times>>8)&0x3F; // 取得分的值
TIME2220.min=bak;
bak = times&0x3F; // 取得秒的值
TIME2220.sec=bak;
datas=ILR;
ILR=datas;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -