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

📄 rtc.c

📁 lpc2148 uc/gui的移植例程
💻 C
字号:
/*****************************************************************************
 *   rtc.c:  
*****************************************************************************/
#include "config.h"                       

#if RTC_EN
/*****************************************************************************
** 函数名:	
**
** 功能描述:	实时始终中断处理,处理闹铃的设置
** 
*****************************************************************************/
#if RTC_INTERRUPT_FLAG

void Rtc_Exception (void)
{  

    OS_ENTER_CRITICAL();	       /*  */ 
    ILR |= ILR_RTCCIF;		/* 清中断 */
	OS_EXIT_CRITICAL();	   
	/*Add your code here*/
      
}
#endif

/*****************************************************************************
** 函数名:		RTCInit
**
** 函数功能:	初始化实时时钟
**
** 
*****************************************************************************/
void RTCInit( void )
{
	/* 设置实时时钟 */
    CCR =0x00;
	/*
	 CLKEN  时钟使能。当该位为1 时,时间计数器使能。为0 时,时间计数器都被禁止, 
	        这时可对其进行初始化。 
	CTCRST  CTC 复位。为1 时,时钟节拍计数器复位。在CCR[1]变为0 之前,它将一直保持复位状态。
	CLKSRC  如果该位为0,时钟节拍计数器计数预分频器的时钟,这与早先的Philips 嵌入式ARM
	系列器件相吻合。如果该位为1,CTC 计数连接在RTCX1 和RTCX2
    两端的32kHz 振荡器信号(关于硬件的详细内容请见 
	*/
    PREINT = Fpclk / 32768 - 1;
    PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
    YEAR = 2007;
    MONTH = 4;
    DOM = 25;
	/*interrupt Setting */
	#if RTC_INTERRUPT_FLAG
	ILR  = (0<<0)|(0<<1)  ;

	/*
	  RTCCIF 为1 时,计数器增量中断模块产生中断。向该位写入1 清除计数器增量中断。 
	  RTCALF 为1 时,报警寄存器产生中断。向该位写入1 清除报警中断。 
	*/ 
	CIIR =  0x00;
	/*
	0 IMSEC 为1 时,秒值的增加产生一次中断。 
    1 IMMIN 为1 时,分值的增加产生一次中断。 
    2 IMHOUR 为1 时,小时值的增加产生一次中断。	 
    3 IMDOM 为1 时,日期(月)值的增加产生一次中断。 
    4 IMDOW 为1 时,星期值的增加产生一次中断。 
    5 IMDOY 为1 时,日期(年)值的增加产生一次中断。 
    6 IMMON 为1 时,月值的增加产生一次中断。 
    7 IMYEAR 为1 时,年值的增加产生一次中断。 
	*/

	AMR  =  0x00;
	/*
	 0 AMRSEC 为1 时,秒值不与报警寄存器比较。 
	 1 AMRMIN 为1 时,分值不与报警寄存器比较。 
	 2 AMRHOUR 为1 时,小时值不与报警寄存器比较。 
	 3 AMRDOM 为1 时,日期(月)值不与报警寄存器比较。 
	 4 AMRDOW 为1 时,星期值不与报警寄存器比较。 		 				
	 5 AMRDOY 为1 时,日期(年)值不与报警寄存器比较。 
	 6 AMRMON 为1 时,月值不与报警寄存器比较。 
	 7 AMRYEAR 为1 时,年值不与报警寄存器比较。 
	*/
	#endif

}

/*****************************************************************************
** 函数名:		RTCStart
**
** 函数功能:    开启实时时钟 
**
** 
*****************************************************************************/
void RTCStart( void ) 
{
    CCR = 0x01;
	/*
	 CLKEN  时钟使能。当该位为1 时,时间计数器使能。为0 时,时间计数器都被禁止, 
	        这时可对其进行初始化。 
	CTCRST  CTC 复位。为1 时,时钟节拍计数器复位。在CCR[1]变为0 之前,它将一直保持复位状态。
	CLKSRC  如果该位为0,时钟节拍计数器计数预分频器的时钟,这与早先的Philips 嵌入式ARM
	系列器件相吻合。如果该位为1,CTC 计数连接在RTCX1 和RTCX2
    两端的32kHz 振荡器信号(关于硬件的详细内容请见 
	*/
}

/*****************************************************************************
** 函数名:		RTCStop
**
** 函数功能:	停止始终 
**
*****************************************************************************/
void RTCStop( void )
{   
    CCR &= 0xfe;
	/*
	 CLKEN  时钟使能。当该位为1 时,时间计数器使能。为0 时,时间计数器都被禁止, 
	        这时可对其进行初始化。 
	CTCRST  CTC 复位。为1 时,时钟节拍计数器复位。在CCR[1]变为0 之前,它将一直保持复位状态。
	CLKSRC  如果该位为0,时钟节拍计数器计数预分频器的时钟,这与早先的Philips 嵌入式ARM
	系列器件相吻合。如果该位为1,CTC 计数连接在RTCX1 和RTCX2
    两端的32kHz 振荡器信号(关于硬件的详细内容请见 
	*/
} 

/*****************************************************************************
** 函数名:		RTC_CTCReset
**
** 功能:		重启时钟计数器 
**
** 
*****************************************************************************/
void RTC_CTCReset( void )
{   
    CCR |= 0x02;
	/*
	 CLKEN  时钟使能。当该位为1 时,时间计数器使能。为0 时,时间计数器都被禁止, 
	        这时可对其进行初始化。 
	CTCRST  CTC 复位。为1 时,时钟节拍计数器复位。在CCR[1]变为0 之前,它将一直保持复位状态。
	CLKSRC  如果该位为0,时钟节拍计数器计数预分频器的时钟,这与早先的Philips 嵌入式ARM
	系列器件相吻合。如果该位为1,CTC 计数连接在RTCX1 和RTCX2
    两端的32kHz 振荡器信号(关于硬件的详细内容请见 
	*/
}

/*****************************************************************************
**函数名:		RTCSetTime
**
** 功能描述:	设置时钟的初始值 
**
** 
*****************************************************************************/
void RTCSetTime( RTCTime Time ) 
{
    SEC = Time.RTC_Sec;		 /*SEC 6 秒值的范围为0~59。 */
    MIN = Time.RTC_Min;		 /*MIN 6 分值的范围为0~59。 */
    HOUR = Time.RTC_Hour;	 /*HOUR 5 小时值的范围为0~23。 */
    DOM = Time.RTC_Mday;	 /*DOM 5日期(月)值的范围为1~28,29,30 或31(取决于月份以及是否为闰年)。[1] */
    DOW = Time.RTC_Wday;	 /*星期值的范围为0~6。[1] */
    DOY = Time.RTC_Yday;	 /*日期(年)值的范围为1~365(闰年为366) */
    MONTH = Time.RTC_Mon;	 /*MONTH 4 月值的范围为1~12。 */
    YEAR = Time.RTC_Year;    /*YEAR 12 年值的范围为0~4095 */
}

/*****************************************************************************
** 函数名:		RTCSetAlarm
**
** 功能描述:		初始华闹铃 
**
** 
*****************************************************************************/
void RTCSetAlarm( RTCTime Alarm ) 
{   
    ALSEC = Alarm.RTC_Sec;	    /* ALSEC 6 秒报警值 */
    ALMIN = Alarm.RTC_Min;		/* ALMIN 6 分报警值 */
    ALHOUR = Alarm.RTC_Hour;	/* ALHOUR 5 小时报警值 */
    ALDOM = Alarm.RTC_Mday;		/* ALDOM 5 日期(月)报警值 */
    ALDOW = Alarm.RTC_Wday;		/* ALDOW 3 星期报警值 */
    ALDOY = Alarm.RTC_Yday;		/* ALDOY 9 日期(年)报警值 */
    ALMON = Alarm.RTC_Mon;		/* ALMON 4 月报警值 */
    ALYEAR = Alarm.RTC_Year;    /* ALYEAR 12 年报警值 */
}

/*****************************************************************************
**函数名:		RTCGetTime
**
**功能描述:		获得时钟的当前值
**
** Returned value:	时钟参数结构体
** 
*****************************************************************************/
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;    
}

/*****************************************************************************
** 函数名:		RTCSetAlarmMask
**
** 功能描述:		闹钟屏蔽 
**
** 
*****************************************************************************/
void RTCSetAlarmMask( uint32 AlarmMask ) 
{ 
    AMR = 0x00;
		/*
	 0 AMRSEC 为1 时,秒值不与报警寄存器比较。 
	 1 AMRMIN 为1 时,分值不与报警寄存器比较。 
	 2 AMRHOUR 为1 时,小时值不与报警寄存器比较。 
	 3 AMRDOM 为1 时,日期(月)值不与报警寄存器比较。 
	 4 AMRDOW 为1 时,星期值不与报警寄存器比较。 		 				
	 5 AMRDOY 为1 时,日期(年)值不与报警寄存器比较。 
	 6 AMRMON 为1 时,月值不与报警寄存器比较。 
	 7 AMRYEAR 为1 时,年值不与报警寄存器比较。 
	*/
}

#endif
/*****************************************************************************
**                            End Of File
******************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -