Wake-up function using RTC1. This revision, current consumption is around 80uA at deep sleep mode and this is not enough!! I cannot reduce it until today. This is a temporary revision which I need your help.

Dependents:   BLE_LoopbackUART_low_pwr_w_RTC1 BLE_Uart_Server

Please refer following notebook.
/users/kenjiArai/notebook/ty51822r3-current-consumption-using-nrf51_wakeup-l/#

Committer:
kenjiArai
Date:
Sat Jun 11 00:52:47 2016 +0000
Revision:
1:cc54cd1df555
Parent:
0:f50677171f2d
added power off for peripheral functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:f50677171f2d 1 /*
kenjiArai 0:f50677171f2d 2 * mbed library program
kenjiArai 0:f50677171f2d 3 * Wake-Up function only at Sleep mode
kenjiArai 0:f50677171f2d 4 * Limitation:
kenjiArai 0:f50677171f2d 5 * 1) only for nRF51822
kenjiArai 0:f50677171f2d 6 * 2) RTC1 is used in mbed
kenjiArai 0:f50677171f2d 7 *
kenjiArai 0:f50677171f2d 8 * Copyright (c) 2016 Kenji Arai / JH1PJL
kenjiArai 0:f50677171f2d 9 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:f50677171f2d 10 * http://mbed.org/users/kenjiArai/
kenjiArai 0:f50677171f2d 11 * Created: March 24th, 2016
kenjiArai 1:cc54cd1df555 12 * Revised: June 11th, 2016
kenjiArai 0:f50677171f2d 13 *
kenjiArai 0:f50677171f2d 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:f50677171f2d 15 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:f50677171f2d 16 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:f50677171f2d 17 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:f50677171f2d 18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:f50677171f2d 19 */
kenjiArai 0:f50677171f2d 20
kenjiArai 0:f50677171f2d 21 #ifndef NRF51_WAKEUP
kenjiArai 0:f50677171f2d 22 #define NRF51_WAKEUP
kenjiArai 0:f50677171f2d 23
kenjiArai 0:f50677171f2d 24 #include "mbed.h"
kenjiArai 0:f50677171f2d 25 #include "nrf_soc.h"
kenjiArai 0:f50677171f2d 26 #include "nrf_delay.h"
kenjiArai 0:f50677171f2d 27
kenjiArai 0:f50677171f2d 28 #ifndef TARGET_NRF51822
kenjiArai 0:f50677171f2d 29 #error "This function is only for nRF51822."
kenjiArai 0:f50677171f2d 30 #endif
kenjiArai 0:f50677171f2d 31
kenjiArai 0:f50677171f2d 32 /** Set deepsleep duration time and wakeup as same as RESET state
kenjiArai 0:f50677171f2d 33 *
kenjiArai 0:f50677171f2d 34 * @code
kenjiArai 0:f50677171f2d 35 * #include "mbed.h"
kenjiArai 0:f50677171f2d 36 * #include "nRF51_WakeUp.h"
kenjiArai 0:f50677171f2d 37 *
kenjiArai 0:f50677171f2d 38 * DigitalOut myled(LED1);
kenjiArai 0:f50677171f2d 39 * DigitalIn sw(P0_1);
kenjiArai 0:f50677171f2d 40 * // RTC1 is 24bit counter, you cannot wait over 582 hours (125ms * 2^24 = 0.125 * 2097152 sec)
kenjiArai 0:f50677171f2d 41 * nRF51_WakeUp wakeup(LED2, P0_0); // Trigger & Interrupt (MUST tied up together!!)
kenjiArai 0:f50677171f2d 42 *
kenjiArai 0:f50677171f2d 43 * int main() {
kenjiArai 0:f50677171f2d 44 * while(true){
kenjiArai 0:f50677171f2d 45 * myled = 1;
kenjiArai 0:f50677171f2d 46 * wait(1.0);
kenjiArai 0:f50677171f2d 47 * myled = 0;
kenjiArai 0:f50677171f2d 48 * wait(1.0);
kenjiArai 0:f50677171f2d 49 * if (sw == 0){
kenjiArai 0:f50677171f2d 50 * wakeup.set_and_wait(120); // 2 minutes
kenjiArai 0:f50677171f2d 51 * deepsleep(); // just in case
kenjiArai 0:f50677171f2d 52 * }
kenjiArai 0:f50677171f2d 53 * }
kenjiArai 0:f50677171f2d 54 * }
kenjiArai 0:f50677171f2d 55 * @endcode
kenjiArai 0:f50677171f2d 56 */
kenjiArai 0:f50677171f2d 57
kenjiArai 0:f50677171f2d 58 class nRF51_WakeUp
kenjiArai 0:f50677171f2d 59 {
kenjiArai 0:f50677171f2d 60 public:
kenjiArai 0:f50677171f2d 61 /** Configure control pin
kenjiArai 0:f50677171f2d 62 * @param output(trigger) pin & Interrupt input pin
kenjiArai 0:f50677171f2d 63 * @Hardware: Trigger pin and Interrupt pin are must connected!!
kenjiArai 0:f50677171f2d 64 */
kenjiArai 0:f50677171f2d 65 nRF51_WakeUp(PinName p_trigger, PinName p_interrupt);
kenjiArai 0:f50677171f2d 66
kenjiArai 0:f50677171f2d 67 /** Set wake-up time then goto Deep Sleep mode
kenjiArai 0:f50677171f2d 68 * @param wake-up time (in minutes)
kenjiArai 0:f50677171f2d 69 * @none
kenjiArai 0:f50677171f2d 70 */
kenjiArai 0:f50677171f2d 71 void set_and_wait(uint32_t t_sec);
kenjiArai 0:f50677171f2d 72
kenjiArai 0:f50677171f2d 73 private:
kenjiArai 0:f50677171f2d 74 void action4restart(void);
kenjiArai 0:f50677171f2d 75
kenjiArai 0:f50677171f2d 76 DigitalOut _pin0;
kenjiArai 0:f50677171f2d 77 InterruptIn _pin1;
kenjiArai 0:f50677171f2d 78 DigitalIn _pin2;
kenjiArai 0:f50677171f2d 79 PinName p_name_trgr;
kenjiArai 0:f50677171f2d 80 };
kenjiArai 0:f50677171f2d 81
kenjiArai 0:f50677171f2d 82 #endif // NRF51_WAKEUP