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

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /**
AnnaBridge 171:3a7713b1edbc 2 * @file
AnnaBridge 171:3a7713b1edbc 3 * @brief UART data types, definitions and function prototypes.
AnnaBridge 171:3a7713b1edbc 4 */
AnnaBridge 171:3a7713b1edbc 5 /* ****************************************************************************
AnnaBridge 171:3a7713b1edbc 6 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
AnnaBridge 171:3a7713b1edbc 7 *
AnnaBridge 171:3a7713b1edbc 8 * Permission is hereby granted, free of charge, to any person obtaining a
AnnaBridge 171:3a7713b1edbc 9 * copy of this software and associated documentation files (the "Software"),
AnnaBridge 171:3a7713b1edbc 10 * to deal in the Software without restriction, including without limitation
AnnaBridge 171:3a7713b1edbc 11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
AnnaBridge 171:3a7713b1edbc 12 * and/or sell copies of the Software, and to permit persons to whom the
AnnaBridge 171:3a7713b1edbc 13 * Software is furnished to do so, subject to the following conditions:
AnnaBridge 171:3a7713b1edbc 14 *
AnnaBridge 171:3a7713b1edbc 15 * The above copyright notice and this permission notice shall be included
AnnaBridge 171:3a7713b1edbc 16 * in all copies or substantial portions of the Software.
AnnaBridge 171:3a7713b1edbc 17 *
AnnaBridge 171:3a7713b1edbc 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
AnnaBridge 171:3a7713b1edbc 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
AnnaBridge 171:3a7713b1edbc 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
AnnaBridge 171:3a7713b1edbc 21 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
AnnaBridge 171:3a7713b1edbc 22 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
AnnaBridge 171:3a7713b1edbc 23 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
AnnaBridge 171:3a7713b1edbc 24 * OTHER DEALINGS IN THE SOFTWARE.
AnnaBridge 171:3a7713b1edbc 25 *
AnnaBridge 171:3a7713b1edbc 26 * Except as contained in this notice, the name of Maxim Integrated
AnnaBridge 171:3a7713b1edbc 27 * Products, Inc. shall not be used except as stated in the Maxim Integrated
AnnaBridge 171:3a7713b1edbc 28 * Products, Inc. Branding Policy.
AnnaBridge 171:3a7713b1edbc 29 *
AnnaBridge 171:3a7713b1edbc 30 * The mere transfer of this software does not imply any licenses
AnnaBridge 171:3a7713b1edbc 31 * of trade secrets, proprietary technology, copyrights, patents,
AnnaBridge 171:3a7713b1edbc 32 * trademarks, maskwork rights, or any other form of intellectual
AnnaBridge 171:3a7713b1edbc 33 * property whatsoever. Maxim Integrated Products, Inc. retains all
AnnaBridge 171:3a7713b1edbc 34 * ownership rights.
AnnaBridge 171:3a7713b1edbc 35 *
AnnaBridge 171:3a7713b1edbc 36 * $Date: 2016-10-10 19:51:14 -0500 (Mon, 10 Oct 2016) $
AnnaBridge 171:3a7713b1edbc 37 * $Revision: 24676 $
AnnaBridge 171:3a7713b1edbc 38 *
AnnaBridge 171:3a7713b1edbc 39 **************************************************************************** */
AnnaBridge 171:3a7713b1edbc 40
AnnaBridge 171:3a7713b1edbc 41
AnnaBridge 171:3a7713b1edbc 42 /* **** Includes **** */
AnnaBridge 171:3a7713b1edbc 43 #include "mxc_config.h"
AnnaBridge 171:3a7713b1edbc 44 #include "mxc_sys.h"
AnnaBridge 171:3a7713b1edbc 45 #include "uart_regs.h"
AnnaBridge 171:3a7713b1edbc 46
AnnaBridge 171:3a7713b1edbc 47 /* Define to prevent redundant inclusion */
AnnaBridge 171:3a7713b1edbc 48 #ifndef _UART_H_
AnnaBridge 171:3a7713b1edbc 49 #define _UART_H_
AnnaBridge 171:3a7713b1edbc 50
AnnaBridge 171:3a7713b1edbc 51 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 52 extern "C" {
AnnaBridge 171:3a7713b1edbc 53 #endif
AnnaBridge 171:3a7713b1edbc 54
AnnaBridge 171:3a7713b1edbc 55 /**
AnnaBridge 171:3a7713b1edbc 56 * @ingroup commperipherals
AnnaBridge 171:3a7713b1edbc 57 * @defgroup uart_comm UART
AnnaBridge 171:3a7713b1edbc 58 * @brief UART serial communications peripheral.
AnnaBridge 171:3a7713b1edbc 59 * @{
AnnaBridge 171:3a7713b1edbc 60 */
AnnaBridge 171:3a7713b1edbc 61
AnnaBridge 171:3a7713b1edbc 62 /* **** Definitions **** */
AnnaBridge 171:3a7713b1edbc 63
AnnaBridge 171:3a7713b1edbc 64 /**
AnnaBridge 171:3a7713b1edbc 65 * Enumeration type for defining the number of bits per character.
AnnaBridge 171:3a7713b1edbc 66 */
AnnaBridge 171:3a7713b1edbc 67 typedef enum {
AnnaBridge 171:3a7713b1edbc 68 UART_DATA_SIZE_5_BITS = MXC_V_UART_CTRL_DATA_SIZE_5_BITS,
AnnaBridge 171:3a7713b1edbc 69 UART_DATA_SIZE_6_BITS = MXC_V_UART_CTRL_DATA_SIZE_6_BITS,
AnnaBridge 171:3a7713b1edbc 70 UART_DATA_SIZE_7_BITS = MXC_V_UART_CTRL_DATA_SIZE_7_BITS,
AnnaBridge 171:3a7713b1edbc 71 UART_DATA_SIZE_8_BITS = MXC_V_UART_CTRL_DATA_SIZE_8_BITS
AnnaBridge 171:3a7713b1edbc 72 }
AnnaBridge 171:3a7713b1edbc 73 uart_data_size_t;
AnnaBridge 171:3a7713b1edbc 74
AnnaBridge 171:3a7713b1edbc 75 /**
AnnaBridge 171:3a7713b1edbc 76 * Enumeration type for selecting Parity and type.
AnnaBridge 171:3a7713b1edbc 77 */
AnnaBridge 171:3a7713b1edbc 78 typedef enum {
AnnaBridge 171:3a7713b1edbc 79 UART_PARITY_DISABLE = MXC_V_UART_CTRL_PARITY_DISABLE,
AnnaBridge 171:3a7713b1edbc 80 UART_PARITY_ODD = MXC_V_UART_CTRL_PARITY_ODD,
AnnaBridge 171:3a7713b1edbc 81 UART_PARITY_EVEN = MXC_V_UART_CTRL_PARITY_EVEN,
AnnaBridge 171:3a7713b1edbc 82 UART_PARITY_MARK = MXC_V_UART_CTRL_PARITY_MARK
AnnaBridge 171:3a7713b1edbc 83 } uart_parity_t;
AnnaBridge 171:3a7713b1edbc 84
AnnaBridge 171:3a7713b1edbc 85 /**
AnnaBridge 171:3a7713b1edbc 86 * Configuration structure type for a UART port.
AnnaBridge 171:3a7713b1edbc 87 */
AnnaBridge 171:3a7713b1edbc 88 typedef struct {
AnnaBridge 171:3a7713b1edbc 89 uint8_t extra_stop; /**< Number of stop bits.
AnnaBridge 171:3a7713b1edbc 90 * @li 0 for one stop bit
AnnaBridge 171:3a7713b1edbc 91 * @li 1 for two stop bits
AnnaBridge 171:3a7713b1edbc 92 */
AnnaBridge 171:3a7713b1edbc 93 uint8_t cts; /**< CTS Enable/Disable.
AnnaBridge 171:3a7713b1edbc 94 * @li 1 to enable CTS
AnnaBridge 171:3a7713b1edbc 95 * @li 0 to disable CTS
AnnaBridge 171:3a7713b1edbc 96 */
AnnaBridge 171:3a7713b1edbc 97 uint8_t rts; /**< RTS Enable/Disable.
AnnaBridge 171:3a7713b1edbc 98 * @li 1 to enable RTS
AnnaBridge 171:3a7713b1edbc 99 * @li 0 to disable RTS
AnnaBridge 171:3a7713b1edbc 100 */
AnnaBridge 171:3a7713b1edbc 101 uint32_t baud; /**< Baud rate in Hz. */
AnnaBridge 171:3a7713b1edbc 102 uart_data_size_t size; /**< Set the number of bits per character, see #uart_data_size_t. */
AnnaBridge 171:3a7713b1edbc 103 uart_parity_t parity; /**< Set the parity, see #uart_parity_t for supported parity types. */
AnnaBridge 171:3a7713b1edbc 104 } uart_cfg_t;
AnnaBridge 171:3a7713b1edbc 105
AnnaBridge 171:3a7713b1edbc 106 /**
AnnaBridge 171:3a7713b1edbc 107 * Structure type for a UART asynchronous transaction request.
AnnaBridge 171:3a7713b1edbc 108 */
AnnaBridge 171:3a7713b1edbc 109 typedef struct uart_req uart_req_t;
AnnaBridge 171:3a7713b1edbc 110
AnnaBridge 171:3a7713b1edbc 111 /**
AnnaBridge 171:3a7713b1edbc 112 * @brief Type alias \c uart_async_callback for a callback function with signature of: \code void callback)(uart_req_t* , int error_code) \endcode
AnnaBridge 171:3a7713b1edbc 113 * @param uart_req_t* Pointer to the transaction request.
AnnaBridge 171:3a7713b1edbc 114 * @param error_code Return code for the UART request. @see mxc_errors.h.
AnnaBridge 171:3a7713b1edbc 115 * @addtogroup uart_async
AnnaBridge 171:3a7713b1edbc 116 */
AnnaBridge 171:3a7713b1edbc 117 typedef void (*uart_async_callback)(uart_req_t*, int);
AnnaBridge 171:3a7713b1edbc 118
AnnaBridge 171:3a7713b1edbc 119 /**
AnnaBridge 171:3a7713b1edbc 120 * Structure for a UART asynchronous transaction request.
AnnaBridge 171:3a7713b1edbc 121 * @note When using this structure for an asynchronous operation, the
AnnaBridge 171:3a7713b1edbc 122 * structure must remain allocated until the callback is completed.
AnnaBridge 171:3a7713b1edbc 123 * @addtogroup uart_async
AnnaBridge 171:3a7713b1edbc 124 */
AnnaBridge 171:3a7713b1edbc 125 struct uart_req {
AnnaBridge 171:3a7713b1edbc 126 uint8_t *data; /**< Data buffer for characters. */
AnnaBridge 171:3a7713b1edbc 127 unsigned len; /**< Length of characters in data to send or receive. */
AnnaBridge 171:3a7713b1edbc 128 unsigned num; /**< Number of characters actually sent or received. */
AnnaBridge 171:3a7713b1edbc 129 uart_async_callback callback; /**< Pointer to a callback function of type uart_async_callback(). */
AnnaBridge 171:3a7713b1edbc 130 };
AnnaBridge 171:3a7713b1edbc 131
AnnaBridge 171:3a7713b1edbc 132
AnnaBridge 171:3a7713b1edbc 133 /* **** Globals **** */
AnnaBridge 171:3a7713b1edbc 134
AnnaBridge 171:3a7713b1edbc 135 /* **** Function Prototypes **** */
AnnaBridge 171:3a7713b1edbc 136
AnnaBridge 171:3a7713b1edbc 137 /**
AnnaBridge 171:3a7713b1edbc 138 * @brief Initialize and enable UART module.
AnnaBridge 171:3a7713b1edbc 139 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 140 * @param cfg Pointer to UART configuration.
AnnaBridge 171:3a7713b1edbc 141 * @param sys_cfg Pointer to system configuration object
AnnaBridge 171:3a7713b1edbc 142 * @returns #E_NO_ERROR UART initialized successfully, @ref MXC_Error_Codes "error" if
AnnaBridge 171:3a7713b1edbc 143 * unsuccessful.
AnnaBridge 171:3a7713b1edbc 144 */
AnnaBridge 171:3a7713b1edbc 145 int UART_Init(mxc_uart_regs_t *uart, const uart_cfg_t *cfg, const sys_cfg_uart_t *sys_cfg);
AnnaBridge 171:3a7713b1edbc 146
AnnaBridge 171:3a7713b1edbc 147 /**
AnnaBridge 171:3a7713b1edbc 148 * @brief Shutdown UART module.
AnnaBridge 171:3a7713b1edbc 149 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 150 * @returns #E_NO_ERROR UART shutdown successfully, @ref MXC_Error_Codes "error" if
AnnaBridge 171:3a7713b1edbc 151 * unsuccessful.
AnnaBridge 171:3a7713b1edbc 152 */
AnnaBridge 171:3a7713b1edbc 153 int UART_Shutdown(mxc_uart_regs_t *uart);
AnnaBridge 171:3a7713b1edbc 154
AnnaBridge 171:3a7713b1edbc 155 /**
AnnaBridge 171:3a7713b1edbc 156 * @brief Write UART data. This function blocks until the write transaction
AnnaBridge 171:3a7713b1edbc 157 * is complete.
AnnaBridge 171:3a7713b1edbc 158 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 159 * @param data Pointer to buffer for write data.
AnnaBridge 171:3a7713b1edbc 160 * @param len Number of bytes to write.
AnnaBridge 171:3a7713b1edbc 161 * @note Will return once data has been put into FIFO, not necessarily
AnnaBridge 171:3a7713b1edbc 162 * transmitted.
AnnaBridge 171:3a7713b1edbc 163 * @return Number of bytes written if successful, error if unsuccessful.
AnnaBridge 171:3a7713b1edbc 164 */
AnnaBridge 171:3a7713b1edbc 165 int UART_Write(mxc_uart_regs_t *uart, uint8_t* data, int len);
AnnaBridge 171:3a7713b1edbc 166
AnnaBridge 171:3a7713b1edbc 167 /**
AnnaBridge 171:3a7713b1edbc 168 * @brief Read UART data, <em>blocking</em> until transaction is complete.
AnnaBridge 171:3a7713b1edbc 169 *
AnnaBridge 171:3a7713b1edbc 170 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 171 * @param data Pointer to buffer to save the data read.
AnnaBridge 171:3a7713b1edbc 172 * @param len Number of bytes to read.
AnnaBridge 171:3a7713b1edbc 173 * @param num Pointer to store the number of bytes actually read, pass NULL if not needed.
AnnaBridge 171:3a7713b1edbc 174 *
AnnaBridge 171:3a7713b1edbc 175 * @return Number of bytes read, @ref MXC_Error_Codes "error" if
AnnaBridge 171:3a7713b1edbc 176 * unsuccessful.
AnnaBridge 171:3a7713b1edbc 177 */
AnnaBridge 171:3a7713b1edbc 178 int UART_Read(mxc_uart_regs_t *uart, uint8_t* data, int len, int *num);
AnnaBridge 171:3a7713b1edbc 179
AnnaBridge 171:3a7713b1edbc 180 /**
AnnaBridge 171:3a7713b1edbc 181 * @ingroup uart_comm
AnnaBridge 171:3a7713b1edbc 182 * @defgroup uart_async UART Asynchronous Functions
AnnaBridge 171:3a7713b1edbc 183 */
AnnaBridge 171:3a7713b1edbc 184
AnnaBridge 171:3a7713b1edbc 185 /**
AnnaBridge 171:3a7713b1edbc 186 * @brief Asynchronously write/transmit data to the UART.
AnnaBridge 171:3a7713b1edbc 187 *
AnnaBridge 171:3a7713b1edbc 188 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 189 * @param req Request for a UART transaction.
AnnaBridge 171:3a7713b1edbc 190 * @note Request struct must remain allocated until callback.
AnnaBridge 171:3a7713b1edbc 191 *
AnnaBridge 171:3a7713b1edbc 192 * @return #E_NO_ERROR Asynchronous write successfully started, @ref
AnnaBridge 171:3a7713b1edbc 193 * MXC_Error_Codes "error" if unsuccessful.
AnnaBridge 171:3a7713b1edbc 194 * @addtogroup uart_async
AnnaBridge 171:3a7713b1edbc 195 */
AnnaBridge 171:3a7713b1edbc 196 int UART_WriteAsync(mxc_uart_regs_t *uart, uart_req_t *req);
AnnaBridge 171:3a7713b1edbc 197
AnnaBridge 171:3a7713b1edbc 198 /**
AnnaBridge 171:3a7713b1edbc 199 * @brief Asynchronously Read UART data.
AnnaBridge 171:3a7713b1edbc 200 *
AnnaBridge 171:3a7713b1edbc 201 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 202 * @param req Pointer to request for a UART transaction.
AnnaBridge 171:3a7713b1edbc 203 * @note Request struct must remain allocated until callback function is called.
AnnaBridge 171:3a7713b1edbc 204 *
AnnaBridge 171:3a7713b1edbc 205 * @return #E_NO_ERROR Asynchronous read successfully started, @ref
AnnaBridge 171:3a7713b1edbc 206 * MXC_Error_Codes "error" if unsuccessful.
AnnaBridge 171:3a7713b1edbc 207 * @addtogroup uart_async
AnnaBridge 171:3a7713b1edbc 208 */
AnnaBridge 171:3a7713b1edbc 209 int UART_ReadAsync(mxc_uart_regs_t *uart, uart_req_t *req);
AnnaBridge 171:3a7713b1edbc 210
AnnaBridge 171:3a7713b1edbc 211 /**
AnnaBridge 171:3a7713b1edbc 212 * @brief Abort asynchronous request.
AnnaBridge 171:3a7713b1edbc 213 *
AnnaBridge 171:3a7713b1edbc 214 * @param req Pointer to a request for a UART transaction, see #uart_req.
AnnaBridge 171:3a7713b1edbc 215 *
AnnaBridge 171:3a7713b1edbc 216 * @return #E_NO_ERROR Asynchronous request aborted successfully, error if unsuccessful.
AnnaBridge 171:3a7713b1edbc 217 * @addtogroup uart_async
AnnaBridge 171:3a7713b1edbc 218 */
AnnaBridge 171:3a7713b1edbc 219 int UART_AbortAsync(uart_req_t *req);
AnnaBridge 171:3a7713b1edbc 220
AnnaBridge 171:3a7713b1edbc 221 /**
AnnaBridge 171:3a7713b1edbc 222 * @brief UART interrupt handler.
AnnaBridge 171:3a7713b1edbc 223 * @details This function should be called by the application from the
AnnaBridge 171:3a7713b1edbc 224 * interrupt handler if UART interrupts are enabled. Alternately,
AnnaBridge 171:3a7713b1edbc 225 * this function can be periodically called by the application if
AnnaBridge 171:3a7713b1edbc 226 * UART interrupts are disabled. Only necessary to call this when
AnnaBridge 171:3a7713b1edbc 227 * using asynchronous functions.
AnnaBridge 171:3a7713b1edbc 228 *
AnnaBridge 171:3a7713b1edbc 229 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 230 * @addtogroup uart_async
AnnaBridge 171:3a7713b1edbc 231 */
AnnaBridge 171:3a7713b1edbc 232 void UART_Handler(mxc_uart_regs_t *uart);
AnnaBridge 171:3a7713b1edbc 233
AnnaBridge 171:3a7713b1edbc 234 /**
AnnaBridge 171:3a7713b1edbc 235 * @brief Check to see if the UART is busy.
AnnaBridge 171:3a7713b1edbc 236 *
AnnaBridge 171:3a7713b1edbc 237 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 238 *
AnnaBridge 171:3a7713b1edbc 239 * @return #E_NO_ERROR UART is idle.
AnnaBridge 171:3a7713b1edbc 240 * @return #E_BUSY UART is in use.
AnnaBridge 171:3a7713b1edbc 241 */
AnnaBridge 171:3a7713b1edbc 242 int UART_Busy(mxc_uart_regs_t *uart);
AnnaBridge 171:3a7713b1edbc 243
AnnaBridge 171:3a7713b1edbc 244 /**
AnnaBridge 171:3a7713b1edbc 245 * @brief Prepare the UART for entry into a Low-Power mode (LP0/LP1).
AnnaBridge 171:3a7713b1edbc 246 * @details Checks for any ongoing transactions. Disables interrupts if the
AnnaBridge 171:3a7713b1edbc 247 * UART is idle.
AnnaBridge 171:3a7713b1edbc 248 *
AnnaBridge 171:3a7713b1edbc 249 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 250 * @return #E_NO_ERROR UART is ready to enter Low-Power modes (LP0/LP1).
AnnaBridge 171:3a7713b1edbc 251 * @return #E_BUSY UART is active and busy and not ready to enter a
AnnaBridge 171:3a7713b1edbc 252 * Low-Power mode (LP0/LP1).
AnnaBridge 171:3a7713b1edbc 253 *
AnnaBridge 171:3a7713b1edbc 254 */
AnnaBridge 171:3a7713b1edbc 255 int UART_PrepForSleep(mxc_uart_regs_t *uart);
AnnaBridge 171:3a7713b1edbc 256
AnnaBridge 171:3a7713b1edbc 257 /**
AnnaBridge 171:3a7713b1edbc 258 * @brief Enables the UART.
AnnaBridge 171:3a7713b1edbc 259 * @note This function does not change the existing UART configuration.
AnnaBridge 171:3a7713b1edbc 260 *
AnnaBridge 171:3a7713b1edbc 261 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 262 */
AnnaBridge 171:3a7713b1edbc 263 __STATIC_INLINE void UART_Enable(mxc_uart_regs_t *uart)
AnnaBridge 171:3a7713b1edbc 264 {
AnnaBridge 171:3a7713b1edbc 265 uart->ctrl |= (MXC_F_UART_CTRL_UART_EN | MXC_F_UART_CTRL_TX_FIFO_EN |
AnnaBridge 171:3a7713b1edbc 266 MXC_F_UART_CTRL_RX_FIFO_EN);
AnnaBridge 171:3a7713b1edbc 267 }
AnnaBridge 171:3a7713b1edbc 268
AnnaBridge 171:3a7713b1edbc 269 /**
AnnaBridge 171:3a7713b1edbc 270 * @brief Drains/empties and data in the RX FIFO.
AnnaBridge 171:3a7713b1edbc 271 *
AnnaBridge 171:3a7713b1edbc 272 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 273 */
AnnaBridge 171:3a7713b1edbc 274 __STATIC_INLINE void UART_DrainRX(mxc_uart_regs_t *uart)
AnnaBridge 171:3a7713b1edbc 275 {
AnnaBridge 171:3a7713b1edbc 276 uint32_t ctrl_save = uart->ctrl;
AnnaBridge 171:3a7713b1edbc 277 uart->ctrl = (ctrl_save & ~MXC_F_UART_CTRL_RX_FIFO_EN);
AnnaBridge 171:3a7713b1edbc 278 uart->ctrl = ctrl_save;
AnnaBridge 171:3a7713b1edbc 279 }
AnnaBridge 171:3a7713b1edbc 280
AnnaBridge 171:3a7713b1edbc 281 /**
AnnaBridge 171:3a7713b1edbc 282 * @brief Drains/empties any data in the TX FIFO.
AnnaBridge 171:3a7713b1edbc 283 *
AnnaBridge 171:3a7713b1edbc 284 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 285 */
AnnaBridge 171:3a7713b1edbc 286 __STATIC_INLINE void UART_DrainTX(mxc_uart_regs_t *uart)
AnnaBridge 171:3a7713b1edbc 287 {
AnnaBridge 171:3a7713b1edbc 288 uint32_t ctrl_save = uart->ctrl;
AnnaBridge 171:3a7713b1edbc 289 uart->ctrl = (ctrl_save & ~MXC_F_UART_CTRL_TX_FIFO_EN);
AnnaBridge 171:3a7713b1edbc 290 uart->ctrl = ctrl_save;
AnnaBridge 171:3a7713b1edbc 291 }
AnnaBridge 171:3a7713b1edbc 292
AnnaBridge 171:3a7713b1edbc 293 /**
AnnaBridge 171:3a7713b1edbc 294 * @brief Returns the number of unused bytes available in the UART TX FIFO.
AnnaBridge 171:3a7713b1edbc 295 *
AnnaBridge 171:3a7713b1edbc 296 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 297 *
AnnaBridge 171:3a7713b1edbc 298 * @return Number of unused bytes in the TX FIFO.
AnnaBridge 171:3a7713b1edbc 299 */
AnnaBridge 171:3a7713b1edbc 300 __STATIC_INLINE unsigned UART_NumWriteAvail(mxc_uart_regs_t *uart)
AnnaBridge 171:3a7713b1edbc 301 {
AnnaBridge 171:3a7713b1edbc 302 return (MXC_UART_FIFO_DEPTH - (uart->tx_fifo_ctrl & MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY));
AnnaBridge 171:3a7713b1edbc 303 }
AnnaBridge 171:3a7713b1edbc 304
AnnaBridge 171:3a7713b1edbc 305 /**
AnnaBridge 171:3a7713b1edbc 306 * @brief Returns the number of bytes available to be read from the RX
AnnaBridge 171:3a7713b1edbc 307 * FIFO.
AnnaBridge 171:3a7713b1edbc 308 *
AnnaBridge 171:3a7713b1edbc 309 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 310 *
AnnaBridge 171:3a7713b1edbc 311 * @return The number of bytes available to read in the RX FIFO.
AnnaBridge 171:3a7713b1edbc 312 */
AnnaBridge 171:3a7713b1edbc 313 __STATIC_INLINE unsigned UART_NumReadAvail(mxc_uart_regs_t *uart)
AnnaBridge 171:3a7713b1edbc 314 {
AnnaBridge 171:3a7713b1edbc 315 return (uart->rx_fifo_ctrl & MXC_F_UART_RX_FIFO_CTRL_FIFO_ENTRY);
AnnaBridge 171:3a7713b1edbc 316 }
AnnaBridge 171:3a7713b1edbc 317
AnnaBridge 171:3a7713b1edbc 318 /**
AnnaBridge 171:3a7713b1edbc 319 * @brief Clear interrupt flags.
AnnaBridge 171:3a7713b1edbc 320 *
AnnaBridge 171:3a7713b1edbc 321 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 322 * @param mask Mask of the UART interrupts to clear, see
AnnaBridge 171:3a7713b1edbc 323 * @ref UART_INTFL_Register Register.
AnnaBridge 171:3a7713b1edbc 324 */
AnnaBridge 171:3a7713b1edbc 325 __STATIC_INLINE void UART_ClearFlags(mxc_uart_regs_t *uart, uint32_t mask)
AnnaBridge 171:3a7713b1edbc 326 {
AnnaBridge 171:3a7713b1edbc 327 uart->intfl = mask;
AnnaBridge 171:3a7713b1edbc 328 }
AnnaBridge 171:3a7713b1edbc 329
AnnaBridge 171:3a7713b1edbc 330 /**
AnnaBridge 171:3a7713b1edbc 331 * @brief Get interrupt flags.
AnnaBridge 171:3a7713b1edbc 332 *
AnnaBridge 171:3a7713b1edbc 333 * @param uart Pointer to the UART registers.
AnnaBridge 171:3a7713b1edbc 334 *
AnnaBridge 171:3a7713b1edbc 335 * @return Mask of active flags.
AnnaBridge 171:3a7713b1edbc 336 */
AnnaBridge 171:3a7713b1edbc 337 __STATIC_INLINE unsigned UART_GetFlags(mxc_uart_regs_t *uart)
AnnaBridge 171:3a7713b1edbc 338 {
AnnaBridge 171:3a7713b1edbc 339 return (uart->intfl);
AnnaBridge 171:3a7713b1edbc 340 }
AnnaBridge 171:3a7713b1edbc 341
AnnaBridge 171:3a7713b1edbc 342 /**@} end of group uart_comm */
AnnaBridge 171:3a7713b1edbc 343 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 344 }
AnnaBridge 171:3a7713b1edbc 345 #endif
AnnaBridge 171:3a7713b1edbc 346
AnnaBridge 171:3a7713b1edbc 347 #endif /* _UART_H_ */