ms2s,STM32 Private
Fork of WakeUp by
WakeUp.h
- Committer:
- Sissors
- Date:
- 2014-07-28
- Revision:
- 10:c41bc9154a7c
- Parent:
- 8:8d9a6ac0fba8
File content as of revision 10:c41bc9154a7c:
#include "mbed.h" /** * Class to make wake up a microcontroller from deepsleep using a low-power timer. * * @code * // Depending on the LED connections either the LED is off the 2 seconds * // the target spends in deepsleep(), and on for the other second. Or it is inverted * * #include "mbed.h" * #include "WakeUp.h" * * DigitalOut myled(LED1); * * int main() { * wait(5); * * //The low-power oscillator can be quite inaccurate on some targets * //this function calibrates it against the main clock * WakeUp::calibrate(); * * while(1) { * //Set LED to zero * myled = 0; * * //Set wakeup time for 2 seconds * WakeUp::set_ms(2000); * * //Enter deepsleep, the program won't go beyond this point until it is woken up * deepsleep(); * * //Set LED for 1 second to one * myled = 1; * wait(1); * } * } * @endcode */ class WakeUp { public: /** * Set the timeout * * @param s required time in seconds */ static void set(uint32_t s) { set_ms(1000 * s); } /** * Set the timeout * * @param ms required time in milliseconds */ static void set_ms(uint32_t ms); /** * Attach a function to be called after timeout * * This is optional, if you just want to wake up you * do not need to attach a function. * * Important: Many targets will run the wake-up routine * at reduced clock speed, afterwards clock speed is restored. * This means that clock speed dependent functions, such as printf * might end up distorted. * * Also supports normal way to attach member functions * (not documented for simplicity) * * @param *function function to call */ static void attach(void (*function)(void)) { callback.attach(function); } template<typename T> static void attach(T *object, void (T::*member)(void)) { callback.attach(object, member); } /** * Calibrate the timer * * Some of the low-power timers have very bad accuracy. * This function calibrates it against the main timer. * * Warning: Blocks for 100ms! */ static void calibrate(void); private: static FunctionPointer callback; static void irq_handler(void); static float cycles_per_ms; };