/* mbed Microcontroller Library * Copyright (c) 2006-2013 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef MBED_SLEEP_EX_API_H #define MBED_SLEEP_EX_API_H #include "device.h" #if DEVICE_SLEEP #ifdef __cplusplus extern "C" { #endif /* Sleep Eake Up event, the User application also need to config the peripheral to trigger wake up event */ #define SLEEP_WAKEUP_BY_STIMER (SLP_STIMER) // wake up by system timer #define SLEEP_WAKEUP_BY_GTIMER (SLP_GTIMER) // wake up by General purpose timer timeout #define SLEEP_WAKEUP_BY_GPIO_INT (SLP_GPIO) // wake up by GPIO Port A[7:0] Interrupt #define SLEEP_WAKEUP_BY_WLAN (SLP_WL) // wake up by WLan event #define SLEEP_WAKEUP_BY_NFC (SLP_NFC) // wake up by NFC event #define SLEEP_WAKEUP_BY_SDIO (SLP_SDIO) // wake up by SDIO event #define SLEEP_WAKEUP_BY_USB (SLP_USB) // wake up by USB event // Deep Standby Wakeup event #define STANDBY_WAKEUP_BY_STIMER (BIT0) // wake up by system timer #define STANDBY_WAKEUP_BY_NFC (BIT1) // wake up by NFC event //#define SLEEP_WAKEUP_BY_DS_TIMER (BIT2) // The timer to wakeup from Deep Sleep timer // Do not modify these definition, or need to modify the code also. #define STANDBY_WAKEUP_BY_PA5 (BIT4) // GPIO Port A[5] #define STANDBY_WAKEUP_BY_PC7 (BIT5) // GPIO Port C[7] #define STANDBY_WAKEUP_BY_PD5 (BIT6) // GPIO Port D[5] #define STANDBY_WAKEUP_BY_PE3 (BIT7) // GPIO Port E[3] // Deep Sleep Wakeup event #define DSLEEP_WAKEUP_BY_TIMER (DS_TIMER33) #define DSLEEP_WAKEUP_BY_GPIO (DS_GPIO) // GPIO Port B[1] typedef struct _SLEEP_WKUP_EVENT_ { u8 wakeup_event; // Wake up event: Timer, NFC, GPIO u8 gpio_option; // GPIO Wakeup setting: [3:0]: Pin 3~0 enable, [7:4]: pin3~0 active high/low u32 timer_duration; // the sleep duration and then wakeup } SLEEP_WAKEUP_EVENT, *PSLEEP_WAKEUP_EVENT; /** Send the microcontroller to sleep * * The processor is setup ready for sleep, and sent to sleep using __WFI(). In this mode, the * system clock to the core is stopped until a reset or an interrupt occurs. This eliminates * dynamic power used by the processor, memory systems and buses. The processor, peripheral and * memory state are maintained, and the peripherals continue to work and can generate interrupts. * * The processor can be woken up by any internal peripheral interrupt or external pin interrupt. * * @note * The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored. * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be * able to access the LocalFileSystem */ void sleep_ex(uint32_t wakeup_event, uint32_t sleep_duration); void standby_wakeup_event_add(uint32_t wakeup_event, uint32_t sleep_duration_ms, uint32_t gpio_active); void standby_wakeup_event_del(uint32_t wakeup_event); void deepstandby_ex(void); /** Send the microcontroller to deep sleep * * This processor is setup ready for deep sleep, and sent to sleep using __WFI(). This mode * has the same sleep features as sleep plus it powers down peripherals and clocks. All state * is still maintained. * * The processor can only be woken up by an external interrupt on a pin or a timer. * * @note * The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored. * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be * able to access the LocalFileSystem */ void deepsleep_ex(uint32_t wakeup_event, uint32_t sleep_duration); #ifdef __cplusplus } #endif #endif #endif