mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-15 09:33:50 +01:00
cpu/stm32: Consider VBAT on CPU init
This commit is contained in:
parent
9163d78910
commit
fa52f1e986
@ -38,6 +38,7 @@
|
|||||||
#include "periph_cpu.h"
|
#include "periph_cpu.h"
|
||||||
#include "periph/init.h"
|
#include "periph/init.h"
|
||||||
#include "periph/gpio.h"
|
#include "periph/gpio.h"
|
||||||
|
#include "periph/vbat.h"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "pm_layered.h"
|
#include "pm_layered.h"
|
||||||
|
|
||||||
@ -395,14 +396,29 @@ void backup_ram_init(void)
|
|||||||
#define BACKUP_RAM_MAGIC {'R', 'I', 'O', 'T'}
|
#define BACKUP_RAM_MAGIC {'R', 'I', 'O', 'T'}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool cpu_woke_from_backup(void)
|
static inline bool _backup_battery_connected(void) {
|
||||||
{
|
#if IS_USED(MODULE_PERIPH_VBAT)
|
||||||
|
vbat_init(); /* early use of VBAT requires init() */
|
||||||
|
return !vbat_is_empty();
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cpu_woke_from_backup(void) {
|
||||||
#if IS_ACTIVE(CPU_HAS_BACKUP_RAM)
|
#if IS_ACTIVE(CPU_HAS_BACKUP_RAM)
|
||||||
static const char _signature[] BACKUP_RAM_DATA = BACKUP_RAM_MAGIC;
|
static const char _signature[] BACKUP_RAM_DATA = BACKUP_RAM_MAGIC;
|
||||||
/* switch off regulator to save power */
|
if (_backup_battery_connected()) {
|
||||||
|
/* in case the board has a backup battery the regulator must be on
|
||||||
|
to mitigate (unexpected) outage of VDD, so RTC register and
|
||||||
|
backup domain register contents are not lost */
|
||||||
|
pm_backup_regulator_on();
|
||||||
|
}
|
||||||
|
else {
|
||||||
#ifndef RIOTBOOT
|
#ifndef RIOTBOOT
|
||||||
pm_backup_regulator_off();
|
/* switch off regulator to save power */
|
||||||
|
pm_backup_regulator_off();
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
for (unsigned i = 0; i < sizeof(_signature); i++) {
|
for (unsigned i = 0; i < sizeof(_signature); i++) {
|
||||||
if (_signature[i] != ((char[])BACKUP_RAM_MAGIC)[i]) {
|
if (_signature[i] != ((char[])BACKUP_RAM_MAGIC)[i]) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -50,6 +50,9 @@
|
|||||||
#ifdef MODULE_PERIPH_INIT_PTP
|
#ifdef MODULE_PERIPH_INIT_PTP
|
||||||
#include "periph/ptp.h"
|
#include "periph/ptp.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef MODULE_PERIPH_INIT_VBAT
|
||||||
|
#include "periph/vbat.h"
|
||||||
|
#endif
|
||||||
#endif /* MODULE_PERIPH_INIT */
|
#endif /* MODULE_PERIPH_INIT */
|
||||||
|
|
||||||
void periph_init(void)
|
void periph_init(void)
|
||||||
@ -105,5 +108,9 @@ void periph_init(void)
|
|||||||
ptp_init();
|
ptp_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(MODULE_PERIPH_INIT_VBAT)
|
||||||
|
vbat_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* MODULE_PERIPH_INIT */
|
#endif /* MODULE_PERIPH_INIT */
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user