Implement sleep modes
This commit is contained in:
parent
5c89df4324
commit
3e97d4fe7e
51
drv/pwr.c
Normal file
51
drv/pwr.c
Normal file
@ -0,0 +1,51 @@
|
||||
/** @file pwr.c
|
||||
* Module handling the power management's control
|
||||
*
|
||||
* The module provides functions to enter the different sleep states, control
|
||||
* and filter wakeup events (WKUP and RTC) and configure power voltage
|
||||
* detection
|
||||
*/
|
||||
|
||||
//--includes--------------------------------------------------------------------
|
||||
|
||||
#include "pwr.h"
|
||||
#include "pwr_regs.h"
|
||||
#include "scb.h"
|
||||
|
||||
|
||||
//--local definitions-----------------------------------------------------------
|
||||
|
||||
//--local variables-------------------------------------------------------------
|
||||
|
||||
static volatile struct PWR* regs = (struct PWR*)PWR_BASE_ADDRESS;
|
||||
|
||||
|
||||
//--public functions------------------------------------------------------------
|
||||
|
||||
void pwr_sleep(void)
|
||||
{
|
||||
scb_configure_deepsleep(false);
|
||||
__asm("wfi");
|
||||
}
|
||||
|
||||
void pwr_stop(enum PwrWakeupSpeed speed)
|
||||
{
|
||||
scb_configure_deepsleep(true);
|
||||
regs->CR.PDDS = 0;
|
||||
regs->CR.LPDS = speed;
|
||||
__asm("wfi");
|
||||
}
|
||||
|
||||
void pwr_standby(void)
|
||||
{
|
||||
scb_configure_deepsleep(true);
|
||||
regs->CR.PDDS = 1;
|
||||
__asm("wfi");
|
||||
}
|
||||
|
||||
|
||||
//--local functions-------------------------------------------------------------
|
||||
|
||||
//--ISRs------------------------------------------------------------------------
|
||||
|
||||
|
||||
51
drv/pwr.h
Normal file
51
drv/pwr.h
Normal file
@ -0,0 +1,51 @@
|
||||
/** @file pwr.h
|
||||
* Module handling the power management's control
|
||||
*
|
||||
* The module provides functions to enter the different sleep states, control
|
||||
* and filter wakeup events (WKUP and RTC) and configure power voltage
|
||||
* detection
|
||||
*/
|
||||
|
||||
#ifndef _PWR_H_
|
||||
#define _PWR_H_
|
||||
|
||||
//--includes--------------------------------------------------------------------
|
||||
|
||||
//--type definitions------------------------------------------------------------
|
||||
|
||||
enum PwrWakeupSpeed {
|
||||
PWR_WAKEUP_SPEED_FAST, //faster wakeup, higher consumption in stop mode
|
||||
PWR_WAKEUP_SPEED_SLOW, //slower wakeup, lower consumption in stop mode
|
||||
};
|
||||
|
||||
enum PwrPvdThreshold {
|
||||
PWR_PVD_THRESHOLD_2_2V,
|
||||
PWR_PVD_THRESHOLD_2_3V,
|
||||
PWR_PVD_THRESHOLD_2_4V,
|
||||
PWR_PVD_THRESHOLD_2_5V,
|
||||
PWR_PVD_THRESHOLD_2_6V,
|
||||
PWR_PVD_THRESHOLD_2_7V,
|
||||
PWR_PVD_THRESHOLD_2_8V,
|
||||
PWR_PVD_THRESHOLD_2_9V,
|
||||
|
||||
};
|
||||
|
||||
typedef void (*PwrPvdCallback)(void);
|
||||
|
||||
|
||||
//--functions-------------------------------------------------------------------
|
||||
|
||||
void pwr_sleep(void);
|
||||
void pwr_stop(enum PwrWakeupSpeed speed);
|
||||
void pwr_standby(void);
|
||||
|
||||
bool pwr_wakeup_event(void);
|
||||
bool pwr_standby_exit(void);
|
||||
|
||||
void pwr_configure_bkp_write(bool enable);
|
||||
void pwr_configure_wakeup_pin(bool enable);
|
||||
void pwr_configure_pvd(enum PwrPvdThreshold treshold);
|
||||
|
||||
|
||||
#endif //_PWR_H_
|
||||
|
||||
Loading…
Reference in New Issue
Block a user