Nuvoton
/
NuMaker-mbed-tickless-example
NuMaker tickless example
wakeup_uart.cpp@22:59740ecd1781, 19 months ago (annotated)
- Committer:
- ccli8
- Date:
- Wed Oct 05 10:45:11 2022 +0800
- Revision:
- 22:59740ecd1781
- Parent:
- 21:5424989f037f
- Child:
- 23:a2a48e3ef326
Update to mbed-os 5.15.9 and accompanying modifications
1. Direct mbed-os.lib to 5.15.9
2. The target name 'NUMAKER_M252KG' changes to 'NUMAKER_IOT_M252' since mbed-os-5.15.5.
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 |
17:0f81445cbbf0 | 4 | #if defined(TARGET_NUMAKER_PFM_NANO130) |
ccli8 |
17:0f81445cbbf0 | 5 | // Serial |
ccli8 |
17:0f81445cbbf0 | 6 | #define SERIAL_RX D0 |
ccli8 |
17:0f81445cbbf0 | 7 | #define SERIAL_TX D1 |
ccli8 |
17:0f81445cbbf0 | 8 | #define SERIAL_CTS PB_7 |
ccli8 |
17:0f81445cbbf0 | 9 | #define SERIAL_RTS PB_6 |
ccli8 |
17:0f81445cbbf0 | 10 | |
ccli8 |
17:0f81445cbbf0 | 11 | #elif defined(TARGET_NUMAKER_PFM_NUC472) |
ccli8 |
1:eb1da9d36e12 | 12 | // Serial |
ccli8 |
1:eb1da9d36e12 | 13 | #define SERIAL_RX PF_0 |
ccli8 |
1:eb1da9d36e12 | 14 | #define SERIAL_TX PD_15 |
ccli8 |
1:eb1da9d36e12 | 15 | #define SERIAL_CTS PD_13 |
ccli8 |
1:eb1da9d36e12 | 16 | #define SERIAL_RTS PD_14 |
ccli8 |
1:eb1da9d36e12 | 17 | |
ccli8 |
1:eb1da9d36e12 | 18 | #elif defined(TARGET_NUMAKER_PFM_M453) |
ccli8 |
1:eb1da9d36e12 | 19 | // Serial |
ccli8 |
1:eb1da9d36e12 | 20 | #define SERIAL_RX A2 |
ccli8 |
1:eb1da9d36e12 | 21 | #define SERIAL_TX A3 |
ccli8 |
1:eb1da9d36e12 | 22 | #define SERIAL_CTS A4 |
ccli8 |
1:eb1da9d36e12 | 23 | #define SERIAL_RTS A5 |
ccli8 |
1:eb1da9d36e12 | 24 | |
ccli8 |
1:eb1da9d36e12 | 25 | #elif defined(TARGET_NUMAKER_PFM_M487) |
ccli8 |
1:eb1da9d36e12 | 26 | // Serial |
ccli8 |
1:eb1da9d36e12 | 27 | #define SERIAL_RX D13 |
ccli8 |
1:eb1da9d36e12 | 28 | #define SERIAL_TX D10 |
ccli8 |
1:eb1da9d36e12 | 29 | #define SERIAL_CTS D12 |
ccli8 |
1:eb1da9d36e12 | 30 | #define SERIAL_RTS D11 |
ccli8 |
1:eb1da9d36e12 | 31 | |
ccli8 |
19:adb1816661ee | 32 | #elif defined(TARGET_NUMAKER_IOT_M487) |
ccli8 |
19:adb1816661ee | 33 | // Serial |
ccli8 |
19:adb1816661ee | 34 | #define SERIAL_RX D13 |
ccli8 |
19:adb1816661ee | 35 | #define SERIAL_TX D10 |
ccli8 |
19:adb1816661ee | 36 | #define SERIAL_CTS D12 |
ccli8 |
19:adb1816661ee | 37 | #define SERIAL_RTS D11 |
ccli8 |
19:adb1816661ee | 38 | |
ccli8 |
17:0f81445cbbf0 | 39 | #elif defined(TARGET_NUMAKER_IOT_M263A) |
ccli8 |
10:d2e2c79389e1 | 40 | // Serial |
ccli8 |
10:d2e2c79389e1 | 41 | #define SERIAL_RX D0 |
ccli8 |
10:d2e2c79389e1 | 42 | #define SERIAL_TX D1 |
ccli8 |
17:0f81445cbbf0 | 43 | #define SERIAL_CTS PB_9 |
ccli8 |
17:0f81445cbbf0 | 44 | #define SERIAL_RTS PB_8 |
ccli8 |
10:d2e2c79389e1 | 45 | |
ccli8 |
22:59740ecd1781 | 46 | #elif defined(TARGET_NUMAKER_IOT_M252) |
ccli8 |
18:e236110ce841 | 47 | // Serial |
ccli8 |
18:e236110ce841 | 48 | #define SERIAL_RX D0 |
ccli8 |
18:e236110ce841 | 49 | #define SERIAL_TX D1 |
ccli8 |
18:e236110ce841 | 50 | #define SERIAL_CTS PB_9 |
ccli8 |
18:e236110ce841 | 51 | #define SERIAL_RTS PB_8 |
ccli8 |
18:e236110ce841 | 52 | |
ccli8 |
1:eb1da9d36e12 | 53 | #endif |
ccli8 |
1:eb1da9d36e12 | 54 | |
ccli8 |
1:eb1da9d36e12 | 55 | /* This handler is to be called in UART interrupt context (which is extended by Nuvoton's UART HAL implementation |
ccli8 |
1:eb1da9d36e12 | 56 | * on mbed OS) to support wake-up by UART CTS state change. */ |
ccli8 |
1:eb1da9d36e12 | 57 | extern "C" void nu_uart_cts_wakeup_handler(UART_T *uart_base); |
ccli8 |
1:eb1da9d36e12 | 58 | |
ccli8 |
1:eb1da9d36e12 | 59 | static void poll_serial(void); |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 60 | #if MBED_MAJOR_VERSION >= 6 |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 61 | static void serial_tx_callback(UnbufferedSerial *serial_); |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 62 | #else |
ccli8 |
1:eb1da9d36e12 | 63 | static void serial_tx_callback(Serial *serial_); |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 64 | #endif |
ccli8 |
1:eb1da9d36e12 | 65 | |
ccli8 |
1:eb1da9d36e12 | 66 | /* Support wake-up by UART CTS state change */ |
ccli8 |
1:eb1da9d36e12 | 67 | static Semaphore sem_serial(0, 1); |
ccli8 |
1:eb1da9d36e12 | 68 | |
ccli8 |
1:eb1da9d36e12 | 69 | void config_uart_wakeup(void) |
ccli8 |
1:eb1da9d36e12 | 70 | { |
ccli8 |
1:eb1da9d36e12 | 71 | static Thread thread_serial; |
ccli8 |
1:eb1da9d36e12 | 72 | |
ccli8 |
1:eb1da9d36e12 | 73 | Callback<void()> callback(&poll_serial); |
ccli8 |
1:eb1da9d36e12 | 74 | thread_serial.start(callback); |
ccli8 |
1:eb1da9d36e12 | 75 | } |
ccli8 |
1:eb1da9d36e12 | 76 | |
ccli8 |
1:eb1da9d36e12 | 77 | static void poll_serial(void) |
ccli8 |
1:eb1da9d36e12 | 78 | { |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 79 | #if MBED_MAJOR_VERSION >= 6 |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 80 | static UnbufferedSerial serial(SERIAL_TX, SERIAL_RX); |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 81 | #else |
ccli8 |
1:eb1da9d36e12 | 82 | static Serial serial(SERIAL_TX, SERIAL_RX); |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 83 | #endif |
ccli8 |
1:eb1da9d36e12 | 84 | /* UART CTS wake-up: clock source is not limited. |
ccli8 |
1:eb1da9d36e12 | 85 | * UART data wake-up: clock source is required to be LXT/LIRC. */ |
ccli8 |
1:eb1da9d36e12 | 86 | serial.set_flow_control(SerialBase::RTSCTS, SERIAL_RTS, SERIAL_CTS); |
ccli8 |
1:eb1da9d36e12 | 87 | |
ccli8 |
1:eb1da9d36e12 | 88 | /* We need to register one interrupt handler to enable interrupt. */ |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 89 | #if MBED_MAJOR_VERSION >= 6 |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 90 | Callback<void()> callback((void (*)(UnbufferedSerial *)) &serial_tx_callback, (UnbufferedSerial *) &serial); |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 91 | #else |
ccli8 |
1:eb1da9d36e12 | 92 | Callback<void()> callback((void (*)(Serial *)) &serial_tx_callback, (Serial *) &serial); |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 93 | #endif |
ccli8 |
1:eb1da9d36e12 | 94 | serial.attach(callback, mbed::SerialBase::TxIrq); |
ccli8 |
1:eb1da9d36e12 | 95 | |
ccli8 |
1:eb1da9d36e12 | 96 | while (true) { |
ccli8 |
16:ed2c228cbc9c | 97 | sem_serial.acquire(); |
ccli8 |
16:ed2c228cbc9c | 98 | |
ccli8 |
1:eb1da9d36e12 | 99 | wakeup_eventflags.set(EventFlag_Wakeup_UART_CTS); |
ccli8 |
1:eb1da9d36e12 | 100 | } |
ccli8 |
1:eb1da9d36e12 | 101 | } |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 102 | #if MBED_MAJOR_VERSION >= 6 |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 103 | static void serial_tx_callback(UnbufferedSerial *serial_) |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 104 | #else |
ccli8 |
1:eb1da9d36e12 | 105 | static void serial_tx_callback(Serial *serial_) |
SHLIU1@OANBE02333.nuvoton.com | 21:5424989f037f | 106 | #endif |
ccli8 |
1:eb1da9d36e12 | 107 | { |
ccli8 |
1:eb1da9d36e12 | 108 | (void) serial_; |
ccli8 |
1:eb1da9d36e12 | 109 | } |
ccli8 |
1:eb1da9d36e12 | 110 | |
ccli8 |
1:eb1da9d36e12 | 111 | void nu_uart_cts_wakeup_handler(UART_T *uart_base) |
ccli8 |
1:eb1da9d36e12 | 112 | { |
ccli8 |
1:eb1da9d36e12 | 113 | (void) uart_base; |
ccli8 |
16:ed2c228cbc9c | 114 | |
ccli8 |
16:ed2c228cbc9c | 115 | /* FIXME: Clear wake-up event to enable re-entering Power-down mode */ |
ccli8 |
16:ed2c228cbc9c | 116 | |
ccli8 |
1:eb1da9d36e12 | 117 | sem_serial.release(); |
ccli8 |
1:eb1da9d36e12 | 118 | } |