📄 rtc.c
字号:
/*****************************************************************************
* rtc.c: Realtime clock C file for Philips LPC214x Family Microprocessors
*
* Copyright(C) 2006, Philips Semiconductor
* All rights reserved.
*
* History
* 2005.10.01 ver 1.00 Prelimnary version, first Release
*
*****************************************************************************/
#include "LPC210x.h" /* LPC21xx definitions */
#include "type.h"
#include "irq.h"
#include "timer.h"
#include "rtc.h"
BYTE TIME_STR[50];
RTCTime local_time, alarm_time, current_time;
DWORD alarm_on = 0;
/*****************************************************************************
** Function name: RTCHandler
**
** Descriptions: RTC interrupt handler, it executes based on the
** the alarm setting
**
** parameters: None
** Returned value: None
**
*****************************************************************************/
void RTCHandler (void) __irq
{
// ILR |= ILR_RTCCIF; /* clear interrupt flag */
ILR |= ILR_RTCALF;
IENABLE; /* handles nested interrupt */
alarm_on = 1;
IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}
/*****************************************************************************
** Function name: RTCInit
**
** Descriptions: Initialize RTC timer
**
** parameters: None
** Returned value: None
**
*****************************************************************************/
void RTCInit( void )
{
alarm_on = 0;
/*--- Initialize registers ---*/
AMR = 0;
CIIR = 0;
CCR = 0;
PREINT = PREINT_RTC;
PREFRAC = PREFRAC_RTC;
return;
}
/*****************************************************************************
** Function name: RTCStart
**
** Descriptions: Start RTC timer
**
** parameters: None
** Returned value: None
**
*****************************************************************************/
void RTCStart( void )
{
/*--- Start RTC counters ---*/
CCR |= CCR_CLKEN;
ILR = ILR_RTCCIF;
return;
}
/*****************************************************************************
** Function name: RTCStop
**
** Descriptions: Stop RTC timer
**
** parameters: None
** Returned value: None
**
*****************************************************************************/
void RTCStop( void )
{
/*--- Stop RTC counters ---*/
CCR &= ~CCR_CLKEN;
return;
}
/*****************************************************************************
** Function name: RTC_CTCReset
**
** Descriptions: Reset RTC clock tick counter
**
** parameters: None
** Returned value: None
**
*****************************************************************************/
void RTC_CTCReset( void )
{
/*--- Reset CTC ---*/
CCR |= CCR_CTCRST;
return;
}
/*****************************************************************************
** Function name: RTCSetTime
**
** Descriptions: Setup RTC timer value
**
** parameters: None
** Returned value: None
**
*****************************************************************************/
void RTCSetTime( RTCTime Time )
{
SEC = Time.RTC_Sec;
MIN = Time.RTC_Min;
HOUR = Time.RTC_Hour;
DOM = Time.RTC_Mday;
DOW = Time.RTC_Wday;
DOY = Time.RTC_Yday;
MONTH = Time.RTC_Mon;
YEAR = Time.RTC_Year;
return;
}
/*****************************************************************************
** Function name: RTCSetAlarm
**
** Descriptions: Initialize RTC timer
**
** parameters: None
** Returned value: None
**
*****************************************************************************/
void RTCSetAlarm( RTCTime Alarm )
{
ALSEC = Alarm.RTC_Sec;
ALMIN = Alarm.RTC_Min;
ALHOUR = Alarm.RTC_Hour;
ALDOM = Alarm.RTC_Mday;
ALDOW = Alarm.RTC_Wday;
ALDOY = Alarm.RTC_Yday;
ALMON = Alarm.RTC_Mon;
ALYEAR = Alarm.RTC_Year;
return;
}
/*****************************************************************************
** Function name: RTCGetTime
**
** Descriptions: Get RTC timer value
**
** parameters: None
** Returned value: The data structure of the RTC time table
**
*****************************************************************************/
RTCTime RTCGetTime( void )
{
RTCTime LocalTime;
LocalTime.RTC_Sec = SEC;
LocalTime.RTC_Min = MIN;
LocalTime.RTC_Hour = HOUR;
LocalTime.RTC_Mday = DOM;
LocalTime.RTC_Wday = DOW;
LocalTime.RTC_Yday = DOY;
LocalTime.RTC_Mon = MONTH;
LocalTime.RTC_Year = YEAR;
return LocalTime;
}
/*****************************************************************************
** Function name: RTCSetAlarmMask
**
** Descriptions: Set RTC timer alarm mask
**
** parameters: Alarm mask setting
** Returned value: None
**
*****************************************************************************/
void RTCSetAlarmMask( DWORD AlarmMask )
{
/*--- Set alarm mask ---*/
AMR = AlarmMask;
return;
}
static WORD strcopy(BYTE *str1, const BYTE *str2)
{
WORD index = 0;
while ( str2[index] != 0 )
{
str1[index] = str2[index];
index++;
}
return index;
}
BYTE gettimeofday(RTCTime *time, BYTE str[])
{
BYTE len;
BYTE s[5];
switch( time->RTC_Wday )
{
case 0: len = strcopy(&str[0], "Sun");
break;
case 1: len = strcopy(&str[0], "Mon");
break;
case 2: len = strcopy(&str[0], "Tue");
break;
case 3: len = strcopy(&str[0], "Wed");
break;
case 4: len = strcopy(&str[0], "Thu");
break;
case 5: len = strcopy(&str[0], "Fri");
break;
case 6: len = strcopy(&str[0], "Sat");
}
len += strcopy(&str[len], ", ");
sprintf(s,"%d ", time->RTC_Mday);
len += strcopy(&str[len],s);
switch( time->RTC_Mon )
{
case 1: len += strcopy(&str[len], "Jan ");
break;
case 2: len += strcopy(&str[len], "Feb ");
break;
case 3: len += strcopy(&str[len], "Mar ");
break;
case 4: len += strcopy(&str[len], "Apr ");
break;
case 5: len += strcopy(&str[len], "May ");
break;
case 6: len += strcopy(&str[len], "Jun ");
break;
case 7: len += strcopy(&str[len], "Jul ");
break;
case 8: len += strcopy(&str[len], "Aug ");
break;
case 9: len += strcopy(&str[len], "Sep ");
break;
case 10:len += strcopy(&str[len], "Oct ");
break;
case 11:len += strcopy(&str[len], "Nov ");
break;
case 12:len += strcopy(&str[len], "Dec ");
}
sprintf(s,"%4d ", time->RTC_Year);
len += strcopy(&str[len], s);
sprintf(s,"%02d:", time->RTC_Hour);
len += strcopy(&str[len], s);
sprintf(s,"%02d:", time->RTC_Min);
len += strcopy(&str[len], s);
sprintf(s,"%02d ", time->RTC_Sec);
len += strcopy(&str[len], s);
len += strcopy(&str[len], "GMT");
return len;
}
/*****************************************************************************
** End Of File
******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -