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

📄 rtc.c

📁 ARM7 lpc2100 RTC驱动API,源码有详细注解
💻 C
字号:
/*******************************************************************************
*File: main.c
*功能: 运行RTC进行计时,并将所计时间值不断地通过串口向上位机发送
*******************************************************************************/
#include "CFG.h"
/*
#define Bln_RTCReadYEAR
#define Bln_RTCReadMONTH
#define Bln_RTCReadDOY
#define Bln_RTCReadDOW
#define Bln_RTCReadDOM
#define Bln_RTCReadHOUR
#define Bln_RTCReadMIN
#define Bln_RTCReadSEC
*/
#ifdef	Bln_RTCReadYEAR
	uint16 RTC_ReadYEAR;	//读年值
#endif

#ifdef	Bln_RTCReadMONTH
	uint8 RTC_ReadMONTH;	//读月值
#endif

#ifdef	Bln_RTCReadDOY
	uint16 RTC_ReadDOY;		//读天值
#endif

#ifdef	Bln_RTCReadDOW
	uint8 RTC_ReadDOW;		//读星期值
#endif

#ifdef	Bln_RTCReadDOM
	uint8 RTC_ReadDOM;		//读日值
#endif

#ifdef	Bln_RTCReadHOUR
	uint8 RTC_ReadHOUR;		//读小时值
#endif

#ifdef	Bln_RTCReadMIN
	uint8 RTC_ReadMIN;		//读分值
#endif

#ifdef	Bln_RTCReadSEC
	uint8 RTC_ReadSEC;		//读秒值
#endif

void RTCInit(uint16 RTC_YEAR,uint8 RTC_MONTH,uint16 RTC_DOY,uint8 RTC_DOW,uint8 RTC_DOM,uint8 RTC_HOUR,uint8 RTC_MIN,uint8 RTC_SEC,uint16 RTC_CIIR);
void Func_RTCReadTime(void);
void Func_RTCRest(void);
void Func_RTCAMR(uint8 RTCAMR_YEAR,uint8 RTCAMR_MONTH,uint8 RTCAMR_DOY,uint8 RTCAMR_DOW,uint8 RTCAMR_DOM,uint8 RTCAMR_HOUR,uint8 RTCAMR_MIN,uint8 RTCAMR_SEC);
void Func_RTCAL(uint16 RTCAL_YEAR,uint8 RTCAL_MONTH,uint16 RTCAL_DOY,uint8 RTCAL_DOW,uint8 RTCAL_DOM,uint8 RTCAL_HOUR,uint8 RTCAL_MIN,uint8 RTCAL_SEC);
/****************************************************************************
* 名    称:void Func_RTCReadTime(void)
* 功    能:读出各个时间的值。
* 入口参数:无
* 出口参数:无
****************************************************************************/


void Func_RTCReadTime(void)
{	uint32 RTCTimer;
	
	//读星期、小时、分、秒
	RTCTimer=CTIME0;
	
	#ifdef	Bln_RTCReadDOW
		RTC_ReadDOW=(RTCTimer>>24) & 0X07;
	#endif
	
	#ifdef	Bln_RTCReadHOUR
		RTC_ReadHOUR=(RTCTimer>>16) & 0X1F;
	#endif
	
	#ifdef	Bln_RTCReadMIN
		RTC_ReadMIN=(RTCTimer>>8) & 0X3F;
	#endif
	
	#ifdef	Bln_RTCReadSEC
		RTC_ReadSEC=(RTCTimer>>0) & 0X3F;
	#endif
	
	//读年、月、日
	RTCTimer=CTIME1;
	
	#ifdef	Bln_RTCReadYEAR
		RTC_ReadYEAR=(RTCTimer>>16) & 0X0FFF;
	#endif
	
	#ifdef	Bln_RTCReadMONTH
		RTC_ReadMONTH=(RTCTimer>>8) & 0X0F;
	#endif
	
	#ifdef	Bln_RTCReadDOM
		RTC_ReadDOM=(RTCTimer>>0) & 0X1F;
	#endif

	
	//读天数
	RTCTimer=CTIME2;
	
	#ifdef	Bln_RTCReadDOY
		RTC_ReadDOY=(RTCTimer>>0) & 0X1FF;
	#endif
}

/****************************************************************************
* 名    称:RTCInit()
* 功    能:初始化实时时钟。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  RTCInit(uint16 RTC_YEAR,uint8 RTC_MONTH,uint16 RTC_DOY,uint8 RTC_DOW,uint8 RTC_DOM,uint8 RTC_HOUR,uint8 RTC_MIN,uint8 RTC_SEC,uint16 RTC_CIIR)
{  //RTC_DOY,一年当中的第几天,RTC_DOW 星期,RTC_DOM几号[例(1月1日)中的1日]
	
    PREINT = Fpclk / 32768 - 1;	      	// 设置基准时钟分频器
    PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
    
    if (RTC_YEAR)
    {	YEAR = RTC_YEAR;						// 设置年
	}
    
    	if (RTC_MONTH)
    {   MONTH = RTC_MONTH;				 		// 设置月
    }
    
    if (RTC_DOY)
    {	DOY=RTC_DOY;							// 设置第几天
    }
    
    if (RTC_DOW)
    {   DOW = RTC_DOW;				 		    // 设置星期
    }
    
    if (RTC_DOM)
    {	DOM=RTC_DOM;							// 设置日
    }
    
    if (RTC_HOUR)
    {   HOUR = RTC_HOUR;						// 设置小时
	}
	
	if (RTC_MIN )
    {   MIN = RTC_MIN;							// 设置分钟
    }
    
    if (RTC_SEC)
    {  	SEC = RTC_SEC;							// 设置秒
    }
    
    CIIR =(CIIR& 0X0000) |(0X01<< RTC_CIIR);	// 设置秒值的增量产生一次中断
    CCR = 0x01;									// 启动RTC
}

/****************************************************************************
* 名    称:void  Func_RTCRest(void)
* 功    能:复位实时时钟。复位后,只有预分频寄存器PREINT,PREFRAC的值被硬件初始化,其余的寄存器不变
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  Func_RTCRest(void)
{	CCR |= 0x02;							// 复位RTC
}
/****************************************************************************
* 名    称:void Func_RTCAMR(uint8 RTCAMR_YEAR,uint8 RTCAMR_MONTH,uint8 RTCAMR_DOY,
			uint8 RTCAMR_DOW,uint8 RTCAMR_DOM,uint8 RTCAMR_HOUR,uint8 RTCAMR_MIN,uint8 RTCAMR_SEC)
* 功    能:报警屏蔽。
* 入口参数:RTCAMR_YEAR、RTCAMR_MONTH、RTCAMR_DOY...
* 出口参数:无
****************************************************************************/
void Func_RTCAMR(uint8 RTCAMR_YEAR,uint8 RTCAMR_MONTH,uint8 RTCAMR_DOY,uint8 RTCAMR_DOW,uint8 RTCAMR_DOM,uint8 RTCAMR_HOUR,uint8 RTCAMR_MIN,uint8 RTCAMR_SEC)
{	AMR=RTCAMR_SEC	<<0  |		//SEC报警屏蔽,1:屏蔽;0:禁止
		RTCAMR_MIN	<<1  |		//MIN报警屏蔽,1:屏蔽;0:禁止
		RTCAMR_HOUR	<<2  |		//HOUR报警屏蔽,1:屏蔽;0:禁止
		RTCAMR_DOM	<<3  |		//DOM报警屏蔽,1:屏蔽;0:禁止
		
		RTCAMR_DOW	<<4  |		//DOW报警屏蔽,1:屏蔽;0:禁止
		RTCAMR_DOY	<<5  |		//DOY报警屏蔽,1:屏蔽;0:禁止
		RTCAMR_MONTH<<6  |		//MONTH报警屏蔽,1:屏蔽;0:禁止
		RTCAMR_YEAR	<<7  ;		//YEAR报警屏蔽,1:屏蔽;0:禁止
}
/****************************************************************************
* 名    称:void Func_RTCAMR(uint16 RTCAL_YEAR,uint8 RTCAL_MONTH,uint16 RTCAL_DOY,uint8 RTCAL_DOW,
			uint8 RTCAL_DOM,uint8 RTCAL_HOUR,uint8 RTCAL_MIN,uint8 RTCAL_SEC)
* 功    能:报警比较值。
* 入口参数:RTCAL_YEAR、RTCAL_MONTH、RTCAL_DOY...
* 出口参数:无
****************************************************************************/
void Func_RTCAL(uint16 RTCAL_YEAR,uint8 RTCAL_MONTH,uint16 RTCAL_DOY,uint8 RTCAL_DOW,uint8 RTCAL_DOM,uint8 RTCAL_HOUR,uint8 RTCAL_MIN,uint8 RTCAL_SEC)
{	ALYEAR	=RTCAL_YEAR;
	ALMON	=RTCAL_MONTH;
	ALDOY	=RTCAL_DOY;
	ALDOW	=RTCAL_DOW;
	
	ALDOM	=RTCAL_DOM;
	ALHOUR	=RTCAL_HOUR;
	ALMIN	=RTCAL_MIN;
	ALSEC	=RTCAL_SEC;
}

⌨️ 快捷键说明

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