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

📄 rtc.c

📁 基于lpc2103的arm7代码
💻 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 + -