Nuvoton
/
NuMaker-mbed-tickless-example
NuMaker tickless example
wakeup_wdt.cpp@1:eb1da9d36e12, 2017-09-12 (annotated)
- Committer:
- ccli8
- Date:
- Tue Sep 12 16:16:43 2017 +0800
- Revision:
- 1:eb1da9d36e12
- Child:
- 10:d2e2c79389e1
Support NUC472/M453/M487
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ccli8 |
1:eb1da9d36e12 | 1 | #include "mbed.h" |
ccli8 |
1:eb1da9d36e12 | 2 | #include "wakeup.h" |
ccli8 |
1:eb1da9d36e12 | 3 | |
ccli8 |
1:eb1da9d36e12 | 4 | void WDT_IRQHandler(void) |
ccli8 |
1:eb1da9d36e12 | 5 | { |
ccli8 |
1:eb1da9d36e12 | 6 | /* Check WDT interrupt flag */ |
ccli8 |
1:eb1da9d36e12 | 7 | if (WDT_GET_TIMEOUT_INT_FLAG()) { |
ccli8 |
1:eb1da9d36e12 | 8 | WDT_CLEAR_TIMEOUT_INT_FLAG(); |
ccli8 |
1:eb1da9d36e12 | 9 | WDT_RESET_COUNTER(); |
ccli8 |
1:eb1da9d36e12 | 10 | } |
ccli8 |
1:eb1da9d36e12 | 11 | |
ccli8 |
1:eb1da9d36e12 | 12 | // Check WDT wake-up flag |
ccli8 |
1:eb1da9d36e12 | 13 | if (WDT_GET_TIMEOUT_WAKEUP_FLAG()) { |
ccli8 |
1:eb1da9d36e12 | 14 | WDT_CLEAR_TIMEOUT_WAKEUP_FLAG(); |
ccli8 |
1:eb1da9d36e12 | 15 | |
ccli8 |
1:eb1da9d36e12 | 16 | wakeup_eventflags.set(EventFlag_Wakeup_WDT_Timeout); |
ccli8 |
1:eb1da9d36e12 | 17 | } |
ccli8 |
1:eb1da9d36e12 | 18 | } |
ccli8 |
1:eb1da9d36e12 | 19 | |
ccli8 |
1:eb1da9d36e12 | 20 | void config_wdt_wakeup() |
ccli8 |
1:eb1da9d36e12 | 21 | { |
ccli8 |
1:eb1da9d36e12 | 22 | /* Enable IP module clock */ |
ccli8 |
1:eb1da9d36e12 | 23 | CLK_EnableModuleClock(WDT_MODULE); |
ccli8 |
1:eb1da9d36e12 | 24 | |
ccli8 |
1:eb1da9d36e12 | 25 | /* Select IP clock source */ |
ccli8 |
1:eb1da9d36e12 | 26 | CLK_SetModuleClock(WDT_MODULE, CLK_CLKSEL1_WDTSEL_LIRC, 0); |
ccli8 |
1:eb1da9d36e12 | 27 | |
ccli8 |
1:eb1da9d36e12 | 28 | SYS_UnlockReg(); |
ccli8 |
1:eb1da9d36e12 | 29 | /* Alarm every 2^14 LIRC clocks, disable system reset, enable system wake-up */ |
ccli8 |
1:eb1da9d36e12 | 30 | WDT_Open(WDT_TIMEOUT_2POW14, 0, FALSE, TRUE); |
ccli8 |
1:eb1da9d36e12 | 31 | SYS_LockReg(); |
ccli8 |
1:eb1da9d36e12 | 32 | |
ccli8 |
1:eb1da9d36e12 | 33 | /* NOTE: The name of symbol WDT_IRQHandler is mangled in C++ and cannot override that in startup file in C. |
ccli8 |
1:eb1da9d36e12 | 34 | * So the NVIC_SetVector call cannot be left out. */ |
ccli8 |
1:eb1da9d36e12 | 35 | NVIC_SetVector(WDT_IRQn, (uint32_t) WDT_IRQHandler); |
ccli8 |
1:eb1da9d36e12 | 36 | NVIC_EnableIRQ(WDT_IRQn); |
ccli8 |
1:eb1da9d36e12 | 37 | SYS_UnlockReg(); |
ccli8 |
1:eb1da9d36e12 | 38 | /* Enable WDT timeout interrupt */ |
ccli8 |
1:eb1da9d36e12 | 39 | WDT_EnableInt(); |
ccli8 |
1:eb1da9d36e12 | 40 | SYS_LockReg(); |
ccli8 |
1:eb1da9d36e12 | 41 | } |