_mqx_int _rtc_set_alarm_mqxd (DATE_STRUCT_PTR time) { RTC_TIME_STRUCT rtc_alarm; /* convert MQX_DATE to seconds */ rtc_alarm.seconds = _date_to_sec( time ); _rtc_set_alarm( &rtc_alarm ); return MQX_OK; }
void main_task ( uint32_t initial_data ) { /* Body */ uint32_t rtc_time; uint32_t rtc_time_default; TIME_STRUCT mqx_time; DATE_STRUCT date_time; if (_lwevent_create(&lwevent,0) != MQX_OK) { printf("\nMake event failed"); _task_block(); } printf ("\f RTC Demo :\n\n"); _rtc_get_time(&rtc_time); print_rtc_time(rtc_time); /* initialize time */ date_time.YEAR = RTC_TIME_INIT_TM_YEAR; date_time.MONTH = RTC_TIME_INIT_TM_MON; date_time.DAY = RTC_TIME_INIT_TM_MDAY; date_time.HOUR = RTC_TIME_INIT_TM_HOUR; date_time.MINUTE = RTC_TIME_INIT_TM_MIN; date_time.SECOND = RTC_TIME_INIT_TM_SEC; date_time.MILLISEC = 0; /* Convert date time to time struct */ if ( _time_from_date(&date_time, &mqx_time) == FALSE) { printf("\n Cannot convert date_time "); _task_block(); } /* Convert rtc time to TIME_STRUCT */ rtc_time = mqx_time.SECONDS; printf(" Set RTC time is: %s %s %3d %.2d:%.2d:%.2d %d\n", _days_abbrev[date_time.WDAY], _months_abbrev[date_time.MONTH - 1], date_time.DAY, date_time.HOUR, date_time.MINUTE, date_time.SECOND, date_time.YEAR); /* Set MQX time*/ _time_set(&mqx_time); /* Set RTC time*/ _rtc_set_time(rtc_time); printf("\n MQX time: %d SECONDS, %d MILISECOND ", mqx_time.SECONDS, mqx_time.MILLISECONDS); /* * set-up alarm */ /* install callback */ _rtc_callback_reg((INT_ISR_FPTR)rtc_callback, (void*)NULL); /* Set alarm to maximum time to avoid unexpected interrupt in next running */ _rtc_set_alarm(MAXIMUM_SECONDS_IN_TIME,(uint32_t)0); _lwevent_clear(&lwevent,LWE_ALARM); /* Get current time */ _rtc_get_time(&rtc_time); /* setup alarm in next 10 seconds & period 4 seconds*/ rtc_time += (uint32_t)ALARM_NEXT_TIME; /* Alarm occurs in next 10 seconds */ printf("\n Setup to occur alarm in next %d seconds & with period: %d seconds",ALARM_NEXT_TIME, ALARM_PERIOD); _rtc_set_alarm(rtc_time,(uint32_t)ALARM_PERIOD); printf("\n Wait %d seconds ....",ALARM_NEXT_TIME); /* Wait to clear LWE_ALARM event */ _lwevent_wait_ticks(&lwevent,LWE_ALARM,FALSE,0); _lwevent_clear(&lwevent,LWE_ALARM); printf ("\nALARM! ALARM! ALARM!\n"); /* Print current time */ _rtc_get_time(&rtc_time); print_rtc_time(rtc_time); printf("\n Wait next alarm in %d seconds....",ALARM_PERIOD); _lwevent_wait_ticks(&lwevent,LWE_ALARM,FALSE,0); _lwevent_clear(&lwevent,LWE_ALARM); printf ("\nALARM! ALARM! ALARM!\n"); _rtc_get_time(&rtc_time); print_rtc_time(rtc_time); printf ("\nClearing RTC:\n"); _rtc_set_time(0); _rtc_get_time(&rtc_time_default); print_rtc_time(rtc_time_default); /* Wait 2 seconds after resynchronize rtc time with mqx time*/ do{ _rtc_get_time(&rtc_time); } while ((rtc_time - rtc_time_default) < 2); /* Get current time & display on terminal */ _rtc_get_time(&rtc_time); print_rtc_time(rtc_time); printf ("Synchronize RTC to MQX time again:\n"); _time_get(&mqx_time); rtc_time = mqx_time.SECONDS; _rtc_set_time(rtc_time); _rtc_get_time(&rtc_time); print_rtc_time(rtc_time); #if PSP_HAS_IRTC == 1 irtc_test(); #endif /* PSP_HAS_IRTC == 1 */ printf ("Finish, press/hold reset to repeat.\n"); _task_block() ; } /* Endbody */