📄 rtc.c
字号:
/*********************************************************************
* Copyright (c) 2011-2012,李士伟
* All rights reserved.
*文 件 名:rtc.c
*描 述:实时时钟驱动源文件
*当前版本:V1.00
*作 者:李士伟
*创建日期:2012.01.25
**********************************************************************/
#include <drivers\lpc2103\rtc.h>
#include <drivers\lpc2103\lpc2103.h>
#include <drivers\lpc2103\vic.h>
#include <kernel\asm.h>
#define RTC_CLKEN 0x01
#define RTC_CTCRST 0x02
#define RTC_CTTEST 0x0C
#define RTC_CLKSRC 0x10
/* 计数增量中断标志位 */
#define RTC_CIF 0x01
/* 报警中断标志位 */
#define RTC_AIF 0x02
/* 计数器增量中断使能位 */
#define RTC_IMSEC 0x01
#define RTC_IMMIN 0x02
#define RTC_IMHOUR 0x04
#define RTC_IMDOM 0x08
#define RTC_IMDOW 0x10
#define RTC_IMDOY 0x20
#define RTC_IMMON 0x40
#define RTC_IMYEAR 0x80
/* 报警屏蔽位,用这些宏置位AMR寄存器屏蔽相应中断 */
#define RTC_AMRSEC 0x01
#define RTC_AMRMIN 0x02
#define RTC_AMRHOUR 0x04
#define RTC_AMRDOM 0x08
#define RTC_AMRDOW 0x10
#define RTC_AMRDOY 0x20
#define RTC_AMRMON 0x40
#define RTC_AMRYEAR 0x80
/*
extern void RTC_Handler(void);
*/
void RTC_ISR(void)
{
INT8U RTC_reg = 0;
RTC_reg = ILR; /* 获取中断标志 */
ILR = RTC_reg; /* 清除中断标志 */
/* 在可中断嵌套情况下,提前通知VIC中断处理完成,让VIC有机会响应其它中断源 */
VICVectAddr = 0x00000000;
if (RTC_reg & RTC_CIF) /* 计数中断处理 */
{
/* 这里添加处理代码 */
}
if (RTC_reg & RTC_AIF) /* 报警中断处理 */
{
/* 这里添加处理代码 */
}
}
/*********************************************************************
*函 数 名:RTC_Init
*描 述:初始化实时时钟
*输入参数:无
*输出参数:无
*返 回 值:无
*注 意:RTC硬件使用外部32.768KHz晶振作为时钟源
**********************************************************************/
void RTC_Init(void)
{
INT8U RTC_reg = 0;
/* 这里我的目的只是让它计时,禁止所有RTC中断
如果需要设置中断处理,请在arch\lpc2103\irq.s文件定义处理句柄
调用VIC_RegisterIRQ注册中断,并设置相应的CIIR和AMR寄存器
对于设置报警中断同时需设置相应的报警寄存
*/
/* VIC_RegisterIRQ(RTC_Handler, RTC_INTR_NUM, RTC_INTR_PRIO); */
/* 这里设置报警寄存器 */
/*
ALSEC =
ALMIN =
ALHOUR =
ALDOM =
ALDOW =
ALDOY =
ALMON =
ALYEAR =
*/
CIIR = 0x00;
AMR = 0xFF;
RTC_reg = (RTC_CLKEN | RTC_CLKSRC);
CCR = RTC_reg; /* 使能RTC和选通外部晶振 */
}
/*********************************************************************
*函 数 名:RTC_SetTime
*描 述:设置日期时间
*输入参数:tm: 实时日期时间结构体指针
*输出参数:无
*返 回 值:无
*注 意:
**********************************************************************/
void RTC_SetTime(RTime *tm)
{
YEAR = tm->year;
MONTH = tm->month;
DOM = tm->day;
DOW = tm->week;
HOUR = tm->hour;
MIN = tm->min;
SEC = tm->sec;
}
/*********************************************************************
*函 数 名:RTC_GetTime
*描 述:获取日期时间
*输入参数:无
*输出参数:tm: 实时日期时间结构体指针
*返 回 值:无
*注 意:
**********************************************************************/
void RTC_GetTime(RTime *tm)
{
tm->sec = SEC;
tm->min = MIN;
tm->hour = HOUR;
tm->week = DOW;
tm->day = DOM;
tm->month = MONTH;
tm->year = YEAR;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -