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 Kenji Arai

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?

UserRevisionLine numberNew 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