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/#

Revision:
0:f50677171f2d
Child:
1:cc54cd1df555
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nRF51_WakeUp.h	Sat Apr 02 06:19:14 2016 +0000
@@ -0,0 +1,82 @@
+/*
+ * mbed library program
+ *  Wake-Up function only at Sleep mode
+ *      Limitation:
+ *       1) only for nRF51822
+ *       2) RTC1 is used in mbed
+ *
+ * Copyright (c) 2016 Kenji Arai / JH1PJL
+ *  http://www.page.sannet.ne.jp/kenjia/index.html
+ *  http://mbed.org/users/kenjiArai/
+ *      Created:    March     24th, 2016
+ *      Revised:    April      2nd, 2016
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+ * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef NRF51_WAKEUP
+#define NRF51_WAKEUP
+
+#include "mbed.h"
+#include "nrf_soc.h"
+#include "nrf_delay.h"
+
+#ifndef TARGET_NRF51822
+#error "This function is only for nRF51822."
+#endif
+
+/** Set deepsleep duration time and wakeup as same as RESET state
+ *
+ * @code
+ * #include "mbed.h"
+ * #include "nRF51_WakeUp.h"
+ *
+ * DigitalOut   myled(LED1);
+ * DigitalIn    sw(P0_1);
+ * // RTC1 is 24bit counter, you cannot wait over 582 hours (125ms * 2^24 = 0.125 * 2097152 sec)
+ * nRF51_WakeUp wakeup(LED2, P0_0); // Trigger & Interrupt (MUST tied up together!!)
+ *
+ * int main() {
+ *   while(true){
+ *      myled = 1;
+ *      wait(1.0);
+ *      myled = 0;
+ *      wait(1.0);
+ *      if (sw == 0){
+ *          wakeup.set_and_wait(120);   // 2 minutes
+ *          deepsleep();                // just in case
+ *      }
+ *   }
+ * }
+ * @endcode
+ */
+
+class nRF51_WakeUp
+{
+public:
+    /** Configure control pin
+      * @param output(trigger) pin & Interrupt input pin
+      * @Hardware: Trigger pin and Interrupt pin are must connected!!
+      */
+    nRF51_WakeUp(PinName p_trigger, PinName p_interrupt);
+
+    /** Set wake-up time then goto Deep Sleep mode
+      * @param wake-up time (in minutes)
+      * @none
+      */
+    void set_and_wait(uint32_t t_sec);
+
+private:
+    void        action4restart(void);
+
+    DigitalOut  _pin0;
+    InterruptIn _pin1;
+    DigitalIn   _pin2;
+    PinName     p_name_trgr;
+};
+
+#endif      // NRF51_WAKEUP