You can change UART pin assign. If you define ON_THREAD_MODE, you can use the UART two channels even available hardware channel is only one.
Fork of BLE_I2C_pin_assign by
main.cpp@1:f3511dc0569f, 2017-09-01 (annotated)
- Committer:
- kenjiArai
- Date:
- Fri Sep 01 08:58:49 2017 +0000
- Revision:
- 1:f3511dc0569f
- Parent:
- 0:da7659112ca0
You can change UART pin assign.; If you define ON_THREAD_MODE, you can use the UART two channels even available hardware channel is only one.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:da7659112ca0 | 1 | /* |
kenjiArai | 1:f3511dc0569f | 2 | * Mbed Application program |
kenjiArai | 1:f3511dc0569f | 3 | * ------- Test program for UART pin assignment ------- |
kenjiArai | 1:f3511dc0569f | 4 | * Tested on Switch Science Mbed TY51822r3 |
kenjiArai | 1:f3511dc0569f | 5 | * |
kenjiArai | 1:f3511dc0569f | 6 | * Copyright (c) 2016,'17 Kenji Arai / JH1PJL |
kenjiArai | 1:f3511dc0569f | 7 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 1:f3511dc0569f | 8 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 1:f3511dc0569f | 9 | * Created: May 3rd, 2016 // Base:BLE_I2C_pin_assign |
kenjiArai | 1:f3511dc0569f | 10 | * Revised: September 1st, 2017 |
kenjiArai | 0:da7659112ca0 | 11 | * |
kenjiArai | 1:f3511dc0569f | 12 | */ |
kenjiArai | 1:f3511dc0569f | 13 | /* |
kenjiArai | 1:f3511dc0569f | 14 | /---------------------\ |
kenjiArai | 1:f3511dc0569f | 15 | | nRF51822/TY51822r3 | |
kenjiArai | 1:f3511dc0569f | 16 | | | |
kenjiArai | 1:f3511dc0569f | 17 | | UART TX(any pin) |----------] Direct connect TX and RX line |
kenjiArai | 1:f3511dc0569f | 18 | | | | |
kenjiArai | 1:f3511dc0569f | 19 | | UART RX(any pin) |----------] |
kenjiArai | 1:f3511dc0569f | 20 | | | |
kenjiArai | 1:f3511dc0569f | 21 | \---------------------/ |
kenjiArai | 0:da7659112ca0 | 22 | */ |
kenjiArai | 0:da7659112ca0 | 23 | |
kenjiArai | 1:f3511dc0569f | 24 | // Include -------------------------------------------------------------------- |
kenjiArai | 1:f3511dc0569f | 25 | #include "mbed.h" |
kenjiArai | 0:da7659112ca0 | 26 | |
kenjiArai | 1:f3511dc0569f | 27 | // Definition ----------------------------------------------------------------- |
kenjiArai | 1:f3511dc0569f | 28 | #define ON_THREAD_MODE |
kenjiArai | 1:f3511dc0569f | 29 | |
kenjiArai | 1:f3511dc0569f | 30 | #define PIN_MODE 4 // Select 1 to 5 for UART pin assign |
kenjiArai | 0:da7659112ca0 | 31 | |
kenjiArai | 1:f3511dc0569f | 32 | // Constructor ---------------------------------------------------------------- |
kenjiArai | 1:f3511dc0569f | 33 | #ifdef ON_THREAD_MODE // under some threads |
kenjiArai | 1:f3511dc0569f | 34 | |
kenjiArai | 1:f3511dc0569f | 35 | DigitalOut myled(LED1); |
kenjiArai | 1:f3511dc0569f | 36 | Thread th0; |
kenjiArai | 1:f3511dc0569f | 37 | Thread th1; |
kenjiArai | 1:f3511dc0569f | 38 | Mutex mutex; |
kenjiArai | 1:f3511dc0569f | 39 | |
kenjiArai | 1:f3511dc0569f | 40 | #else // ON_THREAD_MODE |
kenjiArai | 0:da7659112ca0 | 41 | |
kenjiArai | 1:f3511dc0569f | 42 | DigitalOut myled(LED1); |
kenjiArai | 1:f3511dc0569f | 43 | #if (PIN_MODE == 0) |
kenjiArai | 1:f3511dc0569f | 44 | Serial uart(USBTX, USBRX); |
kenjiArai | 1:f3511dc0569f | 45 | #elif (PIN_MODE == 1) |
kenjiArai | 1:f3511dc0569f | 46 | Serial uart(P0_0, P0_1); |
kenjiArai | 1:f3511dc0569f | 47 | #elif (PIN_MODE == 2) |
kenjiArai | 1:f3511dc0569f | 48 | Serial uart(P0_28, P0_29); |
kenjiArai | 1:f3511dc0569f | 49 | #elif (PIN_MODE == 3) |
kenjiArai | 1:f3511dc0569f | 50 | Serial uart(P0_3, P0_2); |
kenjiArai | 1:f3511dc0569f | 51 | #elif (PIN_MODE == 4) |
kenjiArai | 1:f3511dc0569f | 52 | Serial uart(P0_12, P0_13); |
kenjiArai | 1:f3511dc0569f | 53 | #elif (PIN_MODE == 5) |
kenjiArai | 1:f3511dc0569f | 54 | Serial uart(P0_23, P0_22); |
kenjiArai | 1:f3511dc0569f | 55 | #else // PIN_MODE |
kenjiArai | 1:f3511dc0569f | 56 | Serial uart(USBTX, USBRX); |
kenjiArai | 1:f3511dc0569f | 57 | #endif // PIN_MODE |
kenjiArai | 1:f3511dc0569f | 58 | |
kenjiArai | 1:f3511dc0569f | 59 | #endif // ON_THREAD_MODE |
kenjiArai | 0:da7659112ca0 | 60 | |
kenjiArai | 1:f3511dc0569f | 61 | // RAM ------------------------------------------------------------------------ |
kenjiArai | 1:f3511dc0569f | 62 | volatile uint32_t number = 0; |
kenjiArai | 1:f3511dc0569f | 63 | |
kenjiArai | 1:f3511dc0569f | 64 | // ROM / Constant data -------------------------------------------------------- |
kenjiArai | 1:f3511dc0569f | 65 | |
kenjiArai | 1:f3511dc0569f | 66 | // Function prototypes -------------------------------------------------------- |
kenjiArai | 1:f3511dc0569f | 67 | #ifdef ON_THREAD_MODE // under some threads |
kenjiArai | 1:f3511dc0569f | 68 | |
kenjiArai | 1:f3511dc0569f | 69 | void pc_com_thread(void); |
kenjiArai | 1:f3511dc0569f | 70 | void uart_com_thread(void); |
kenjiArai | 1:f3511dc0569f | 71 | |
kenjiArai | 1:f3511dc0569f | 72 | #endif // ON_THREAD_MODE |
kenjiArai | 1:f3511dc0569f | 73 | |
kenjiArai | 1:f3511dc0569f | 74 | //------------------------------------------------------------------------------ |
kenjiArai | 1:f3511dc0569f | 75 | // Control Program on RTOS(mbed-os5) |
kenjiArai | 1:f3511dc0569f | 76 | //------------------------------------------------------------------------------ |
kenjiArai | 1:f3511dc0569f | 77 | #ifdef ON_THREAD_MODE // under some threads |
kenjiArai | 1:f3511dc0569f | 78 | |
kenjiArai | 1:f3511dc0569f | 79 | #warning "you are selecting this main function" |
kenjiArai | 0:da7659112ca0 | 80 | int main() { |
kenjiArai | 1:f3511dc0569f | 81 | th0.start(pc_com_thread); |
kenjiArai | 1:f3511dc0569f | 82 | th1.start(uart_com_thread); |
kenjiArai | 1:f3511dc0569f | 83 | while(true) { |
kenjiArai | 1:f3511dc0569f | 84 | Thread::wait(osWaitForever); |
kenjiArai | 0:da7659112ca0 | 85 | } |
kenjiArai | 0:da7659112ca0 | 86 | } |
kenjiArai | 1:f3511dc0569f | 87 | |
kenjiArai | 1:f3511dc0569f | 88 | void uart_com_thread() |
kenjiArai | 1:f3511dc0569f | 89 | { |
kenjiArai | 1:f3511dc0569f | 90 | #if (PIN_MODE == 1) |
kenjiArai | 1:f3511dc0569f | 91 | Serial uart(P0_0, P0_1); |
kenjiArai | 1:f3511dc0569f | 92 | #elif (PIN_MODE == 2) |
kenjiArai | 1:f3511dc0569f | 93 | Serial uart(P0_28, P0_29); |
kenjiArai | 1:f3511dc0569f | 94 | #elif (PIN_MODE == 3) |
kenjiArai | 1:f3511dc0569f | 95 | Serial uart(P0_3, P0_2); |
kenjiArai | 1:f3511dc0569f | 96 | #elif (PIN_MODE == 4) |
kenjiArai | 1:f3511dc0569f | 97 | Serial uart(P0_12, P0_13); |
kenjiArai | 1:f3511dc0569f | 98 | #elif (PIN_MODE == 5) |
kenjiArai | 1:f3511dc0569f | 99 | Serial uart(P0_14, P0_15; |
kenjiArai | 1:f3511dc0569f | 100 | #else |
kenjiArai | 1:f3511dc0569f | 101 | #error "Please select 1 to 5 for PIN_MODE" |
kenjiArai | 1:f3511dc0569f | 102 | #endif |
kenjiArai | 1:f3511dc0569f | 103 | // If you see LED blinking, you may have an error. |
kenjiArai | 1:f3511dc0569f | 104 | while(true){ |
kenjiArai | 1:f3511dc0569f | 105 | for (char c = '!'; c < '~'; c++){ |
kenjiArai | 1:f3511dc0569f | 106 | mutex.lock(); |
kenjiArai | 1:f3511dc0569f | 107 | uart.putc(c); |
kenjiArai | 1:f3511dc0569f | 108 | Thread::wait(5); // 5 mS |
kenjiArai | 1:f3511dc0569f | 109 | while (uart.readable() == 0){;} // wait for loopback |
kenjiArai | 1:f3511dc0569f | 110 | if (uart.getc() == c){ |
kenjiArai | 1:f3511dc0569f | 111 | ++number; |
kenjiArai | 1:f3511dc0569f | 112 | myled = 0; |
kenjiArai | 1:f3511dc0569f | 113 | } else { |
kenjiArai | 1:f3511dc0569f | 114 | myled = 1; |
kenjiArai | 1:f3511dc0569f | 115 | Thread::wait(10); |
kenjiArai | 1:f3511dc0569f | 116 | myled = 0; |
kenjiArai | 1:f3511dc0569f | 117 | } |
kenjiArai | 1:f3511dc0569f | 118 | mutex.unlock(); |
kenjiArai | 1:f3511dc0569f | 119 | } |
kenjiArai | 1:f3511dc0569f | 120 | Thread::wait(100); // 100 mS |
kenjiArai | 1:f3511dc0569f | 121 | } |
kenjiArai | 1:f3511dc0569f | 122 | } |
kenjiArai | 1:f3511dc0569f | 123 | |
kenjiArai | 1:f3511dc0569f | 124 | void pc_com_thread() |
kenjiArai | 1:f3511dc0569f | 125 | { |
kenjiArai | 1:f3511dc0569f | 126 | uint32_t n = 0; |
kenjiArai | 1:f3511dc0569f | 127 | |
kenjiArai | 1:f3511dc0569f | 128 | while(true){ |
kenjiArai | 1:f3511dc0569f | 129 | mutex.lock(); |
kenjiArai | 1:f3511dc0569f | 130 | Serial pc(USBTX, USBRX); |
kenjiArai | 1:f3511dc0569f | 131 | pc.printf("test(uart1_thread) %d\r\n", n++); |
kenjiArai | 1:f3511dc0569f | 132 | pc.printf("total number of TX&RX communication %d\r\n", number); |
kenjiArai | 1:f3511dc0569f | 133 | #if (PIN_MODE == 1) |
kenjiArai | 1:f3511dc0569f | 134 | Serial uart(P0_0, P0_1); |
kenjiArai | 1:f3511dc0569f | 135 | #elif (PIN_MODE == 2) |
kenjiArai | 1:f3511dc0569f | 136 | Serial uart(P0_28, P0_29); |
kenjiArai | 1:f3511dc0569f | 137 | #elif (PIN_MODE == 3) |
kenjiArai | 1:f3511dc0569f | 138 | Serial uart(P0_3, P0_2); |
kenjiArai | 1:f3511dc0569f | 139 | #elif (PIN_MODE == 4) |
kenjiArai | 1:f3511dc0569f | 140 | Serial uart(P0_12, P0_13); |
kenjiArai | 1:f3511dc0569f | 141 | #elif (PIN_MODE == 5) |
kenjiArai | 1:f3511dc0569f | 142 | Serial uart(P0_14, P0_15; |
kenjiArai | 1:f3511dc0569f | 143 | #else |
kenjiArai | 1:f3511dc0569f | 144 | #error "Please select 1 to 5 for PIN_MODE" |
kenjiArai | 1:f3511dc0569f | 145 | #endif |
kenjiArai | 1:f3511dc0569f | 146 | mutex.unlock(); |
kenjiArai | 1:f3511dc0569f | 147 | Thread::wait(5000); // 5 sec |
kenjiArai | 1:f3511dc0569f | 148 | } |
kenjiArai | 1:f3511dc0569f | 149 | } |
kenjiArai | 1:f3511dc0569f | 150 | |
kenjiArai | 1:f3511dc0569f | 151 | //------------------------------------------------------------------------------ |
kenjiArai | 1:f3511dc0569f | 152 | // Control Program as none RTOS mode |
kenjiArai | 1:f3511dc0569f | 153 | //------------------------------------------------------------------------------ |
kenjiArai | 1:f3511dc0569f | 154 | #else // ON_THREAD_MODE |
kenjiArai | 1:f3511dc0569f | 155 | |
kenjiArai | 1:f3511dc0569f | 156 | #warning "You are selecting this main function" |
kenjiArai | 1:f3511dc0569f | 157 | // If you see LED blinking, you may have an error. |
kenjiArai | 1:f3511dc0569f | 158 | int main() { |
kenjiArai | 1:f3511dc0569f | 159 | while(true) { |
kenjiArai | 1:f3511dc0569f | 160 | for (char c = '!'; c < '~'; c++){ |
kenjiArai | 1:f3511dc0569f | 161 | uart.putc(c); |
kenjiArai | 1:f3511dc0569f | 162 | while (uart.readable() != 0){ |
kenjiArai | 1:f3511dc0569f | 163 | myled = !myled; |
kenjiArai | 1:f3511dc0569f | 164 | wait(0.2f); |
kenjiArai | 1:f3511dc0569f | 165 | } |
kenjiArai | 1:f3511dc0569f | 166 | if (uart.getc() == c){ |
kenjiArai | 1:f3511dc0569f | 167 | myled = 0; |
kenjiArai | 1:f3511dc0569f | 168 | } else { |
kenjiArai | 1:f3511dc0569f | 169 | myled = !myled; |
kenjiArai | 1:f3511dc0569f | 170 | } |
kenjiArai | 1:f3511dc0569f | 171 | wait(0.01f); |
kenjiArai | 1:f3511dc0569f | 172 | } |
kenjiArai | 1:f3511dc0569f | 173 | } |
kenjiArai | 1:f3511dc0569f | 174 | } |
kenjiArai | 1:f3511dc0569f | 175 | |
kenjiArai | 1:f3511dc0569f | 176 | #endif // ON_THREAD_MODE |