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

📄 rtc.c

📁 RTC设计文档
💻 C
字号:
/********************************************************************************************
*filename:		HA_rtc.c						
*author:		xx
*create date:		2004-3-9                                                                      
*description:	    	The file consists of the function used to config rtc                                                               
*modify history:	                                                                      
*misc:           
********************************************************************************************/


#include "hardware_reg.h"
#include "hardware.h"
#include "HA_typedef.h"
#include "stdio.h"


/***********************************************************
*	FUNCTION:	init_rtc()
*	DESCRIPTION:initial  RTC 
*	PARAMETER:	none
*	RETURN:		HA_EOK
************************************************************/
void init_rtc(void)
{
	write_reg(RTC_CTRL,0x0); // enable rtc and firstly disable watchdog,and latter enable it!
	
	write_reg(RTC_CTRL,0xb); // enable watchdog
}

/***********************************************************
*	FUNCTION:	set_ymd(U32 year, U32 month, U32 day)
*	DESCRIPTION:	set year, month, day time	
*	PARAMETER:	year		
*			month
*			day
*	RETURN:		HA_EOK if the data valid, -1 if the data illigal.
************************************************************/

extern int set_ymd(U32 year, U32 month, U32 day)		
{
	int i;
	U32 temp,tmp_year,tmp_month,tmp_day;
	if(year >2014 || month >12|| day > 31)
	{
		return(-1);
		}
	temp = (year << 9) + (month << 5) +(day);
	*(RP)RTC_YMD = temp;	
	return (HA_EOK);
	}

/***********************************************************
*	FUNCTION:	set_hms(U32 hour, U32 minute, U32 second)
*	DESCRIPTION:	set hour, minute, day second	
*	PARAMETER:	hour		
*			minute
*			second
*	RETURN:		HA_EOK if the data valid, -1 if the data illigal.
************************************************************/

extern int set_hms( U32 hour,U32 minute,U32 second)
{
	int i;
	U32 temp,tmp_hour,tmp_minute,tmp_second;
	if(hour > 24 || minute > 60 || second > 60)
	{
		return (-1);
		}
	
	temp = (hour << 12) + (minute << 6) + second;
	*(RP)RTC_HMS = temp; 
	
	return E_OK;
	}	

/***********************************************************
*	FUNCTION:	set_alarm()
*	DESCRIPTION:	set the alarm, when the counter runs to 0,print "time out" 	
*	PARAMETER:	hour			
*			minute
*			
*	RETURN:		if set OK,return 0;if fail,return -1
************************************************************/
extern void set_alarm(int month,int day,int hour, int minute)
{
	U32 data_temp;
	data_temp = (month<<28)+(day<<23)+(hour<<6) + minute;
	*(RP) RTC_ALRM = data_temp;

	//return E_OK;
}

/***********************************************************
*	FUNCTION:	rtc_int_serv ()
*	DESCRIPTION:	check the corresponding bit 	
*	PARAMETER:			
*			
*			
*	RETURN:		void
************************************************************/
extern ER set_samp(U32 frequency_reload)
{
	U32 frequency_temp;
	frequency_temp = (frequency_reload<<16) + frequency_reload;
	*(RP) RTC_SAMP = frequency_temp;
	return E_OK;
}

extern ER set_wdog_cont(U32 wd_reload)
{
	U32 wd_temp;
	wd_temp =(wd_reload<<24) + wd_reload;
	*(RP) RTC_WCNT = wd_temp;
	return E_OK;
	
}

static ER wdog_serv(void)
{
	write_reg(RTC_WSVCE,  RTC_WSVCE_VAL);
	return E_OK;
}





extern ER set_int_en(U32 int_en)
{
	write_reg(RTC_IEN,  int_en);
	return E_OK;
}


void ENT_INT_N_RTC( void )
{
	if((*(RP)RTC_ISTAT) & 0x01 == 0x01)
	  
	  *(RP)RTC_ISTAT = 0x01;
	  
	else if ((*(RP)RTC_ISTAT) & 0x02 == 0x02)
	
	  *(RP)RTC_ISTAT = 0x02;
	 				 				
}


extern ER int_serv_rtc(void)
{
	//U32 i;
	volatile U32 IntStatus;
	int rtc_time1;
	
	
	
		
	IntStatus = read_reg(RTC_ISTAT);
	
	if( (IntStatus & 0x01) == 0x01 )		//Sample int service
	{
		write_reg(RTC_ISTAT,0x1);
		return E_OK;
	}
    else if( (IntStatus & 0x02) == 0x02 )		//Watchdog int service
	{
		write_reg(RTC_ISTAT,0x2);
		return E_OK;
	}
    else if( (IntStatus & 0x04) == 0x04 )		//Second roll int service
	{
		write_reg(RTC_ISTAT,0x4);
		return E_OK;
	}
    else if( (IntStatus & 0x08) == 0x08 )		//Minute roll int service
	{
		write_reg(RTC_ISTAT,0x8);
		return E_OK;
	}
    else if(  (IntStatus & 0x10) == 0x10 )	    //Alarm int service    
	{
		write_reg(RTC_ISTAT,0x10);
		return E_OK;
	}
    else if( (IntStatus & 0x20) == 0x020 )		//Alarm int service
	{		
		write_reg(RTC_ISTAT,0x20);
		return E_OK;
	}
	else
	{
		return E_HA;
	}
    
}



⌨️ 快捷键说明

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