1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/drivers/periph_common/init.c
Benjamin Valentin 310eb4970c cpu/sam0_common: GPIO: use tamper detection to wake from Deep Sleep
On samd5x only the RTC can wake the CPU from Deep Sleep (pm modes 0 & 1).
The external interrupt controller is disabled, but we can use the tamper
detection of the RTC.

If an gpio interrupt is configured on one of the five tamper detect pins,
those can be used to wake the CPU from Deep Sleep / Hibernate.
2020-09-17 18:46:25 +02:00

97 lines
2.0 KiB
C

/*
* Copyright (C) 2017 Freie Universität Berlin
* 2017 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_init
* @{
*
* @file
* @brief Common static peripheral driver initialization implementation
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
* @author Kaspar Schleiser <kaspar@schleiser.de>
*
* @}
*/
#define USB_H_USER_IS_RIOT_INTERNAL
#include "periph_cpu.h"
#ifdef MODULE_PERIPH_INIT
#ifdef MODULE_PERIPH_INIT_I2C
#include "periph/i2c.h"
#endif
#ifdef MODULE_PERIPH_INIT_SPI
#include "periph/spi.h"
#endif
#ifdef MODULE_PERIPH_INIT_RTC
#include "periph/rtc.h"
#endif
#ifdef MODULE_PERIPH_INIT_RTT
#include "periph/rtt.h"
#endif
#ifdef MODULE_PERIPH_INIT_HWRNG
#include "periph/hwrng.h"
#endif
#ifdef MODULE_PERIPH_INIT_USBDEV
#include "periph/usbdev.h"
#endif
#ifdef MODULE_PERIPH_INIT_WDT
#include "periph/wdt.h"
#endif
#endif /* MODULE_PERIPH_INIT */
void periph_init(void)
{
#ifdef MODULE_PERIPH_INIT
/* initialize configured I2C devices */
#ifdef MODULE_PERIPH_INIT_I2C
for (unsigned i = 0; i < I2C_NUMOF; i++) {
i2c_init(I2C_DEV(i));
}
#endif
/* initialize configured SPI devices */
#ifdef MODULE_PERIPH_INIT_SPI
for (unsigned i = 0; i < SPI_NUMOF; i++) {
spi_init(SPI_DEV(i));
}
#endif
/* Initialize RTT before RTC to allow for RTT based RTC implementations */
#ifdef MODULE_PERIPH_INIT_RTT
rtt_init();
#endif
/* Initialize RTC */
#ifdef MODULE_PERIPH_INIT_RTC
rtc_init();
#endif
/* Initialize Tamper Detection */
#ifdef MODULE_PERIPH_INIT_GPIO_TAMPER_WAKE
rtc_tamper_init();
#endif
#ifdef MODULE_PERIPH_INIT_HWRNG
hwrng_init();
#endif
#ifdef MODULE_PERIPH_INIT_USBDEV
usbdev_init_lowlevel();
#endif
#if defined(MODULE_PERIPH_INIT_WDT) && WDT_HAS_INIT
wdt_init();
#endif
#endif /* MODULE_PERIPH_INIT */
}