mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Fri Feb 16 16:09:33 2018 +0000
Revision:
181:57724642e740
Parent:
targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/api/serial_api.c@170:19eb464bc2be
Child:
189:f392fc9709a3
mbed-dev library. Release version 159.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 170:19eb464bc2be 1 /* mbed Microcontroller Library
Kojto 170:19eb464bc2be 2 * Copyright (c) 2006-2013 ARM Limited
Kojto 170:19eb464bc2be 3 *
Kojto 170:19eb464bc2be 4 * Licensed under the Apache License, Version 2.0 (the "License");
Kojto 170:19eb464bc2be 5 * you may not use this file except in compliance with the License.
Kojto 170:19eb464bc2be 6 * You may obtain a copy of the License at
Kojto 170:19eb464bc2be 7 *
Kojto 170:19eb464bc2be 8 * http://www.apache.org/licenses/LICENSE-2.0
Kojto 170:19eb464bc2be 9 *
Kojto 170:19eb464bc2be 10 * Unless required by applicable law or agreed to in writing, software
Kojto 170:19eb464bc2be 11 * distributed under the License is distributed on an "AS IS" BASIS,
Kojto 170:19eb464bc2be 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Kojto 170:19eb464bc2be 13 * See the License for the specific language governing permissions and
Kojto 170:19eb464bc2be 14 * limitations under the License.
Kojto 170:19eb464bc2be 15 */
Kojto 170:19eb464bc2be 16 #include "serial_api.h"
Kojto 170:19eb464bc2be 17
Kojto 170:19eb464bc2be 18 #if DEVICE_SERIAL
Kojto 170:19eb464bc2be 19
Kojto 170:19eb464bc2be 20 // math.h required for floating point operations for baud rate calculation
Kojto 170:19eb464bc2be 21 #include <math.h>
Kojto 170:19eb464bc2be 22 #include "mbed_assert.h"
Kojto 170:19eb464bc2be 23
Kojto 170:19eb464bc2be 24 #include <string.h>
Kojto 170:19eb464bc2be 25
Kojto 170:19eb464bc2be 26 #include "cmsis.h"
Kojto 170:19eb464bc2be 27 #include "pinmap.h"
Kojto 170:19eb464bc2be 28 #include "fsl_usart.h"
Kojto 170:19eb464bc2be 29 #include "PeripheralPins.h"
Kojto 170:19eb464bc2be 30 #include "clock_config.h"
Kojto 170:19eb464bc2be 31
Kojto 170:19eb464bc2be 32 static uint32_t serial_irq_ids[FSL_FEATURE_SOC_USART_COUNT] = {0};
Kojto 170:19eb464bc2be 33 static uart_irq_handler irq_handler;
Kojto 170:19eb464bc2be 34 /* Array of UART peripheral base address. */
Kojto 170:19eb464bc2be 35 static USART_Type *const uart_addrs[] = USART_BASE_PTRS;
Kojto 170:19eb464bc2be 36
Kojto 170:19eb464bc2be 37 int stdio_uart_inited = 0;
Kojto 170:19eb464bc2be 38 serial_t stdio_uart;
Kojto 170:19eb464bc2be 39
Kojto 170:19eb464bc2be 40 void serial_init(serial_t *obj, PinName tx, PinName rx)
Kojto 170:19eb464bc2be 41 {
Kojto 170:19eb464bc2be 42 uint32_t uart_tx = pinmap_peripheral(tx, PinMap_UART_TX);
Kojto 170:19eb464bc2be 43 uint32_t uart_rx = pinmap_peripheral(rx, PinMap_UART_RX);
Kojto 170:19eb464bc2be 44 obj->index = pinmap_merge(uart_tx, uart_rx);
Kojto 170:19eb464bc2be 45 MBED_ASSERT((int)obj->index != NC);
Kojto 170:19eb464bc2be 46
Kojto 170:19eb464bc2be 47 usart_config_t config;
Kojto 170:19eb464bc2be 48
Kojto 170:19eb464bc2be 49 switch (obj->index) {
Kojto 170:19eb464bc2be 50 case 0:
Kojto 170:19eb464bc2be 51 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM0);
Kojto 170:19eb464bc2be 52 RESET_PeripheralReset(kFC0_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 53 break;
Kojto 170:19eb464bc2be 54 case 1:
Kojto 170:19eb464bc2be 55 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM1);
Kojto 170:19eb464bc2be 56 RESET_PeripheralReset(kFC1_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 57 break;
Kojto 170:19eb464bc2be 58 case 2:
Kojto 170:19eb464bc2be 59 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM2);
Kojto 170:19eb464bc2be 60 RESET_PeripheralReset(kFC2_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 61 break;
Kojto 170:19eb464bc2be 62 case 3:
Kojto 170:19eb464bc2be 63 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM3);
Kojto 170:19eb464bc2be 64 RESET_PeripheralReset(kFC3_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 65 break;
Kojto 170:19eb464bc2be 66 case 4:
Kojto 170:19eb464bc2be 67 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM4);
Kojto 170:19eb464bc2be 68 RESET_PeripheralReset(kFC4_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 69 break;
Kojto 170:19eb464bc2be 70 case 5:
Kojto 170:19eb464bc2be 71 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM5);
Kojto 170:19eb464bc2be 72 RESET_PeripheralReset(kFC5_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 73 break;
Kojto 170:19eb464bc2be 74 case 6:
Kojto 170:19eb464bc2be 75 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM6);
Kojto 170:19eb464bc2be 76 RESET_PeripheralReset(kFC6_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 77 break;
Kojto 170:19eb464bc2be 78 case 7:
Kojto 170:19eb464bc2be 79 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM7);
Kojto 170:19eb464bc2be 80 RESET_PeripheralReset(kFC7_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 81 break;
Kojto 170:19eb464bc2be 82 #if (FSL_FEATURE_SOC_FLEXCOMM_COUNT > 8U)
Kojto 170:19eb464bc2be 83 case 8:
Kojto 170:19eb464bc2be 84 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM8);
Kojto 170:19eb464bc2be 85 RESET_PeripheralReset(kFC8_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 86 break;
Kojto 170:19eb464bc2be 87 #endif
Kojto 170:19eb464bc2be 88 #if (FSL_FEATURE_SOC_FLEXCOMM_COUNT > 9U)
Kojto 170:19eb464bc2be 89 case 9:
Kojto 170:19eb464bc2be 90 CLOCK_AttachClk(kFRO12M_to_FLEXCOMM9);
Kojto 170:19eb464bc2be 91 RESET_PeripheralReset(kFC9_RST_SHIFT_RSTn);
Kojto 170:19eb464bc2be 92 break;
Kojto 170:19eb464bc2be 93 #endif
Kojto 170:19eb464bc2be 94 }
Kojto 170:19eb464bc2be 95
Kojto 170:19eb464bc2be 96 USART_GetDefaultConfig(&config);
Kojto 170:19eb464bc2be 97 config.baudRate_Bps = 9600;
Kojto 170:19eb464bc2be 98 config.enableTx = true;
Kojto 170:19eb464bc2be 99 config.enableRx = true;
Kojto 170:19eb464bc2be 100
Kojto 170:19eb464bc2be 101 USART_Init(uart_addrs[obj->index], &config, 12000000);
Kojto 170:19eb464bc2be 102
Kojto 170:19eb464bc2be 103 pinmap_pinout(tx, PinMap_UART_TX);
Kojto 170:19eb464bc2be 104 pinmap_pinout(rx, PinMap_UART_RX);
Kojto 170:19eb464bc2be 105
Kojto 170:19eb464bc2be 106 if (tx != NC) {
Kojto 170:19eb464bc2be 107 pin_mode(tx, PullUp);
Kojto 170:19eb464bc2be 108 }
Kojto 170:19eb464bc2be 109 if (rx != NC) {
Kojto 170:19eb464bc2be 110 pin_mode(rx, PullUp);
Kojto 170:19eb464bc2be 111 }
Kojto 170:19eb464bc2be 112
Kojto 170:19eb464bc2be 113 if (obj->index == STDIO_UART) {
Kojto 170:19eb464bc2be 114 stdio_uart_inited = 1;
Kojto 170:19eb464bc2be 115 memcpy(&stdio_uart, obj, sizeof(serial_t));
Kojto 170:19eb464bc2be 116 }
Kojto 170:19eb464bc2be 117 }
Kojto 170:19eb464bc2be 118
Kojto 170:19eb464bc2be 119 void serial_free(serial_t *obj)
Kojto 170:19eb464bc2be 120 {
Kojto 170:19eb464bc2be 121 USART_Deinit(uart_addrs[obj->index]);
Kojto 170:19eb464bc2be 122 serial_irq_ids[obj->index] = 0;
Kojto 170:19eb464bc2be 123 }
Kojto 170:19eb464bc2be 124
Kojto 170:19eb464bc2be 125 void serial_baud(serial_t *obj, int baudrate)
Kojto 170:19eb464bc2be 126 {
Kojto 170:19eb464bc2be 127 USART_SetBaudRate(uart_addrs[obj->index], (uint32_t)baudrate, 12000000);
Kojto 170:19eb464bc2be 128 }
Kojto 170:19eb464bc2be 129
Kojto 170:19eb464bc2be 130 void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits)
Kojto 170:19eb464bc2be 131 {
Kojto 170:19eb464bc2be 132 USART_Type *base = uart_addrs[obj->index];
Kojto 170:19eb464bc2be 133 uint8_t temp;
Kojto 170:19eb464bc2be 134
Kojto 170:19eb464bc2be 135 /* Set bit count and parity mode. */
Kojto 170:19eb464bc2be 136 temp = base->CFG & ~(USART_CFG_PARITYSEL_MASK | USART_CFG_DATALEN_MASK | USART_CFG_STOPLEN_MASK);
Kojto 170:19eb464bc2be 137
Kojto 170:19eb464bc2be 138 if (parity != ParityNone)
Kojto 170:19eb464bc2be 139 {
Kojto 170:19eb464bc2be 140 /* Enable Parity */
Kojto 170:19eb464bc2be 141 if (parity == ParityOdd) {
Kojto 170:19eb464bc2be 142 temp |= USART_CFG_PARITYSEL(3U);
Kojto 170:19eb464bc2be 143 } else if (parity == ParityEven) {
Kojto 170:19eb464bc2be 144 temp |= USART_CFG_PARITYSEL(2U);
Kojto 170:19eb464bc2be 145 } else {
Kojto 170:19eb464bc2be 146 // Hardware does not support forced parity
Kojto 170:19eb464bc2be 147 MBED_ASSERT(0);
Kojto 170:19eb464bc2be 148 }
Kojto 170:19eb464bc2be 149 }
Kojto 170:19eb464bc2be 150
Kojto 170:19eb464bc2be 151 /* Set stop bits */
Kojto 170:19eb464bc2be 152 if (stop_bits == 2) {
Kojto 170:19eb464bc2be 153 temp |= USART_CFG_STOPLEN(1U);
Kojto 170:19eb464bc2be 154 }
Kojto 170:19eb464bc2be 155
Kojto 170:19eb464bc2be 156 /* Set Data size */
Kojto 170:19eb464bc2be 157 if (data_bits == 8) {
Kojto 170:19eb464bc2be 158 temp |= USART_CFG_DATALEN(1U);
Kojto 170:19eb464bc2be 159 } else {
Kojto 170:19eb464bc2be 160 temp |= USART_CFG_DATALEN(2U);
Kojto 170:19eb464bc2be 161 }
Kojto 170:19eb464bc2be 162
Kojto 170:19eb464bc2be 163 base->CFG = temp;
Kojto 170:19eb464bc2be 164 }
Kojto 170:19eb464bc2be 165
Kojto 170:19eb464bc2be 166 /******************************************************************************
Kojto 170:19eb464bc2be 167 * INTERRUPTS HANDLING
Kojto 170:19eb464bc2be 168 ******************************************************************************/
Kojto 170:19eb464bc2be 169 static inline void uart_irq(uint32_t transmit_empty, uint32_t receive_full, uint32_t index)
Kojto 170:19eb464bc2be 170 {
Kojto 170:19eb464bc2be 171 if (serial_irq_ids[index] != 0) {
Kojto 170:19eb464bc2be 172 if (transmit_empty)
Kojto 170:19eb464bc2be 173 irq_handler(serial_irq_ids[index], TxIrq);
Kojto 170:19eb464bc2be 174
Kojto 170:19eb464bc2be 175 if (receive_full)
Kojto 170:19eb464bc2be 176 irq_handler(serial_irq_ids[index], RxIrq);
Kojto 170:19eb464bc2be 177 }
Kojto 170:19eb464bc2be 178 }
Kojto 170:19eb464bc2be 179
Kojto 170:19eb464bc2be 180 void uart0_irq()
Kojto 170:19eb464bc2be 181 {
Kojto 170:19eb464bc2be 182 uint32_t status_flags = USART0->FIFOSTAT;
Kojto 170:19eb464bc2be 183 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 0);
Kojto 170:19eb464bc2be 184 }
Kojto 170:19eb464bc2be 185
Kojto 170:19eb464bc2be 186 void uart1_irq()
Kojto 170:19eb464bc2be 187 {
Kojto 170:19eb464bc2be 188 uint32_t status_flags = USART1->FIFOSTAT;
Kojto 170:19eb464bc2be 189 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 1);
Kojto 170:19eb464bc2be 190 }
Kojto 170:19eb464bc2be 191
Kojto 170:19eb464bc2be 192 void uart2_irq()
Kojto 170:19eb464bc2be 193 {
Kojto 170:19eb464bc2be 194 uint32_t status_flags = USART2->FIFOSTAT;
Kojto 170:19eb464bc2be 195 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 2);
Kojto 170:19eb464bc2be 196 }
Kojto 170:19eb464bc2be 197
Kojto 170:19eb464bc2be 198 void uart3_irq()
Kojto 170:19eb464bc2be 199 {
Kojto 170:19eb464bc2be 200 uint32_t status_flags = USART3->FIFOSTAT;
Kojto 170:19eb464bc2be 201 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 3);
Kojto 170:19eb464bc2be 202 }
Kojto 170:19eb464bc2be 203
Kojto 170:19eb464bc2be 204 void uart4_irq()
Kojto 170:19eb464bc2be 205 {
Kojto 170:19eb464bc2be 206 uint32_t status_flags = USART4->FIFOSTAT;
Kojto 170:19eb464bc2be 207 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 4);
Kojto 170:19eb464bc2be 208 }
Kojto 170:19eb464bc2be 209
Kojto 170:19eb464bc2be 210 void uart5_irq()
Kojto 170:19eb464bc2be 211 {
Kojto 170:19eb464bc2be 212 uint32_t status_flags = USART5->FIFOSTAT;
Kojto 170:19eb464bc2be 213 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 5);
Kojto 170:19eb464bc2be 214 }
Kojto 170:19eb464bc2be 215
Kojto 170:19eb464bc2be 216 void uart6_irq()
Kojto 170:19eb464bc2be 217 {
Kojto 170:19eb464bc2be 218 uint32_t status_flags = USART6->FIFOSTAT;
Kojto 170:19eb464bc2be 219 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 6);
Kojto 170:19eb464bc2be 220 }
Kojto 170:19eb464bc2be 221
Kojto 170:19eb464bc2be 222 void uart7_irq()
Kojto 170:19eb464bc2be 223 {
Kojto 170:19eb464bc2be 224 uint32_t status_flags = USART7->FIFOSTAT;
Kojto 170:19eb464bc2be 225 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 7);
Kojto 170:19eb464bc2be 226 }
Kojto 170:19eb464bc2be 227
Kojto 170:19eb464bc2be 228 #if (FSL_FEATURE_SOC_FLEXCOMM_COUNT > 8U)
Kojto 170:19eb464bc2be 229 void uart8_irq()
Kojto 170:19eb464bc2be 230 {
Kojto 170:19eb464bc2be 231 uint32_t status_flags = USART8->FIFOSTAT;
Kojto 170:19eb464bc2be 232 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 8);
Kojto 170:19eb464bc2be 233 }
Kojto 170:19eb464bc2be 234 #endif
Kojto 170:19eb464bc2be 235
Kojto 170:19eb464bc2be 236 #if (FSL_FEATURE_SOC_FLEXCOMM_COUNT > 9U)
Kojto 170:19eb464bc2be 237 void uart9_irq()
Kojto 170:19eb464bc2be 238 {
Kojto 170:19eb464bc2be 239 uint32_t status_flags = USART9->FIFOSTAT;
Kojto 170:19eb464bc2be 240 uart_irq((status_flags & kUSART_TxFifoEmptyFlag), (status_flags & kUSART_RxFifoFullFlag), 9);
Kojto 170:19eb464bc2be 241 }
Kojto 170:19eb464bc2be 242 #endif
Kojto 170:19eb464bc2be 243
Kojto 170:19eb464bc2be 244 void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id)
Kojto 170:19eb464bc2be 245 {
Kojto 170:19eb464bc2be 246 irq_handler = handler;
Kojto 170:19eb464bc2be 247 serial_irq_ids[obj->index] = id;
Kojto 170:19eb464bc2be 248 }
Kojto 170:19eb464bc2be 249
Kojto 170:19eb464bc2be 250 void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
Kojto 170:19eb464bc2be 251 {
Kojto 170:19eb464bc2be 252 IRQn_Type uart_irqs[] = USART_IRQS;
Kojto 170:19eb464bc2be 253 uint32_t vector = 0;
Kojto 170:19eb464bc2be 254
Kojto 170:19eb464bc2be 255 switch (obj->index) {
Kojto 170:19eb464bc2be 256 case 0:
Kojto 170:19eb464bc2be 257 vector = (uint32_t)&uart0_irq;
Kojto 170:19eb464bc2be 258 break;
Kojto 170:19eb464bc2be 259 case 1:
Kojto 170:19eb464bc2be 260 vector = (uint32_t)&uart1_irq;
Kojto 170:19eb464bc2be 261 break;
Kojto 170:19eb464bc2be 262 case 2:
Kojto 170:19eb464bc2be 263 vector = (uint32_t)&uart2_irq;
Kojto 170:19eb464bc2be 264 break;
Kojto 170:19eb464bc2be 265 case 3:
Kojto 170:19eb464bc2be 266 vector = (uint32_t)&uart3_irq;
Kojto 170:19eb464bc2be 267 break;
Kojto 170:19eb464bc2be 268 case 4:
Kojto 170:19eb464bc2be 269 vector = (uint32_t)&uart4_irq;
Kojto 170:19eb464bc2be 270 break;
Kojto 170:19eb464bc2be 271 case 5:
Kojto 170:19eb464bc2be 272 vector = (uint32_t)&uart5_irq;
Kojto 170:19eb464bc2be 273 break;
Kojto 170:19eb464bc2be 274 case 6:
Kojto 170:19eb464bc2be 275 vector = (uint32_t)&uart6_irq;
Kojto 170:19eb464bc2be 276 break;
Kojto 170:19eb464bc2be 277 case 7:
Kojto 170:19eb464bc2be 278 vector = (uint32_t)&uart7_irq;
Kojto 170:19eb464bc2be 279 break;
Kojto 170:19eb464bc2be 280 #if (FSL_FEATURE_SOC_FLEXCOMM_COUNT > 8U)
Kojto 170:19eb464bc2be 281 case 8:
Kojto 170:19eb464bc2be 282 vector = (uint32_t)&uart8_irq;
Kojto 170:19eb464bc2be 283 break;
Kojto 170:19eb464bc2be 284 #endif
Kojto 170:19eb464bc2be 285 #if (FSL_FEATURE_SOC_FLEXCOMM_COUNT > 9U)
Kojto 170:19eb464bc2be 286 case 9:
Kojto 170:19eb464bc2be 287 vector = (uint32_t)&uart9_irq;
Kojto 170:19eb464bc2be 288 break;
Kojto 170:19eb464bc2be 289 #endif
Kojto 170:19eb464bc2be 290 default:
Kojto 170:19eb464bc2be 291 break;
Kojto 170:19eb464bc2be 292 }
Kojto 170:19eb464bc2be 293
Kojto 170:19eb464bc2be 294 if (enable) {
Kojto 170:19eb464bc2be 295 switch (irq) {
Kojto 170:19eb464bc2be 296 case RxIrq:
Kojto 170:19eb464bc2be 297 USART_EnableInterrupts(uart_addrs[obj->index], kUSART_RxLevelInterruptEnable);
Kojto 170:19eb464bc2be 298 break;
Kojto 170:19eb464bc2be 299 case TxIrq:
Kojto 170:19eb464bc2be 300 USART_EnableInterrupts(uart_addrs[obj->index], kUSART_TxLevelInterruptEnable);
Kojto 170:19eb464bc2be 301 break;
Kojto 170:19eb464bc2be 302 default:
Kojto 170:19eb464bc2be 303 break;
Kojto 170:19eb464bc2be 304 }
Kojto 170:19eb464bc2be 305 NVIC_SetVector(uart_irqs[obj->index], vector);
Kojto 170:19eb464bc2be 306 NVIC_EnableIRQ(uart_irqs[obj->index]);
Kojto 170:19eb464bc2be 307
Kojto 170:19eb464bc2be 308 } else { // disable
Kojto 170:19eb464bc2be 309 int all_disabled = 0;
Kojto 170:19eb464bc2be 310 SerialIrq other_irq = (irq == RxIrq) ? (TxIrq) : (RxIrq);
Kojto 170:19eb464bc2be 311 switch (irq) {
Kojto 170:19eb464bc2be 312 case RxIrq:
Kojto 170:19eb464bc2be 313 USART_DisableInterrupts(uart_addrs[obj->index], kUSART_RxLevelInterruptEnable);
Kojto 170:19eb464bc2be 314 break;
Kojto 170:19eb464bc2be 315 case TxIrq:
Kojto 170:19eb464bc2be 316 USART_DisableInterrupts(uart_addrs[obj->index], kUSART_TxLevelInterruptEnable);
Kojto 170:19eb464bc2be 317 break;
Kojto 170:19eb464bc2be 318 default:
Kojto 170:19eb464bc2be 319 break;
Kojto 170:19eb464bc2be 320 }
Kojto 170:19eb464bc2be 321 switch (other_irq) {
Kojto 170:19eb464bc2be 322 case RxIrq:
Kojto 170:19eb464bc2be 323 all_disabled = (((uart_addrs[obj->index]->FIFOINTENSET) & kUSART_RxLevelInterruptEnable) == 0);
Kojto 170:19eb464bc2be 324 break;
Kojto 170:19eb464bc2be 325 case TxIrq:
Kojto 170:19eb464bc2be 326 all_disabled = (((uart_addrs[obj->index]->FIFOINTENSET) & kUSART_TxLevelInterruptEnable)== 0);
Kojto 170:19eb464bc2be 327 break;
Kojto 170:19eb464bc2be 328 default:
Kojto 170:19eb464bc2be 329 break;
Kojto 170:19eb464bc2be 330 }
Kojto 170:19eb464bc2be 331 if (all_disabled)
Kojto 170:19eb464bc2be 332 NVIC_DisableIRQ(uart_irqs[obj->index]);
Kojto 170:19eb464bc2be 333 }
Kojto 170:19eb464bc2be 334 }
Kojto 170:19eb464bc2be 335
Kojto 170:19eb464bc2be 336 int serial_getc(serial_t *obj)
Kojto 170:19eb464bc2be 337 {
Kojto 170:19eb464bc2be 338 while (!serial_readable(obj));
Kojto 170:19eb464bc2be 339 uint8_t data;
Kojto 170:19eb464bc2be 340 data = USART_ReadByte(uart_addrs[obj->index]);
Kojto 170:19eb464bc2be 341
Kojto 170:19eb464bc2be 342 return data;
Kojto 170:19eb464bc2be 343 }
Kojto 170:19eb464bc2be 344
Kojto 170:19eb464bc2be 345 void serial_putc(serial_t *obj, int c)
Kojto 170:19eb464bc2be 346 {
Kojto 170:19eb464bc2be 347 while (!serial_writable(obj));
Kojto 170:19eb464bc2be 348 USART_WriteByte(uart_addrs[obj->index], (uint8_t)c);
Kojto 170:19eb464bc2be 349 }
Kojto 170:19eb464bc2be 350
Kojto 170:19eb464bc2be 351 int serial_readable(serial_t *obj)
Kojto 170:19eb464bc2be 352 {
Kojto 170:19eb464bc2be 353 uint32_t status_flags = USART_GetStatusFlags(uart_addrs[obj->index]);
Kojto 170:19eb464bc2be 354
Kojto 170:19eb464bc2be 355 return (status_flags & kUSART_RxFifoNotEmptyFlag);
Kojto 170:19eb464bc2be 356 }
Kojto 170:19eb464bc2be 357
Kojto 170:19eb464bc2be 358 int serial_writable(serial_t *obj)
Kojto 170:19eb464bc2be 359 {
Kojto 170:19eb464bc2be 360 uint32_t status_flags = USART_GetStatusFlags(uart_addrs[obj->index]);
Kojto 170:19eb464bc2be 361
Kojto 170:19eb464bc2be 362 return (status_flags & kUSART_TxFifoNotFullFlag);
Kojto 170:19eb464bc2be 363 }
Kojto 170:19eb464bc2be 364
Kojto 170:19eb464bc2be 365 void serial_clear(serial_t *obj)
Kojto 170:19eb464bc2be 366 {
Kojto 170:19eb464bc2be 367 }
Kojto 170:19eb464bc2be 368
Kojto 170:19eb464bc2be 369 void serial_pinout_tx(PinName tx)
Kojto 170:19eb464bc2be 370 {
Kojto 170:19eb464bc2be 371 pinmap_pinout(tx, PinMap_UART_TX);
Kojto 170:19eb464bc2be 372 }
Kojto 170:19eb464bc2be 373
Kojto 170:19eb464bc2be 374 void serial_break_set(serial_t *obj)
Kojto 170:19eb464bc2be 375 {
Kojto 170:19eb464bc2be 376 uart_addrs[obj->index]->CTL |= USART_CTL_TXBRKEN_MASK;
Kojto 170:19eb464bc2be 377 }
Kojto 170:19eb464bc2be 378
Kojto 170:19eb464bc2be 379 void serial_break_clear(serial_t *obj)
Kojto 170:19eb464bc2be 380 {
Kojto 170:19eb464bc2be 381 uart_addrs[obj->index]->CTL &= ~USART_CTL_TXBRKEN_MASK;
Kojto 170:19eb464bc2be 382 }
Kojto 170:19eb464bc2be 383
Kojto 170:19eb464bc2be 384 #endif