Browse Source

drivers: periph: pm: introduce new power management API

pr/spi.typo
Kaspar Schleiser 6 years ago
parent
commit
6150e2753a
  1. 3
      core/kernel_init.c
  2. 58
      drivers/include/periph/pm.h
  3. 33
      drivers/periph_common/pm.c

3
core/kernel_init.c

@ -28,6 +28,8 @@
#include "irq.h"
#include "log.h"
#include "periph/pm.h"
#ifdef MODULE_SCHEDSTATISTICS
#include "sched.h"
#endif
@ -64,6 +66,7 @@ static void *idle_thread(void *arg)
(void) arg;
while (1) {
pm_set_lowest();
}
return NULL;

58
drivers/include/periph/pm.h

@ -0,0 +1,58 @@
/*
* Copyright (C) 2016 Kaspar Schleiser <kaspar@schleiser.de>
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup drivers_periph_pm Power Management
* @ingroup drivers_periph
* @brief The kernels power management interface
* @{
*
* The following functions *must* be available for every platform:
*
* pm_reboot()
* pm_off()
*
* @file
* @brief Power management interface
*
* @author Kaspar Schleiser <kaspar@schleiser.de>
*/
#ifndef PM_H_
#define PM_H_
#include "assert.h"
#include "periph_cpu.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Reboot MCU
*/
void pm_reboot(void);
/**
* @brief Turn off MCU completely
*/
void pm_off(void);
/**
* @brief Switches the MCU to the lowest possible power mode
*
* This function will be called by the idle thread.
*/
void pm_set_lowest(void);
#ifdef __cplusplus
}
#endif
#endif /* __PM_H_ */
/** @} */

33
drivers/periph_common/pm.c

@ -0,0 +1,33 @@
/*
* Copyright (C) 2016 Kaspar Schleiser <kaspar@schleiser.de>
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup drivers_periph_pm
* @{
*
* @file
* @brief Platform-independent power management fallback code
*
* @author Kaspar Schleiser <kaspar@schleiser.de>
*
* @}
*/
#include "irq.h"
#include "periph/pm.h"
#define ENABLE_DEBUG (0)
#include "debug.h"
void __attribute__((weak)) pm_set_lowest(void) {}
void __attribute__((weak)) pm_off(void)
{
irq_disable();
while(1) {};
}
Loading…
Cancel
Save