www.pudn.com > arm_uDisk.rar > RTC.c


 
#include "mx_types.h" 
#include "2410addr.h" 
#include "2410lib.h" 
 
 
#include "rtc.h" 
 
//#define _XTAL_ 
 
u_8 BCD2DEC(u_8 BCDnum) 
{ 
	return ((((BCDnum>>4)&0x0f)*10)+(BCDnum&0x0f)); 
} 
 
u_8 DEC2BCD(u_8 DECnum) 
{ 
	return ((((DECnum/10)&0x0f)<<4)|((DECnum%10)&0x0f)); 
} 
 
void RTC_Reset(void) 
{ 
	rRTCCON = CLKRST |RTCEN; 
	Delay(20); 
	rRTCCON = RTCEN; 
	Delay(20); 
	 
#ifdef _XTAL_ 
	rRTCCON |= CLKSEL; 
#endif //_XTAL_ 
} 
 
 
void RTC_Start(void) 
{ 
	rRTCRST = 0x08; 	// 
	 
	rTICNT = 0xFF;	//Tick time interrupt enable, and tick counter vlaue is 127 
 
	rBCDSEC = 0; 
	rBCDMIN = 0; 
	rBCDHOUR = 0; 
	rBCDDATE = 1; 
	rBCDMON = 2; 
	rBCDYEAR = 0; 
} 
 
 
void RTC_GetTime(RTC_Time *prTime) 
{ 
	prTime->second =BCD2DEC(rBCDSEC); 
	prTime->minute =BCD2DEC(rBCDMIN); 
	prTime->hour =BCD2DEC(rBCDHOUR); 
	prTime->date =BCD2DEC(rBCDDATE); 
	prTime->month =BCD2DEC(rBCDMON); 
	prTime->year =BCD2DEC(rBCDYEAR) + 2007; 
} 
 
void RTC_AlarmEnable(u_8 Almen, RTC_Time * prTime) 
{ 
	rALMYEAR = DEC2BCD(prTime->year); 
	rALMMON= DEC2BCD(prTime->month); 
	rALMDAY= DEC2BCD(prTime->date); 
	rALMHOUR= DEC2BCD(prTime->hour); 
	rALMMIN= DEC2BCD(prTime->minute); 
	rALMSEC= DEC2BCD(prTime->second); 
	 
	rRTCALM = Almen; // alarm interrupt or wake_up from power down mode. 
}