Fork of mbed-src file paths change. LPC1114FN28 use only.

Fork of mbed-src by mbed official

Information

この情報は2013/10/28時点での解決方法です。
現在はmbed-src、標準ライブラリで問題なくコンパイルが可能です。

・使う物
LPC1114FN28
mbed SDK

LPC1114FN28でmbed-SDKのLibraryを使うとCompile出来ない。(2013/10/28) /media/uploads/minicube/mbed_lpc1114_sdk.png

パスが通ってないだけのようなのでファイルを以下に移動する。

mbed-src\targets\cmsis\TARGET_NXP\TARGET_LPC11XX_11CXX\
mbed-src\targets\cmsis\TARGET_NXP\TARGET_LPC11XX_11CXX\TARGET_LPC11XX\

にあるファイルをすべて

mbed-src\targets\cmsis\TARGET_NXP\

へ移動

mbed-src\targets\cmsis\TARGET_NXP\TARGET_LPC11XX_11CXX\にある

TOOLCHAIN_ARM_MICRO

をフォルダごと

mbed-src\targets\cmsis\TARGET_NXP\

へ移動

mbed-src\targets\hal\TARGET_NXP\TARGET_LPC11XX_11CXX\
mbed-src\targets\hal\TARGET_NXP\TARGET_LPC11XX_11CXX\TARGET_LPC11XX\

にあるファイルをすべて

mbed-src\targets\hal\TARGET_NXP\

へ移動

移動後は以下のような構成になると思います。
※不要なファイルは削除してあります。

/media/uploads/minicube/mbed_lpc1114_sdk_tree.png


ファイルの移動が面倒なので以下に本家からフォークしたライブラリを置いておきます。

Import librarymbed-src-LPC1114FN28

Fork of mbed-src file paths change. LPC1114FN28 use only.


エラーが出力される場合

"TOOLCHAIN_ARM_MICRO"が無いとエラーになる。

Error: Undefined symbol _initial_sp (referred from entry2.o).
Error: Undefined symbol _heap_base (referred from malloc.o).
Error: Undefined symbol _heap_limit (referred from malloc.o).

LPC1114FN28はMicrolibを使ってCompileされるため上記のエラーになるようです。

Committer:
mbed_official
Date:
Wed Sep 25 11:30:05 2013 +0100
Revision:
31:42176bc3c368
Child:
33:e214068ab66c
Synchronized with git revision f580c008b139a952d38ac5c7c53bbae375739c67

Who changed what in which revision?

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