📄 rtc_driver.c
字号:
/************************************************************/
/* PROJECT NAME: RTC.c */
/* Project: LPC2129 Training course */
/* Engineer: Y.Stalin stalin@nstlindia.com */
/* Filename: GPIO_Driver.c */
/* Language: C */
/* Compiler: Keil ARM GCC */
/* Assembler: */
/* */
/************************************************************/
/* COPYRIGHT: NSTL 2008 */
/* LICENSE: PROPRIETORY */
/************************************************************/
/* Function: */
/* */
/* Example */
/* */
/* Demonstrates Use of the LPC2129 GPIO */
/* */
/* Oscillator frequency 12.000 Mhz */
/* Target board NSTL NST2100 */
/************************************************************/
#include <LPC214X.H>
#include "rtc.h"
DWORD alarm_on = 0;
RTCTime local_time,alarm_time, current_time;
/*****************************************************************************
** Function name: RTCHandler
**
** Descriptions: RTC interrupt handler, it executes based on the
** the alarm setting
**
** parameters: None
** Returned value: None
**
*****************************************************************************/
void RTCHandler (void)
{
ILR |= ILR_RTCCIF; /* clear interrupt flag */
// 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;
AMR = 0;
CIIR = 0;
CCR = 0x10;
// 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;
}
//////////////////////////////////////////////////////////////////////////////
void setTime(unsigned long hr,unsigned long min,unsigned long sec,unsigned long date,unsigned long month,unsigned long year)
{
local_time.RTC_Hour = hr;
local_time.RTC_Min = min;
local_time.RTC_Sec = sec;
local_time.RTC_Mday = date;
local_time.RTC_Wday = 7;
local_time.RTC_Yday = 129;
local_time.RTC_Mon = month;
local_time.RTC_Year = year;
RTCSetTime(local_time); // Set local time
}
//////////////////////////////////////////////////////////////////////////////
unsigned char *getTime(void)
{
unsigned char static time[9];
unsigned long temp;
current_time = RTCGetTime();
temp=current_time.RTC_Hour;
time[0]=(temp/10)+0x30;
time[1]=(temp%10)+0x30;
time[2]=':';
temp=current_time.RTC_Min;
time[3]=(temp/10)+0x30;
time[4]=(temp%10)+0x30;
time[5]=':';
temp=current_time.RTC_Sec;
time[6]=(temp/10)+0x30;
time[7]=(temp%10)+0x30;
time[8]='\0';
return time;
}
/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
unsigned char *getDate(void)
{
unsigned char static date[11];
unsigned long temp;
current_time = RTCGetTime();
temp=current_time.RTC_Mday;
date[0]=(temp/10)+0x30;
date[1]=(temp%10)+0x30;
date[2]='/';
temp=current_time.RTC_Mon;
date[3]=(temp/10)+0x30;
date[4]=(temp%10)+0x30;
date[5]='/';
temp=current_time.RTC_Year;
date[6]=(temp/1000)+0x30;
temp=temp%1000;
date[7]=(temp/100)+0x30;
temp=temp%100;
date[8]=(temp/10)+0x30;
date[9]=(temp%10)+0x30;
date[10]='\0';
return date;
}
/////////////////////////////////////////////////////////////////////////////
/*****************************************************************************
** End Of File
******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -