mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Thu Mar 06 10:00:06 2014 +0000
Revision:
111:ae4891ca7084
Parent:
82:0b31dbcd4769
Child:
158:3121b9889f7b
Synchronized with git revision 955bd9a5c9e042f1cf30bbae2a99afaab8eb4cbf

Full URL: https://github.com/mbedmicro/mbed/commit/955bd9a5c9e042f1cf30bbae2a99afaab8eb4cbf/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 82:0b31dbcd4769 1 /* mbed Microcontroller Library
mbed_official 82:0b31dbcd4769 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 82:0b31dbcd4769 3 *
mbed_official 82:0b31dbcd4769 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 82:0b31dbcd4769 5 * you may not use this file except in compliance with the License.
mbed_official 82:0b31dbcd4769 6 * You may obtain a copy of the License at
mbed_official 82:0b31dbcd4769 7 *
mbed_official 82:0b31dbcd4769 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 82:0b31dbcd4769 9 *
mbed_official 82:0b31dbcd4769 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 82:0b31dbcd4769 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 82:0b31dbcd4769 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 82:0b31dbcd4769 13 * See the License for the specific language governing permissions and
mbed_official 82:0b31dbcd4769 14 * limitations under the License.
mbed_official 82:0b31dbcd4769 15 */
mbed_official 82:0b31dbcd4769 16 #include "serial_api.h"
mbed_official 82:0b31dbcd4769 17
mbed_official 82:0b31dbcd4769 18 // math.h required for floating point operations for baud rate calculation
mbed_official 82:0b31dbcd4769 19 #include <math.h>
mbed_official 82:0b31dbcd4769 20
mbed_official 82:0b31dbcd4769 21 #include <string.h>
mbed_official 82:0b31dbcd4769 22
mbed_official 82:0b31dbcd4769 23 #include "cmsis.h"
mbed_official 82:0b31dbcd4769 24 #include "pinmap.h"
mbed_official 82:0b31dbcd4769 25 #include "error.h"
mbed_official 82:0b31dbcd4769 26 #include "clk_freqs.h"
mbed_official 82:0b31dbcd4769 27 #include "PeripheralPins.h"
mbed_official 82:0b31dbcd4769 28
mbed_official 82:0b31dbcd4769 29 //Devices either user UART0 or UARTLP
mbed_official 82:0b31dbcd4769 30 #ifndef UARTLP_BASES
mbed_official 82:0b31dbcd4769 31 #define UARTLP_C2_RE_MASK UART0_C2_RE_MASK
mbed_official 82:0b31dbcd4769 32 #define UARTLP_C2_TE_MASK UART0_C2_TE_MASK
mbed_official 82:0b31dbcd4769 33 #define UARTLP_BDH_SBNS_MASK UART0_BDH_SBNS_MASK
mbed_official 82:0b31dbcd4769 34 #define UARTLP_BDH_SBNS_SHIFT UART0_BDH_SBNS_SHIFT
mbed_official 82:0b31dbcd4769 35 #define UARTLP_S1_TDRE_MASK UART0_S1_TDRE_MASK
mbed_official 82:0b31dbcd4769 36 #define UARTLP_S1_OR_MASK UART0_S1_OR_MASK
mbed_official 82:0b31dbcd4769 37 #define UARTLP_C2_RIE_MASK UART0_C2_RIE_MASK
mbed_official 82:0b31dbcd4769 38 #define UARTLP_C2_TIE_MASK UART0_C2_TIE_MASK
mbed_official 82:0b31dbcd4769 39 #define UARTLP_C2_SBK_MASK UART0_C2_SBK_MASK
mbed_official 82:0b31dbcd4769 40 #define UARTLP_S1_RDRF_MASK UART0_S1_RDRF_MASK
mbed_official 82:0b31dbcd4769 41 #endif
mbed_official 82:0b31dbcd4769 42
mbed_official 82:0b31dbcd4769 43 #ifdef UART2
mbed_official 82:0b31dbcd4769 44 #define UART_NUM 3
mbed_official 82:0b31dbcd4769 45 #else
mbed_official 82:0b31dbcd4769 46 #define UART_NUM 1
mbed_official 82:0b31dbcd4769 47 #endif
mbed_official 82:0b31dbcd4769 48
mbed_official 82:0b31dbcd4769 49 /******************************************************************************
mbed_official 82:0b31dbcd4769 50 * INITIALIZATION
mbed_official 82:0b31dbcd4769 51 ******************************************************************************/
mbed_official 82:0b31dbcd4769 52
mbed_official 82:0b31dbcd4769 53 static uint32_t serial_irq_ids[UART_NUM] = {0};
mbed_official 82:0b31dbcd4769 54 static uart_irq_handler irq_handler;
mbed_official 82:0b31dbcd4769 55
mbed_official 82:0b31dbcd4769 56 int stdio_uart_inited = 0;
mbed_official 82:0b31dbcd4769 57 serial_t stdio_uart;
mbed_official 82:0b31dbcd4769 58
mbed_official 82:0b31dbcd4769 59 void serial_init(serial_t *obj, PinName tx, PinName rx) {
mbed_official 82:0b31dbcd4769 60 // determine the UART to use
mbed_official 82:0b31dbcd4769 61 UARTName uart_tx = (UARTName)pinmap_peripheral(tx, PinMap_UART_TX);
mbed_official 82:0b31dbcd4769 62 UARTName uart_rx = (UARTName)pinmap_peripheral(rx, PinMap_UART_RX);
mbed_official 82:0b31dbcd4769 63 UARTName uart = (UARTName)pinmap_merge(uart_tx, uart_rx);
mbed_official 82:0b31dbcd4769 64 if ((int)uart == NC) {
mbed_official 82:0b31dbcd4769 65 error("Serial pinout mapping failed");
mbed_official 82:0b31dbcd4769 66 }
mbed_official 82:0b31dbcd4769 67
mbed_official 82:0b31dbcd4769 68 obj->uart = (UARTLP_Type *)uart;
mbed_official 82:0b31dbcd4769 69 // enable clk
mbed_official 82:0b31dbcd4769 70 switch (uart) {
mbed_official 82:0b31dbcd4769 71 case UART_0: if (mcgpllfll_frequency() != 0) //PLL/FLL is selected
mbed_official 82:0b31dbcd4769 72 SIM->SOPT2 |= (1<<SIM_SOPT2_UART0SRC_SHIFT);
mbed_official 82:0b31dbcd4769 73 else
mbed_official 82:0b31dbcd4769 74 SIM->SOPT2 |= (2<<SIM_SOPT2_UART0SRC_SHIFT);
mbed_official 82:0b31dbcd4769 75 SIM->SCGC4 |= SIM_SCGC4_UART0_MASK; break;
mbed_official 82:0b31dbcd4769 76 #if UART_NUM > 1
mbed_official 82:0b31dbcd4769 77 case UART_1: SIM->SCGC4 |= SIM_SCGC4_UART1_MASK; break;
mbed_official 82:0b31dbcd4769 78 case UART_2: SIM->SCGC4 |= SIM_SCGC4_UART2_MASK; break;
mbed_official 82:0b31dbcd4769 79 #endif
mbed_official 82:0b31dbcd4769 80 }
mbed_official 82:0b31dbcd4769 81 // Disable UART before changing registers
mbed_official 82:0b31dbcd4769 82 obj->uart->C2 &= ~(UARTLP_C2_RE_MASK | UARTLP_C2_TE_MASK);
mbed_official 82:0b31dbcd4769 83
mbed_official 82:0b31dbcd4769 84 switch (uart) {
mbed_official 82:0b31dbcd4769 85 case UART_0: obj->index = 0; break;
mbed_official 82:0b31dbcd4769 86 #if UART_NUM > 1
mbed_official 82:0b31dbcd4769 87 case UART_1: obj->index = 1; break;
mbed_official 82:0b31dbcd4769 88 case UART_2: obj->index = 2; break;
mbed_official 82:0b31dbcd4769 89 #endif
mbed_official 82:0b31dbcd4769 90 }
mbed_official 82:0b31dbcd4769 91
mbed_official 82:0b31dbcd4769 92 // set default baud rate and format
mbed_official 82:0b31dbcd4769 93 serial_baud (obj, 9600);
mbed_official 82:0b31dbcd4769 94 serial_format(obj, 8, ParityNone, 1);
mbed_official 82:0b31dbcd4769 95
mbed_official 82:0b31dbcd4769 96 // pinout the chosen uart
mbed_official 82:0b31dbcd4769 97 pinmap_pinout(tx, PinMap_UART_TX);
mbed_official 82:0b31dbcd4769 98 pinmap_pinout(rx, PinMap_UART_RX);
mbed_official 82:0b31dbcd4769 99
mbed_official 82:0b31dbcd4769 100 // set rx/tx pins in PullUp mode
mbed_official 82:0b31dbcd4769 101 pin_mode(tx, PullUp);
mbed_official 82:0b31dbcd4769 102 pin_mode(rx, PullUp);
mbed_official 82:0b31dbcd4769 103
mbed_official 82:0b31dbcd4769 104 obj->uart->C2 |= (UARTLP_C2_RE_MASK | UARTLP_C2_TE_MASK);
mbed_official 82:0b31dbcd4769 105
mbed_official 82:0b31dbcd4769 106 if (uart == STDIO_UART) {
mbed_official 82:0b31dbcd4769 107 stdio_uart_inited = 1;
mbed_official 82:0b31dbcd4769 108 memcpy(&stdio_uart, obj, sizeof(serial_t));
mbed_official 82:0b31dbcd4769 109 }
mbed_official 82:0b31dbcd4769 110 }
mbed_official 82:0b31dbcd4769 111
mbed_official 82:0b31dbcd4769 112 void serial_free(serial_t *obj) {
mbed_official 82:0b31dbcd4769 113 serial_irq_ids[obj->index] = 0;
mbed_official 82:0b31dbcd4769 114 }
mbed_official 82:0b31dbcd4769 115
mbed_official 82:0b31dbcd4769 116 // serial_baud
mbed_official 82:0b31dbcd4769 117 //
mbed_official 82:0b31dbcd4769 118 // set the baud rate, taking in to account the current SystemFrequency
mbed_official 82:0b31dbcd4769 119 void serial_baud(serial_t *obj, int baudrate) {
mbed_official 82:0b31dbcd4769 120
mbed_official 82:0b31dbcd4769 121 // save C2 state
mbed_official 82:0b31dbcd4769 122 uint8_t c2_state = (obj->uart->C2 & (UARTLP_C2_RE_MASK | UARTLP_C2_TE_MASK));
mbed_official 82:0b31dbcd4769 123
mbed_official 82:0b31dbcd4769 124 // Disable UART before changing registers
mbed_official 82:0b31dbcd4769 125 obj->uart->C2 &= ~(UARTLP_C2_RE_MASK | UARTLP_C2_TE_MASK);
mbed_official 82:0b31dbcd4769 126
mbed_official 82:0b31dbcd4769 127 uint32_t PCLK;
mbed_official 82:0b31dbcd4769 128 if (obj->uart == UART0) {
mbed_official 82:0b31dbcd4769 129 if (mcgpllfll_frequency() != 0)
mbed_official 82:0b31dbcd4769 130 PCLK = mcgpllfll_frequency();
mbed_official 82:0b31dbcd4769 131 else
mbed_official 82:0b31dbcd4769 132 PCLK = extosc_frequency();
mbed_official 82:0b31dbcd4769 133 } else
mbed_official 82:0b31dbcd4769 134 PCLK = bus_frequency();
mbed_official 82:0b31dbcd4769 135
mbed_official 82:0b31dbcd4769 136 // First we check to see if the basic divide with no DivAddVal/MulVal
mbed_official 82:0b31dbcd4769 137 // ratio gives us an integer result. If it does, we set DivAddVal = 0,
mbed_official 82:0b31dbcd4769 138 // MulVal = 1. Otherwise, we search the valid ratio value range to find
mbed_official 82:0b31dbcd4769 139 // the closest match. This could be more elegant, using search methods
mbed_official 82:0b31dbcd4769 140 // and/or lookup tables, but the brute force method is not that much
mbed_official 82:0b31dbcd4769 141 // slower, and is more maintainable.
mbed_official 82:0b31dbcd4769 142 uint16_t DL = PCLK / (16 * baudrate);
mbed_official 82:0b31dbcd4769 143
mbed_official 82:0b31dbcd4769 144 // set BDH and BDL
mbed_official 82:0b31dbcd4769 145 obj->uart->BDH = (obj->uart->BDH & ~(0x1f)) | ((DL >> 8) & 0x1f);
mbed_official 82:0b31dbcd4769 146 obj->uart->BDL = (obj->uart->BDL & ~(0xff)) | ((DL >> 0) & 0xff);
mbed_official 82:0b31dbcd4769 147
mbed_official 82:0b31dbcd4769 148 // restore C2 state
mbed_official 82:0b31dbcd4769 149 obj->uart->C2 |= c2_state;
mbed_official 82:0b31dbcd4769 150 }
mbed_official 82:0b31dbcd4769 151
mbed_official 82:0b31dbcd4769 152 void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) {
mbed_official 82:0b31dbcd4769 153
mbed_official 82:0b31dbcd4769 154 // save C2 state
mbed_official 82:0b31dbcd4769 155 uint8_t c2_state = (obj->uart->C2 & (UARTLP_C2_RE_MASK | UARTLP_C2_TE_MASK));
mbed_official 82:0b31dbcd4769 156
mbed_official 82:0b31dbcd4769 157 // Disable UART before changing registers
mbed_official 82:0b31dbcd4769 158 obj->uart->C2 &= ~(UARTLP_C2_RE_MASK | UARTLP_C2_TE_MASK);
mbed_official 82:0b31dbcd4769 159
mbed_official 82:0b31dbcd4769 160 // TODO: Support other number of data bits (also in the write method!)
mbed_official 82:0b31dbcd4769 161 if ((data_bits < 8) || (data_bits > 8)) {
mbed_official 82:0b31dbcd4769 162 error("Invalid number of bits (%d) in serial format, should be 8\r\n", data_bits);
mbed_official 82:0b31dbcd4769 163 }
mbed_official 82:0b31dbcd4769 164
mbed_official 82:0b31dbcd4769 165 uint8_t parity_enable, parity_select;
mbed_official 82:0b31dbcd4769 166 switch (parity) {
mbed_official 82:0b31dbcd4769 167 case ParityNone: parity_enable = 0; parity_select = 0; break;
mbed_official 82:0b31dbcd4769 168 case ParityOdd : parity_enable = 1; parity_select = 1; data_bits++; break;
mbed_official 82:0b31dbcd4769 169 case ParityEven: parity_enable = 1; parity_select = 0; data_bits++; break;
mbed_official 82:0b31dbcd4769 170 default:
mbed_official 82:0b31dbcd4769 171 error("Invalid serial parity setting\r\n");
mbed_official 82:0b31dbcd4769 172 return;
mbed_official 82:0b31dbcd4769 173 }
mbed_official 82:0b31dbcd4769 174
mbed_official 82:0b31dbcd4769 175 // 1 stop bits = 0, 2 stop bits = 1
mbed_official 82:0b31dbcd4769 176 if ((stop_bits != 1) && (stop_bits != 2)) {
mbed_official 82:0b31dbcd4769 177 error("Invalid stop bits specified\r\n");
mbed_official 82:0b31dbcd4769 178 }
mbed_official 82:0b31dbcd4769 179 stop_bits -= 1;
mbed_official 82:0b31dbcd4769 180
mbed_official 82:0b31dbcd4769 181 // data bits, parity and parity mode
mbed_official 82:0b31dbcd4769 182 obj->uart->C1 = ((parity_enable << 1)
mbed_official 82:0b31dbcd4769 183 | (parity_select << 0));
mbed_official 82:0b31dbcd4769 184
mbed_official 82:0b31dbcd4769 185 // stop bits
mbed_official 82:0b31dbcd4769 186 obj->uart->BDH &= ~UARTLP_BDH_SBNS_MASK;
mbed_official 82:0b31dbcd4769 187 obj->uart->BDH |= (stop_bits << UARTLP_BDH_SBNS_SHIFT);
mbed_official 82:0b31dbcd4769 188
mbed_official 82:0b31dbcd4769 189 // restore C2 state
mbed_official 82:0b31dbcd4769 190 obj->uart->C2 |= c2_state;
mbed_official 82:0b31dbcd4769 191 }
mbed_official 82:0b31dbcd4769 192
mbed_official 82:0b31dbcd4769 193 /******************************************************************************
mbed_official 82:0b31dbcd4769 194 * INTERRUPTS HANDLING
mbed_official 82:0b31dbcd4769 195 ******************************************************************************/
mbed_official 82:0b31dbcd4769 196 static inline void uart_irq(uint8_t status, uint32_t index) {
mbed_official 82:0b31dbcd4769 197 if (serial_irq_ids[index] != 0) {
mbed_official 82:0b31dbcd4769 198 if (status & UARTLP_S1_TDRE_MASK)
mbed_official 82:0b31dbcd4769 199 irq_handler(serial_irq_ids[index], TxIrq);
mbed_official 82:0b31dbcd4769 200
mbed_official 82:0b31dbcd4769 201 if (status & UARTLP_S1_RDRF_MASK)
mbed_official 82:0b31dbcd4769 202 irq_handler(serial_irq_ids[index], RxIrq);
mbed_official 82:0b31dbcd4769 203 }
mbed_official 82:0b31dbcd4769 204 }
mbed_official 82:0b31dbcd4769 205
mbed_official 82:0b31dbcd4769 206 void uart0_irq() {
mbed_official 82:0b31dbcd4769 207 uart_irq(UART0->S1, 0);
mbed_official 82:0b31dbcd4769 208 if (UART0->S1 & UARTLP_S1_OR_MASK)
mbed_official 82:0b31dbcd4769 209 UART0->S1 |= UARTLP_S1_OR_MASK;
mbed_official 82:0b31dbcd4769 210 }
mbed_official 82:0b31dbcd4769 211 #if UART_NUM > 1
mbed_official 82:0b31dbcd4769 212 void uart1_irq() {uart_irq(UART1->S1, 1);}
mbed_official 82:0b31dbcd4769 213 void uart2_irq() {uart_irq(UART2->S1, 2);}
mbed_official 82:0b31dbcd4769 214 #endif
mbed_official 82:0b31dbcd4769 215
mbed_official 82:0b31dbcd4769 216 void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) {
mbed_official 82:0b31dbcd4769 217 irq_handler = handler;
mbed_official 82:0b31dbcd4769 218 serial_irq_ids[obj->index] = id;
mbed_official 82:0b31dbcd4769 219 }
mbed_official 82:0b31dbcd4769 220
mbed_official 82:0b31dbcd4769 221 void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) {
mbed_official 82:0b31dbcd4769 222 IRQn_Type irq_n = (IRQn_Type)0;
mbed_official 82:0b31dbcd4769 223 uint32_t vector = 0;
mbed_official 82:0b31dbcd4769 224 switch ((int)obj->uart) {
mbed_official 82:0b31dbcd4769 225 case UART_0: irq_n=UART0_IRQn; vector = (uint32_t)&uart0_irq; break;
mbed_official 82:0b31dbcd4769 226 #if UART_NUM > 1
mbed_official 82:0b31dbcd4769 227 case UART_1: irq_n=UART1_IRQn; vector = (uint32_t)&uart1_irq; break;
mbed_official 82:0b31dbcd4769 228 case UART_2: irq_n=UART2_IRQn; vector = (uint32_t)&uart2_irq; break;
mbed_official 82:0b31dbcd4769 229 #endif
mbed_official 82:0b31dbcd4769 230 }
mbed_official 82:0b31dbcd4769 231
mbed_official 82:0b31dbcd4769 232 if (enable) {
mbed_official 82:0b31dbcd4769 233 switch (irq) {
mbed_official 82:0b31dbcd4769 234 case RxIrq: obj->uart->C2 |= (UARTLP_C2_RIE_MASK); break;
mbed_official 82:0b31dbcd4769 235 case TxIrq: obj->uart->C2 |= (UARTLP_C2_TIE_MASK); break;
mbed_official 82:0b31dbcd4769 236 }
mbed_official 82:0b31dbcd4769 237 NVIC_SetVector(irq_n, vector);
mbed_official 82:0b31dbcd4769 238 NVIC_EnableIRQ(irq_n);
mbed_official 82:0b31dbcd4769 239
mbed_official 82:0b31dbcd4769 240 } else { // disable
mbed_official 82:0b31dbcd4769 241 int all_disabled = 0;
mbed_official 82:0b31dbcd4769 242 SerialIrq other_irq = (irq == RxIrq) ? (TxIrq) : (RxIrq);
mbed_official 82:0b31dbcd4769 243 switch (irq) {
mbed_official 82:0b31dbcd4769 244 case RxIrq: obj->uart->C2 &= ~(UARTLP_C2_RIE_MASK); break;
mbed_official 82:0b31dbcd4769 245 case TxIrq: obj->uart->C2 &= ~(UARTLP_C2_TIE_MASK); break;
mbed_official 82:0b31dbcd4769 246 }
mbed_official 82:0b31dbcd4769 247 switch (other_irq) {
mbed_official 82:0b31dbcd4769 248 case RxIrq: all_disabled = (obj->uart->C2 & (UARTLP_C2_RIE_MASK)) == 0; break;
mbed_official 82:0b31dbcd4769 249 case TxIrq: all_disabled = (obj->uart->C2 & (UARTLP_C2_TIE_MASK)) == 0; break;
mbed_official 82:0b31dbcd4769 250 }
mbed_official 82:0b31dbcd4769 251 if (all_disabled)
mbed_official 82:0b31dbcd4769 252 NVIC_DisableIRQ(irq_n);
mbed_official 82:0b31dbcd4769 253 }
mbed_official 82:0b31dbcd4769 254 }
mbed_official 82:0b31dbcd4769 255
mbed_official 82:0b31dbcd4769 256 /******************************************************************************
mbed_official 82:0b31dbcd4769 257 * READ/WRITE
mbed_official 82:0b31dbcd4769 258 ******************************************************************************/
mbed_official 82:0b31dbcd4769 259 int serial_getc(serial_t *obj) {
mbed_official 82:0b31dbcd4769 260 while (!serial_readable(obj));
mbed_official 82:0b31dbcd4769 261 return obj->uart->D;
mbed_official 82:0b31dbcd4769 262 }
mbed_official 82:0b31dbcd4769 263
mbed_official 82:0b31dbcd4769 264 void serial_putc(serial_t *obj, int c) {
mbed_official 82:0b31dbcd4769 265 while (!serial_writable(obj));
mbed_official 82:0b31dbcd4769 266 obj->uart->D = c;
mbed_official 82:0b31dbcd4769 267 }
mbed_official 82:0b31dbcd4769 268
mbed_official 82:0b31dbcd4769 269 int serial_readable(serial_t *obj) {
mbed_official 82:0b31dbcd4769 270 // check overrun
mbed_official 82:0b31dbcd4769 271 if (obj->uart->S1 & UARTLP_S1_OR_MASK) {
mbed_official 82:0b31dbcd4769 272 obj->uart->S1 |= UARTLP_S1_OR_MASK;
mbed_official 82:0b31dbcd4769 273 }
mbed_official 82:0b31dbcd4769 274 return (obj->uart->S1 & UARTLP_S1_RDRF_MASK);
mbed_official 82:0b31dbcd4769 275 }
mbed_official 82:0b31dbcd4769 276
mbed_official 82:0b31dbcd4769 277 int serial_writable(serial_t *obj) {
mbed_official 82:0b31dbcd4769 278 // check overrun
mbed_official 82:0b31dbcd4769 279 if (obj->uart->S1 & UARTLP_S1_OR_MASK) {
mbed_official 82:0b31dbcd4769 280 obj->uart->S1 |= UARTLP_S1_OR_MASK;
mbed_official 82:0b31dbcd4769 281 }
mbed_official 82:0b31dbcd4769 282 return (obj->uart->S1 & UARTLP_S1_TDRE_MASK);
mbed_official 82:0b31dbcd4769 283 }
mbed_official 82:0b31dbcd4769 284
mbed_official 82:0b31dbcd4769 285 void serial_clear(serial_t *obj) {
mbed_official 82:0b31dbcd4769 286 }
mbed_official 82:0b31dbcd4769 287
mbed_official 82:0b31dbcd4769 288 void serial_pinout_tx(PinName tx) {
mbed_official 82:0b31dbcd4769 289 pinmap_pinout(tx, PinMap_UART_TX);
mbed_official 82:0b31dbcd4769 290 }
mbed_official 82:0b31dbcd4769 291
mbed_official 82:0b31dbcd4769 292 void serial_break_set(serial_t *obj) {
mbed_official 82:0b31dbcd4769 293 obj->uart->C2 |= UARTLP_C2_SBK_MASK;
mbed_official 82:0b31dbcd4769 294 }
mbed_official 82:0b31dbcd4769 295
mbed_official 82:0b31dbcd4769 296 void serial_break_clear(serial_t *obj) {
mbed_official 82:0b31dbcd4769 297 obj->uart->C2 &= ~UARTLP_C2_SBK_MASK;
mbed_official 82:0b31dbcd4769 298 }
mbed_official 82:0b31dbcd4769 299