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

📄 rtc.c

📁 s3c44b0 rtc示例代码,基于ADS工程环境
💻 C
字号:
#include "../inc/44b0x.h"
#include "../inc/console.h"
#include "../inc/rtc.h"

/*********************************************************/
#define RTC_YEAR0		(0x03)		//年
#define RTC_MONTH0		(0x02)		//月
#define RTC_DAY0		(0x0e)		//日
#define RTC_DATE0		(0x06)		//星期SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
#define RTC_HOUR0		(0x08)		//小时
#define RTC_MIN0		(0x08)		//分
#define RTC_SEC0		(0x08)		//秒

#define RTC_YEAR1		(0x03)		//年
#define RTC_MONTH1		(0x03)		//月
#define RTC_DAY1		(0x0e)		//日
#define RTC_DATE1		(0x06)		//星期-SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7
#define RTC_HOUR1		(0x08)		//小时
#define RTC_MIN1		(0x08)		//分
#define RTC_SEC1		(0x08)		//秒

#define	RTC_RW_EN()	rRTCCON = 1		//|= 1
#define	RTC_RW_DS()	rRTCCON &= 0xfe

void rtcSetDate (PTIME pTime)
{
  RTC_RW_EN	();				//RTC读写使能,选择BCD时钟、计数器,无复位,1/32768		
  rBCDYEAR = pTime->wYear;;		//年
  rBCDMON  = pTime->byMonth;		//月
  rBCDDAY  = pTime->byDay;		//日	
  RTC_RW_DS ();
}

void rtcSetWeek (PTIME pTime)
{
	RTC_RW_EN();
	rBCDDATE = pTime->byWeekday;
	RTC_RW_DS();
}

void rtcSetTime (PTIME pTime)
{
  RTC_RW_EN();				//RTC读写使能,选择BCD时钟、计数器,无复位,1/32768		
  rBCDHOUR = pTime->byHour;		//小时
  rBCDMIN  = pTime->byMin;		//分
  rBCDSEC  = pTime->bySec;		//秒
  RTC_RW_DS();
}


void rtcInit (PTIME pTime)
{
  RTC_RW_EN();				//RTC读写使能,选择BCD时钟、计数器,无复位,1/32768

#if 0
  rBCDYEAR  = pTime->wYear - 2000;		//年
  rBCDMON   = ((pTime->byMonth / 10)<<4) | (pTime->byMonth % 10);		//月
  rBCDDAY   = pTime->byDay;		//日
  rBCDDATE  = pTime->byWeekday;	//星期
  rBCDHOUR  = pTime->byHour;		//小时
  rBCDMIN   = pTime->byMin;		//分
  rBCDSEC   = pTime->bySec;		//秒
#endif 

  rBCDYEAR  = pTime->wYear - 2000;		//年
  rBCDMON   = ((pTime->byMonth / 10)<<4) | (pTime->byMonth % 10);		//月
  rBCDDAY   = ((pTime->byDay / 10) << 4) | (pTime->byDay % 10);		   //日
  rBCDDATE  = ((pTime->byWeekday / 10) << 4) | (pTime->byWeekday % 10);	//星期
  rBCDHOUR = ((pTime->byHour / 10) << 4) | (pTime->byHour % 10);		//小时
  rBCDMIN   = ((pTime->byMin / 10 ) << 4) |(pTime->byMin % 10);		//分
  rBCDSEC   = ((pTime->bySec / 10) << 4) | (pTime->bySec % 10);		//秒


  rTICNT = 0x80+127;		//enable tick timer interrupt, set tick timer interrupt time = (127+1)/128 second	
  RTC_RW_DS();	
}

void rtcAlarm (PTIME pTime)  
{
  rALMYEAR = pTime->wYear;		//年
  rALMMON  = pTime->byMonth;		//月
  rALMDAY  = pTime->byDay;		//日
  rALMHOUR = pTime->byHour;		//小时
  rALMMIN  = pTime->byMin;		//分
  rALMSEC  = pTime->bySec; 		//秒

  rRTCALM = 0x7f;		//全局警报使能控制,年、月、日、星期、时分秒警报使能控制
}

void rtcGetTime (PTIME pTime)
{
  U8 byVal;

  RTC_RW_EN();		//RTC读写使能
  pTime->wYear = 2000 + rBCDYEAR;
  pTime->byWeekday = rBCDDATE;

  byVal = rBCDMON;	
  pTime->byMonth = (byVal>>4)*10 + (byVal&0xf);	//BCD码转十进制

  byVal = rBCDDAY;	
  pTime->byDay = (byVal>>4)*10 + (byVal&0xf);

  byVal = rBCDHOUR;	
  pTime->byHour = (byVal>>4)*10 + (byVal&0xf);

  byVal = rBCDMIN;	
  pTime->byMin = (byVal>>4)*10 + (byVal&0xf);

  byVal = rBCDSEC;			
  pTime->bySec = (byVal>>4)*10 + (byVal&0xf);

  RTC_RW_DS ();		//RTC读写禁止(降低功率消耗),选择BCD时钟、计数器,无复位,1/32768    
}

void rtcReset ()
{
  RTC_RW_EN();		//RTC读写使能
  
  RTC_RW_DS ();		//RTC读写禁止(降低功率消耗),选择BCD时钟、计数器,无复位,1/32768    
}

void rtcShowTime ()
{
  TIME time;
  rtcGetTime (&time);
  printf ("The current time is :\t%04d-%02d-%02d, %02d:%02d:%02d.\n",
            time.wYear, time.byMonth, time.byDay, time.byHour, time.byMin, time.bySec);
}
 

⌨️ 快捷键说明

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