📄 rtc.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name: rtc.c
** Last modified Date: 2007-12-20
** Last Version: 1.0.0
** Descriptions: 2440 RTC 管理库
**
**--------------------------------------------------------------------------------------------------------
** Created by: Hanhui
** Created date: 2007-12-20
** Version: 1.0.0
** Descriptions: 2440 RTC 管理库
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
*********************************************************************************************************/
#include "config.h"
#include "rtc.h"
/*********************************************************************************************************
定时时间到时触发的函数
*********************************************************************************************************/
static void (*__GpfuncRtcAlarmFunc)(void);
/*********************************************************************************************************
** Function name: __rtcTimeCheck
** Descriptions: 检查一个时间是否有效
** input parameters: prtctimeCheck 需要检查的时间
** output parameters: NONE
** Returned value: -1 表示错误 0 表示正确
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
static int __rtcTimeCheck (RTC_TIME *prtctimeCheck)
{
if (prtctimeCheck->usYear < 2000) {
return (-1);
}
if (prtctimeCheck->ucMonth < 1 ||
prtctimeCheck->ucMonth > 12) {
return (-1);
}
if (prtctimeCheck->ucDate < 1 ||
prtctimeCheck->ucDate > 31) {
return (-1);
}
if (prtctimeCheck->ucDay < 1 ||
prtctimeCheck->ucDay > 7) {
return (-1);
}
if (prtctimeCheck->ucHour > 23) {
return (-1);
}
if (prtctimeCheck->ucMinute > 59) {
return (-1);
}
if (prtctimeCheck->ucSecond > 59) {
return (-1);
}
return (0);
}
/*********************************************************************************************************
** Function name: __rtcIsr
** Descriptions: RTC 中断服务程序
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void __rtcIsr (void)
{
INTER_CLR_PNDING(BIT_RTC);
if (__GpfuncRtcAlarmFunc) {
__GpfuncRtcAlarmFunc();
}
}
/*********************************************************************************************************
** Function name: rtcInit
** Descriptions: 初始化 RTC 模块
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void rtcInit (void)
{
rRTCCON |= 0x01; /* 允许对 RTC 的操作 */
}
/*********************************************************************************************************
** Function name: rtcEnableAlarm
** Descriptions: 允许 RTC 模块闹钟唤醒功能
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void rtcEnableAlarm (void)
{
INTER_CLR_PNDING(BIT_RTC); /* 清除中断 */
HandleRTC = (int)__rtcIsr;
/* changed by lixintian 2008.4.2
vicIrqSet(VIC_CHANNEL_RTC, VIC_CHANNEL_RTC,
(unsigned long)__rtcIsr); /* 允许闹钟中断 */
rRTCALM |= (1 << 6); /* 允许 RTC ALARM */
}
/*********************************************************************************************************
** Function name: rtcDisableAlarm
** Descriptions: 不允许 RTC 模块闹钟唤醒功能
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void rtcDisableAlarm (void)
{
//vicIrqFree(VIC_CHANNEL_RTC); /* 不允许中断 */
rRTCALM &= ~(1 << 6); /* 不允许 RTC ALARM */
}
/*********************************************************************************************************
** Function name: rtcSetAlarmEnBit
** Descriptions: 设置 RTC 模块闹钟唤醒有效位
** input parameters: ucBits 有效位掩码
** output parameters: NONE
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void rtcSetAlarmEnBit (unsigned char ucBits)
{
if (rRTCALM & (1 << 6)) {
rRTCALM = (unsigned char)((1 << 6) | ucBits);
} else {
rRTCALM = (unsigned char)(~(1 << 6) & ucBits);
}
}
/*********************************************************************************************************
** Function name: rtcSetAlarmFunc
** Descriptions: 设置闹铃时间到时, 执行的函数(在中断中执行)
** input parameters: pfuncRtcAlarmFunc 闹铃到时执行的函数
** output parameters: NONE
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void rtcSetAlarmFunc (void (*pfuncRtcAlarmFunc)(void))
{
__GpfuncRtcAlarmFunc = pfuncRtcAlarmFunc;
}
/*********************************************************************************************************
** Function name: rtcSetAlarmTime
** Descriptions: 设置闹钟唤醒时间
** input parameters: prtctimeAlarm 闹铃时间
** output parameters: NONE
** Returned value: NONE
** Created by: Hanhui
** Created Date: 2007/12/20
**--------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -