📄 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 + -