⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtc.c

📁 Rabbit 32Bit RTOS源代码
💻 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 + -