/***************************************************************************** ** Function name: RTCInit ** ** Descriptions: Initialize RTC timer ** ** parameters: None ** Returned value: None ** *****************************************************************************/ void RTCInit( void ) { g_uiDateTime_reload = 0; /* Enable CLOCK into RTC */ SC->PCONP |= (1 << 9); /* If RTC is stopped, clear STOP bit. */ if ( RTC->PWRCTRL & (0x1<<4) ) { RTC->PWRCTRL |= (0x1<<4); } /*--- Initialize registers ---*/ RTC->AMR = 0; RTC->CIIR = 0; RTC->CCR = 0; //NVIC_EnableIRQ(RTC_IRQn); RTC->CIIR = IMSEC; RTCStart(); return; }
/***************************************************************************** ** Main Function main() ******************************************************************************/ int main (void) { /* SystemClockUpdate() updates the SystemFrequency variable */ SystemClockUpdate(); /* Initialize RTC module */ RTCInit(); local_time.RTC_Sec = 0; local_time.RTC_Min = 0; local_time.RTC_Hour = 0; local_time.RTC_Mday = 8; local_time.RTC_Wday = 3; local_time.RTC_Yday = 12; /* current date 07/12/2006 */ local_time.RTC_Mon = 7; local_time.RTC_Year = 2006; RTCSetTime( local_time ); /* Set local time */ alarm_time.RTC_Sec = 0; alarm_time.RTC_Min = 0; alarm_time.RTC_Hour = 0; alarm_time.RTC_Mday = 1; alarm_time.RTC_Wday = 0; alarm_time.RTC_Yday = 1; /* alarm date 01/01/2007 */ alarm_time.RTC_Mon = 1; alarm_time.RTC_Year = 2007; RTCSetAlarm( alarm_time ); /* set alarm time */ NVIC_EnableIRQ(RTC_IRQn); /* mask off alarm mask, turn on IMYEAR in the counter increment interrupt register */ RTCSetAlarmMask(AMRSEC|AMRMIN|AMRHOUR|AMRDOM|AMRDOW|AMRDOY|AMRMON|AMRYEAR); LPC_RTC->CIIR = IMMIN | IMYEAR; /* 2007/01/01/00:00:00 is the alarm on */ RTCStart(); while (1) { /* Loop forever */ current_time = RTCGetTime(); if ( alarm_on != 0 ) { alarm_on = 0; /* Get current time when alarm is on */ current_time = RTCGetTime(); } } }
/***************************************************************************** ** Function name: RTCSetTimeDefault ** ** Descriptions: Setup RTC timer default ** ** parameters: None ** Returned value: None ** *****************************************************************************/ void RTCSetTimeDefault(void) { RTCStop(); g_stTemp_time.RTC_Sec = 0; g_stTemp_time.RTC_Min = 0; g_stTemp_time.RTC_Hour = 0; g_stTemp_time.RTC_Mday = 25; //g_stTemp_time.RTC_Wday = 4; //g_stTemp_time.RTC_Yday = 0; /* Default date 2011/08/25 */ g_stTemp_time.RTC_Mon = 8; g_stTemp_time.RTC_Year = 2011; RTCSetTime( g_stTemp_time ); /* Set local time */ RTCStart(); return; }
//========================================================================= // Real-Time Clock //------------------------------------------------------------------------- __myevic__ void InitRTC() { if ( !gFlags.noclock ) { gFlags.has_x32 = !dfStatus.x32off; RTCStart( 0 ); } if ( gFlags.has_x32 ) { // Disable Light Sleep mode. dfStatus.lsloff = 1; UpdateDFTimer = 1; } else if ( !dfStatus.x32off ) { // Disable X32 dfStatus.x32off = 1; // Enable Light Sleep mode. dfStatus.lsloff = 0; UpdateDFTimer = 1; } gFlags.rtcinit = 1; time_t vvbase; vvbase = RTCReadRegister( RTCSPARE_VV_BASE ); if ( ( vvbase == 0 ) || ( vvbase % 86400 ) ) { vvbase = RTCGetEpoch( 0 ); vvbase -= vvbase % 86400; RTCWriteRegister( RTCSPARE_VV_BASE, vvbase ); RTCWriteRegister( RTCSPARE_VV_MJOULES, 0 ); } else { MilliJoules = RTCReadRegister( RTCSPARE_VV_MJOULES ); } }
//***************************************************************************** // //! \brief xrtc004 test for rtc interrupt. //! //! \return None. // //***************************************************************************** static void xrtc004Execute_Int() { RTCTimeInit(); tTime2.ulSecond = 40; tTime2.ulMinute = 20; tTime2.ulHour = 17; tTime2.ulMDay = 11; tTime2.ulMonth = 8; tTime2.ulYear = 2011; tTime2.ulWDay = 4; tTime2.ulFormat = RTC_TIME_24H; // // Writes current time to corresponding register. // RTCTimeWrite(&tTime2, ulTimeAlarm[0]); // // Alarm interrupt after 10 seconds. // tTime2.ulSecond +=10; // // Writes current time to corresponding register. // RTCTimeWrite(&tTime2, ulTimeAlarm[1]); for(ulj = 0; ulj < 0xffff; ulj ++); xRTCTimeRead(&tTime1, ulTimeAlarm[1]); TestAssert(2011 == tTime1.ulYear && 8 == tTime1.ulMonth && 11 == tTime1.ulMDay && RTC_TIME_24H == tTime1.ulFormat && 17 == tTime1.ulHour && 20 == tTime1.ulMinute && 50 == tTime1.ulSecond, "xrtc API \" RTCTimeWrite()\" or \"xRTCTimeRead()\" error!"); // // Enables alarm interrupt. // RTCIntCallbackInit(RTC_INT_ALARM, xRTCACallback); RTCIntEnable(RTC_INT_ALARM); xIntEnable(INT_RTCA); xIntMasterEnable(); RTCStart(); TestAssertQBreak("a","Alarm interrupt failed!", 0xffffffff); for(ulj = 0; ulj < 0xffff; ulj ++); TestAssert(2011 == tTime1.ulYear && 8 == tTime1.ulMonth && 11 == tTime1.ulMDay && RTC_TIME_24H == tTime1.ulFormat && 17 == tTime1.ulHour && 20 == tTime1.ulMinute && 50 == tTime1.ulSecond , "xrtc API \" RTCTimeWrite()\" or \"xRTCTimeRead()\" error!"); // // Disables alarm interrupt. // RTCIntDisable(RTC_INT_ALARM); // // Enables seconds interrupt. // RTCIntCallbackInit(RTC_INT_TIME_TICK, xRTCSCallback); RTCIntEnable(RTC_INT_TIME_TICK); xIntEnable(INT_RTCS); RTCStart(); TestAssertQBreak("b","Tick interrupt failed!",0xffffffff); // // Disables seconds interrupt. // RTCIntDisable(RTC_INT_TIME_TICK); }
/***************************************************************************** ** Main Function rtc_main() ******************************************************************************/ void rtc_main (void) { /* SystemClockUpdate() updates the SystemFrequency variable */ SystemCoreClockUpdate(); /* Initialize RTC module */ RTCInit(); GUIDEMO_ShowIntro("Real Time Clock", "Showing" "\nReal Time Clock" "\nBy Siddharth Kaul"); GUI_Clear(); GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_LIGHTRED); GUI_Clear(); GUI_SetFont(&GUI_Font24B_1); local_time.RTC_Sec = 0; local_time.RTC_Min = 0; local_time.RTC_Hour = 0; local_time.RTC_Mday = 8; local_time.RTC_Wday = 3; local_time.RTC_Yday = 12; /* current date 07/12/2006 */ local_time.RTC_Mon = 7; local_time.RTC_Year = 2006; RTCSetTime( local_time ); /* Set local time */ alarm_time.RTC_Sec = 0; alarm_time.RTC_Min = 0; alarm_time.RTC_Hour = 0; alarm_time.RTC_Mday = 1; alarm_time.RTC_Wday = 0; alarm_time.RTC_Yday = 1; /* alarm date 01/01/2007 */ alarm_time.RTC_Mon = 1; alarm_time.RTC_Year = 2007; RTCSetAlarm( alarm_time ); /* set alarm time */ NVIC_EnableIRQ(RTC_IRQn); /* mask off alarm mask, turn on IMYEAR in the counter increment interrupt register */ RTCSetAlarmMask(AMRSEC|AMRMIN|AMRHOUR|AMRDOM|AMRDOW|AMRDOY|AMRMON|AMRYEAR); LPC_RTC->CIIR = IMMIN | IMYEAR; /* 2007/01/01/00:00:00 is the alarm on */ RTCStart(); while (1) { /* Loop forever */ current_time = RTCGetTime(); { char rtc_sec,rtc_min,rtc_hour; rtc_sec = current_time.RTC_Sec; rtc_min = current_time.RTC_Min; rtc_hour = current_time.RTC_Hour; GUI_DispCharAt(rtc_sec, 10, 10); GUI_DispCharAt(rtc_min, 14, 20); GUI_DispCharAt(rtc_hour, 18, 30); } } }