const DWORD RTCC_SumMonths[ 13 ] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; //Normal Year
REAL_TIME API_GetRTCC(void)
{
REAL_TIME mRtccSw;
#if !defined(RTCC_SW_DISABLE)
RTCC_STRUCT_TIME StrucTime;
RTCC_STRUCT_DATE StrucDate;
RTCC_GetTime( &StrucTime );
mRtccSw.Date = RTCC_TStampDateToSDate( StrucTime.Days );
#else
RTCSYNC = 1;
RTCPTR0 = 1;
RTCPTR1 = 1;
mRtccSw.Date.Year = RTCVALL; // read Year
RTCPTR0 = 0;
RTCPTR1 = 1;
mRtccSw.Date.Day = RTCVALL; // read Day
mRtccSw.Date.Month = RTCVALH; // read Month & decrement pointer
RTCPTR0 = 1;
RTCPTR1 = 0;
mRtccSw.Time.Hour = RTCVALL; // read Hours
mRtccSw.Date.DayOfWeek = RTCVALH; // read Weekday & decrement pointer
RTCPTR0 = 0;
RTCPTR1 = 0;
mRtccSw.Time.Second = RTCVALL; // read Seconds
mRtccSw.Time.Minute = RTCVALH; // read Minutes (pointer already at 0)
mRtccSw.Time.Hour = (((mRtccSw.Time.Hour & 0x30) >> 4) * 10) + (mRtccSw.Time.Hour & 0x0F);
mRtccSw.Time.Minute = (((mRtccSw.Time.Minute & 0x70) >> 4) * 10) + (mRtccSw.Time.Minute & 0x0F);
mRtccSw.Time.Second = (((mRtccSw.Time.Second & 0x70) >> 4) * 10) + (mRtccSw.Time.Second & 0x0F);
mRtccSw.Date.Year = (((mRtccSw.Date.Year & 0xF0) >> 4) * 10) + (mRtccSw.Date.Year & 0x0F);
mRtccSw.Date.Month = (((mRtccSw.Date.Month & 0x10) >> 4) * 10) + (mRtccSw.Date.Month & 0x0F);
mRtccSw.Date.Day = (((mRtccSw.Date.Day & 0x30) >> 4) * 10) + (mRtccSw.Date.Day & 0x0F);
mRtccSw.Time.Days = ((DWORD)mRtccSw.Date.Year * 365UL) + (DWORD)(mRtccSw.Date.Year / 4) + RTCC_SumMonths[ mRtccSw.Date.Month - 1 ] + (DWORD)mRtccSw.Date.Day;
if( (mRtccSw.Date.Month < 3) && !(mRtccSw.Date.Year % 4) )
mRtccSw.Time.Days--;
if(RTCCFG&0x04) mRtccSw.Time.Thousandth = 500;
else mRtccSw.Time.Thousandth = 0;
#endif
return mRtccSw;
}