/*! * @brief calculates the wake up time between wake up and mcu start * @note resulotion in RTC_ALARM_TIME_BASE in timer ticks * @param none * @retval none */ void HW_RTC_setMcuWakeUpTime( void ) { RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; TimerTime_t now, hit; int16_t McuWakeUpTime; if ((McuWakeUpTimeInitialized == false) && ( HAL_NVIC_GetPendingIRQ( RTC_Alarm_IRQn ) == 1)) { /* warning: works ok if now is below 30 days it is ok since it's done once at first alarm wake-up*/ McuWakeUpTimeInitialized = true; now = HW_RTC_GetCalendarValue( &RTC_DateStruct, &RTC_TimeStruct ); DBG_GPIO_SET(GPIOB, GPIO_PIN_13); DBG_GPIO_RST(GPIOB, GPIO_PIN_13); HAL_RTC_GetAlarm(&RtcHandle, &RTC_AlarmStructure, RTC_ALARM_A, RTC_FORMAT_BIN ); hit = RTC_AlarmStructure.AlarmTime.Seconds+ 60*(RTC_AlarmStructure.AlarmTime.Minutes+ 60*(RTC_AlarmStructure.AlarmTime.Hours+ 24*(RTC_AlarmStructure.AlarmDateWeekDay))); hit = ( hit << N_PREDIV_S ) + (PREDIV_S - RTC_AlarmStructure.AlarmTime.SubSeconds); McuWakeUpTime = (int16_t) ((now-hit)); McuWakeUpTimeCal += McuWakeUpTime; DBG_PRINTF("Cal=%d, %d\r\n",McuWakeUpTimeCal, McuWakeUpTime); } }
static void RtcComputeWakeUpTime( void ) { uint32_t start = 0; uint32_t stop = 0; RTC_AlarmTypeDef alarmRtc; RtcCalendar_t now; if( WakeUpTimeInitialized == false ) { now = RtcGetCalendar( ); HAL_RTC_GetAlarm( &RtcHandle, &alarmRtc, RTC_ALARM_A, RTC_FORMAT_BIN ); start = PREDIV_S - alarmRtc.AlarmTime.SubSeconds; stop = PREDIV_S - now.CalendarTime.SubSeconds; McuWakeUpTime = RtcConvertTickToMs( stop - start ); WakeUpTimeInitialized = true; } }
static void RtcComputeWakeUpTime( void ) { uint32_t start = 0; uint32_t stop = 0; RTC_AlarmTypeDef alarmRtc; RtcCalendar_t now; if( WakeUpTimeInitialized == false ) { now = RtcGetCalendar( ); HAL_RTC_GetAlarm( &RtcHandle, &alarmRtc, RTC_ALARM_A, RTC_FORMAT_BIN ); start = alarmRtc.AlarmTime.Seconds + ( SecondsInMinute * alarmRtc.AlarmTime.Minutes ) + ( SecondsInHour * alarmRtc.AlarmTime.Hours ); stop = now.CalendarTime.Seconds + ( SecondsInMinute * now.CalendarTime.Minutes ) + ( SecondsInHour * now.CalendarTime.Hours ); McuWakeUpTime = ceil ( ( stop - start ) * RTC_ALARM_TICK_DURATION ); WakeUpTimeInitialized = true; } }