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:
Mon Oct 07 09:15:08 2013 +0100
Revision:
33:e214068ab66c
Parent:
31:42176bc3c368
Synchronized with git revision 53edc82f7373bbfa01a161700524765f52fdb444

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