NuMaker tickless example

Committer:
ccli8
Date:
Mon Oct 02 11:24:10 2017 +0800
Revision:
10:d2e2c79389e1
Parent:
1:eb1da9d36e12
Child:
16:ed2c228cbc9c
Support NANO130

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ccli8 1:eb1da9d36e12 1 #include "mbed.h"
ccli8 1:eb1da9d36e12 2 #include "wakeup.h"
ccli8 10:d2e2c79389e1 3
ccli8 10:d2e2c79389e1 4 #if defined(TARGET_NUMAKER_PFM_NANO130)
ccli8 10:d2e2c79389e1 5 /* This target doesn't support relocating vector table and requires overriding
ccli8 10:d2e2c79389e1 6 * vector handler at link-time. */
ccli8 10:d2e2c79389e1 7 extern "C" void WDT_IRQHandler(void)
ccli8 10:d2e2c79389e1 8 #else
ccli8 1:eb1da9d36e12 9 void WDT_IRQHandler(void)
ccli8 10:d2e2c79389e1 10 #endif
ccli8 1:eb1da9d36e12 11 {
ccli8 1:eb1da9d36e12 12 /* Check WDT interrupt flag */
ccli8 1:eb1da9d36e12 13 if (WDT_GET_TIMEOUT_INT_FLAG()) {
ccli8 1:eb1da9d36e12 14 WDT_CLEAR_TIMEOUT_INT_FLAG();
ccli8 1:eb1da9d36e12 15 WDT_RESET_COUNTER();
ccli8 1:eb1da9d36e12 16 }
ccli8 1:eb1da9d36e12 17
ccli8 1:eb1da9d36e12 18 // Check WDT wake-up flag
ccli8 1:eb1da9d36e12 19 if (WDT_GET_TIMEOUT_WAKEUP_FLAG()) {
ccli8 1:eb1da9d36e12 20 WDT_CLEAR_TIMEOUT_WAKEUP_FLAG();
ccli8 1:eb1da9d36e12 21
ccli8 1:eb1da9d36e12 22 wakeup_eventflags.set(EventFlag_Wakeup_WDT_Timeout);
ccli8 1:eb1da9d36e12 23 }
ccli8 1:eb1da9d36e12 24 }
ccli8 1:eb1da9d36e12 25
ccli8 1:eb1da9d36e12 26 void config_wdt_wakeup()
ccli8 1:eb1da9d36e12 27 {
ccli8 1:eb1da9d36e12 28 /* Enable IP module clock */
ccli8 1:eb1da9d36e12 29 CLK_EnableModuleClock(WDT_MODULE);
ccli8 1:eb1da9d36e12 30
ccli8 1:eb1da9d36e12 31 /* Select IP clock source */
ccli8 10:d2e2c79389e1 32 #if defined(TARGET_NUMAKER_PFM_NANO130)
ccli8 10:d2e2c79389e1 33 CLK_SetModuleClock(WDT_MODULE, 0, 0);
ccli8 10:d2e2c79389e1 34 #else
ccli8 1:eb1da9d36e12 35 CLK_SetModuleClock(WDT_MODULE, CLK_CLKSEL1_WDTSEL_LIRC, 0);
ccli8 10:d2e2c79389e1 36 #endif
ccli8 1:eb1da9d36e12 37
ccli8 1:eb1da9d36e12 38 SYS_UnlockReg();
ccli8 1:eb1da9d36e12 39 /* Alarm every 2^14 LIRC clocks, disable system reset, enable system wake-up */
ccli8 1:eb1da9d36e12 40 WDT_Open(WDT_TIMEOUT_2POW14, 0, FALSE, TRUE);
ccli8 1:eb1da9d36e12 41 SYS_LockReg();
ccli8 10:d2e2c79389e1 42
ccli8 1:eb1da9d36e12 43 /* NOTE: The name of symbol WDT_IRQHandler is mangled in C++ and cannot override that in startup file in C.
ccli8 1:eb1da9d36e12 44 * So the NVIC_SetVector call cannot be left out. */
ccli8 1:eb1da9d36e12 45 NVIC_SetVector(WDT_IRQn, (uint32_t) WDT_IRQHandler);
ccli8 1:eb1da9d36e12 46 NVIC_EnableIRQ(WDT_IRQn);
ccli8 1:eb1da9d36e12 47 SYS_UnlockReg();
ccli8 1:eb1da9d36e12 48 /* Enable WDT timeout interrupt */
ccli8 1:eb1da9d36e12 49 WDT_EnableInt();
ccli8 1:eb1da9d36e12 50 SYS_LockReg();
ccli8 1:eb1da9d36e12 51 }