diff --git a/src/rtc.c b/src/rtc.c --- a/src/rtc.c +++ b/src/rtc.c @@ -16,7 +16,7 @@ static void Error_Handler(void) // Initialize RTC void rtc_init(void) { - __HAL_RCC_RTC_ENABLE(); + __HAL_RCC_RTC_ENABLE(); RTC_TimeTypeDef sTime; @@ -25,11 +25,12 @@ void rtc_init(void) hrtc.Instance = RTC; hrtc.Init.HourFormat = RTC_HOURFORMAT_24; - hrtc.Init.AsynchPrediv = 127; - hrtc.Init.SynchPrediv = 255; + hrtc.Init.AsynchPrediv = 124; + hrtc.Init.SynchPrediv = 322; // if this has enough bits should be 1.0018Hz based on 40kHz LSI hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; + if (HAL_RTC_Init(&hrtc) != HAL_OK) { Error_Handler(); @@ -55,6 +56,7 @@ void rtc_init(void) Error_Handler(); } + /**Enable the Alarm A */ sAlarm.AlarmTime.Hours = 0x0; @@ -63,7 +65,9 @@ void rtc_init(void) sAlarm.AlarmTime.SubSeconds = 0x0; sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET; - sAlarm.AlarmMask = RTC_ALARMMASK_NONE; + + // Alarm will trigger on the Xth second of every minute + sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY | RTC_ALARMMASK_HOURS | RTC_ALARMMASK_MINUTES; sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL; sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE; sAlarm.AlarmDateWeekDay = 0x1; @@ -73,4 +77,18 @@ void rtc_init(void) Error_Handler(); } + HAL_NVIC_SetPriority(RTC_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(RTC_IRQn); } + +void rtc_cal(void) +{ + // Do something with hrtc.Instance->CALR; // this has a plus and minus component, see refman +} + +RTC_HandleTypeDef* rtc_gethandle(void) +{ + return &hrtc; +} + +