Level measurement using range finder and lora technology
Dependencies: Cayenne-LPP SDBlockDevice
inc/standby.h
- Committer:
- wamae
- Date:
- 2019-06-26
- Revision:
- 0:f930f0440fd5
File content as of revision 0:f930f0440fd5:
#ifndef _DSA_STANDBY_H_ #define _DSA_STANDBY_H_ #include "mbed.h" #include "rtc_api_hal.h" enum WakeupType { WAKEUP_RESET, WAKEUP_TIMER, WAKEUP_PIN }; static RTC_HandleTypeDef RtcHandle; void rtc_set_wake_up_timer_s(uint32_t delta) { uint32_t clock = RTC_WAKEUPCLOCK_CK_SPRE_16BITS; // HAL_RTCEx_SetWakeUpTimer_IT will assert that delta is 0xFFFF at max if (delta > 0xFFFF) { delta -= 0x10000; clock = RTC_WAKEUPCLOCK_CK_SPRE_17BITS; } RtcHandle.Instance = RTC; HAL_StatusTypeDef status = HAL_RTCEx_SetWakeUpTimer_IT(&RtcHandle, delta, clock); if (status != HAL_OK) { printf("Set wake up timer failed: %d\n", status); NVIC_SystemReset(); } } WakeupType get_wakeup_type() { if(READ_BIT(RTC->ISR, RTC_ISR_WUTF)) return WAKEUP_TIMER; // this is set by timer too, but that's checked already // above. if(READ_BIT(PWR->CSR, PWR_CSR_WUF)) return WAKEUP_PIN; return WAKEUP_RESET; } void standby(int seconds) { printf("Going to sleep!\n"); core_util_critical_section_enter(); // Clear wakeup flag, just in case. SET_BIT(PWR->CR, PWR_CR_CWUF); // Enable wakeup timer. rtc_set_wake_up_timer_s(seconds); // Enable debug interface working in standby. Causes power consumption to increase drastically while in standby. //HAL_DBGMCU_EnableDBGStandbyMode(); HAL_PWR_EnterSTANDBYMode(); // this should not happen... rtc_deactivate_wake_up_timer(); core_util_critical_section_exit(); // something went wrong, let's reset NVIC_SystemReset(); } #endif // _DSA_STANDBY_H_