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:
Anna Bridge
Date:
Wed May 10 11:31:27 2017 +0100
Revision:
142:4eea097334d6
Child:
159:7130f322cb7e
Release 142 of the mbed library

Ports for Upcoming Targets


Fixes and Changes

4059: [Silicon Labs] Rename targets https://github.com/ARMmbed/mbed-os/pull/4059
4187: [NCS36510] Reduce default heap size allocated by IAR to 1/4 of RAM https://github.com/ARMmbed/mbed-os/pull/4187
4225: fixed missing device_name for xDot and removed progen https://github.com/ARMmbed/mbed-os/pull/4225
4251: Fix C++11 build error w/ u-blox EVK-ODIN-W2 https://github.com/ARMmbed/mbed-os/pull/4251
4236: STM32 Fixed warning related to __packed redefinition https://github.com/ARMmbed/mbed-os/pull/4236
4190: LPC4088: Enable LWIP feature https://github.com/ARMmbed/mbed-os/pull/4190
4260: Inherit Xadow M0 target from LPC11U35_501 https://github.com/ARMmbed/mbed-os/pull/4260
4249: Add consistent button names across targets https://github.com/ARMmbed/mbed-os/pull/4249

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anna Bridge 142:4eea097334d6 1 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 2 * @file em_usart.h
Anna Bridge 142:4eea097334d6 3 * @brief Universal synchronous/asynchronous receiver/transmitter (USART/UART)
Anna Bridge 142:4eea097334d6 4 * peripheral API
Anna Bridge 142:4eea097334d6 5 * @version 5.1.2
Anna Bridge 142:4eea097334d6 6 *******************************************************************************
Anna Bridge 142:4eea097334d6 7 * @section License
Anna Bridge 142:4eea097334d6 8 * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b>
Anna Bridge 142:4eea097334d6 9 *******************************************************************************
Anna Bridge 142:4eea097334d6 10 *
Anna Bridge 142:4eea097334d6 11 * Permission is granted to anyone to use this software for any purpose,
Anna Bridge 142:4eea097334d6 12 * including commercial applications, and to alter it and redistribute it
Anna Bridge 142:4eea097334d6 13 * freely, subject to the following restrictions:
Anna Bridge 142:4eea097334d6 14 *
Anna Bridge 142:4eea097334d6 15 * 1. The origin of this software must not be misrepresented; you must not
Anna Bridge 142:4eea097334d6 16 * claim that you wrote the original software.
Anna Bridge 142:4eea097334d6 17 * 2. Altered source versions must be plainly marked as such, and must not be
Anna Bridge 142:4eea097334d6 18 * misrepresented as being the original software.
Anna Bridge 142:4eea097334d6 19 * 3. This notice may not be removed or altered from any source distribution.
Anna Bridge 142:4eea097334d6 20 *
Anna Bridge 142:4eea097334d6 21 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
Anna Bridge 142:4eea097334d6 22 * obligation to support this Software. Silicon Labs is providing the
Anna Bridge 142:4eea097334d6 23 * Software "AS IS", with no express or implied warranties of any kind,
Anna Bridge 142:4eea097334d6 24 * including, but not limited to, any implied warranties of merchantability
Anna Bridge 142:4eea097334d6 25 * or fitness for any particular purpose or warranties against infringement
Anna Bridge 142:4eea097334d6 26 * of any proprietary rights of a third party.
Anna Bridge 142:4eea097334d6 27 *
Anna Bridge 142:4eea097334d6 28 * Silicon Labs will not be liable for any consequential, incidental, or
Anna Bridge 142:4eea097334d6 29 * special damages, or any other relief, or for any claim by any third party,
Anna Bridge 142:4eea097334d6 30 * arising from your use of this Software.
Anna Bridge 142:4eea097334d6 31 *
Anna Bridge 142:4eea097334d6 32 ******************************************************************************/
Anna Bridge 142:4eea097334d6 33
Anna Bridge 142:4eea097334d6 34
Anna Bridge 142:4eea097334d6 35 #ifndef EM_USART_H
Anna Bridge 142:4eea097334d6 36 #define EM_USART_H
Anna Bridge 142:4eea097334d6 37
Anna Bridge 142:4eea097334d6 38 #include "em_device.h"
Anna Bridge 142:4eea097334d6 39 #if defined(USART_COUNT) && (USART_COUNT > 0)
Anna Bridge 142:4eea097334d6 40
Anna Bridge 142:4eea097334d6 41 #include <stdbool.h>
Anna Bridge 142:4eea097334d6 42
Anna Bridge 142:4eea097334d6 43 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 44 extern "C" {
Anna Bridge 142:4eea097334d6 45 #endif
Anna Bridge 142:4eea097334d6 46
Anna Bridge 142:4eea097334d6 47 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 48 * @addtogroup emlib
Anna Bridge 142:4eea097334d6 49 * @{
Anna Bridge 142:4eea097334d6 50 ******************************************************************************/
Anna Bridge 142:4eea097334d6 51
Anna Bridge 142:4eea097334d6 52 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 53 * @addtogroup USART
Anna Bridge 142:4eea097334d6 54 * @brief Universal Synchronous/Asynchronous Receiver/Transmitter
Anna Bridge 142:4eea097334d6 55 * Peripheral API
Anna Bridge 142:4eea097334d6 56 * @details
Anna Bridge 142:4eea097334d6 57 * The Universal Synchronous/Asynchronous Receiver/Transmitter (USART)
Anna Bridge 142:4eea097334d6 58 * is a very flexible serial I/O module. It supports full duplex asynchronous UART
Anna Bridge 142:4eea097334d6 59 * communication as well as RS-485, SPI, MicroWire and 3-wire. It can also interface
Anna Bridge 142:4eea097334d6 60 * with ISO7816 Smart-Cards, and IrDA devices.
Anna Bridge 142:4eea097334d6 61 *
Anna Bridge 142:4eea097334d6 62 * The USART has a wide selection of operating modes, frame formats and baud rates.
Anna Bridge 142:4eea097334d6 63 * All features are supported through the API of this module.
Anna Bridge 142:4eea097334d6 64 *
Anna Bridge 142:4eea097334d6 65 * Triple buffering and DMA support makes high data-rates possible with minimal
Anna Bridge 142:4eea097334d6 66 * CPU intervention and it is possible to transmit and receive large frames while
Anna Bridge 142:4eea097334d6 67 * the MCU remains in EM1 Sleep.
Anna Bridge 142:4eea097334d6 68 *
Anna Bridge 142:4eea097334d6 69 * This module does not support DMA configuration. The @ref UARTDRV and @ref SPIDRV drivers
Anna Bridge 142:4eea097334d6 70 * provide full support for DMA and more.
Anna Bridge 142:4eea097334d6 71 *
Anna Bridge 142:4eea097334d6 72 * The following steps are necessary for basic operation:
Anna Bridge 142:4eea097334d6 73 *
Anna Bridge 142:4eea097334d6 74 * Clock enable:
Anna Bridge 142:4eea097334d6 75 * @include em_usart_clock_enable.c
Anna Bridge 142:4eea097334d6 76 *
Anna Bridge 142:4eea097334d6 77 * To initialize the USART for asynchronous operation (eg. UART):
Anna Bridge 142:4eea097334d6 78 * @include em_usart_init_async.c
Anna Bridge 142:4eea097334d6 79 *
Anna Bridge 142:4eea097334d6 80 * To initialize the USART for synchronous operation (eg. SPI):
Anna Bridge 142:4eea097334d6 81 * @include em_usart_init_sync.c
Anna Bridge 142:4eea097334d6 82 *
Anna Bridge 142:4eea097334d6 83 * After pins are assigned for the application/board, enable pins at the
Anna Bridge 142:4eea097334d6 84 * desired location. Available locations can be obtained from the Pin Definitions
Anna Bridge 142:4eea097334d6 85 * section in the datasheet.
Anna Bridge 142:4eea097334d6 86 * @if DOXYDOC_P1_DEVICE
Anna Bridge 142:4eea097334d6 87 * @include em_usart_route_p1.c
Anna Bridge 142:4eea097334d6 88 * @note UART hardware flow control is not directly supported in hardware on
Anna Bridge 142:4eea097334d6 89 * @ref _SILICON_LABS_32B_SERIES_0 parts.
Anna Bridge 142:4eea097334d6 90 * @endif
Anna Bridge 142:4eea097334d6 91 * @if DOXYDOC_P2_DEVICE
Anna Bridge 142:4eea097334d6 92 * @include em_usart_route_p2.c
Anna Bridge 142:4eea097334d6 93 * @endif
Anna Bridge 142:4eea097334d6 94 * @note @ref UARTDRV supports all types of UART flow control. Software assisted
Anna Bridge 142:4eea097334d6 95 * hardware flow control is available for parts without true UART hardware
Anna Bridge 142:4eea097334d6 96 * flow control.
Anna Bridge 142:4eea097334d6 97 * @{
Anna Bridge 142:4eea097334d6 98 ******************************************************************************/
Anna Bridge 142:4eea097334d6 99
Anna Bridge 142:4eea097334d6 100 /*******************************************************************************
Anna Bridge 142:4eea097334d6 101 ******************************** ENUMS ************************************
Anna Bridge 142:4eea097334d6 102 ******************************************************************************/
Anna Bridge 142:4eea097334d6 103
Anna Bridge 142:4eea097334d6 104 /** Databit selection. */
Anna Bridge 142:4eea097334d6 105 typedef enum
Anna Bridge 142:4eea097334d6 106 {
Anna Bridge 142:4eea097334d6 107 usartDatabits4 = USART_FRAME_DATABITS_FOUR, /**< 4 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 108 usartDatabits5 = USART_FRAME_DATABITS_FIVE, /**< 5 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 109 usartDatabits6 = USART_FRAME_DATABITS_SIX, /**< 6 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 110 usartDatabits7 = USART_FRAME_DATABITS_SEVEN, /**< 7 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 111 usartDatabits8 = USART_FRAME_DATABITS_EIGHT, /**< 8 databits. */
Anna Bridge 142:4eea097334d6 112 usartDatabits9 = USART_FRAME_DATABITS_NINE, /**< 9 databits. */
Anna Bridge 142:4eea097334d6 113 usartDatabits10 = USART_FRAME_DATABITS_TEN, /**< 10 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 114 usartDatabits11 = USART_FRAME_DATABITS_ELEVEN, /**< 11 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 115 usartDatabits12 = USART_FRAME_DATABITS_TWELVE, /**< 12 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 116 usartDatabits13 = USART_FRAME_DATABITS_THIRTEEN, /**< 13 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 117 usartDatabits14 = USART_FRAME_DATABITS_FOURTEEN, /**< 14 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 118 usartDatabits15 = USART_FRAME_DATABITS_FIFTEEN, /**< 15 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 119 usartDatabits16 = USART_FRAME_DATABITS_SIXTEEN /**< 16 databits (not available for UART). */
Anna Bridge 142:4eea097334d6 120 } USART_Databits_TypeDef;
Anna Bridge 142:4eea097334d6 121
Anna Bridge 142:4eea097334d6 122
Anna Bridge 142:4eea097334d6 123 /** Enable selection. */
Anna Bridge 142:4eea097334d6 124 typedef enum
Anna Bridge 142:4eea097334d6 125 {
Anna Bridge 142:4eea097334d6 126 /** Disable both receiver and transmitter. */
Anna Bridge 142:4eea097334d6 127 usartDisable = 0x0,
Anna Bridge 142:4eea097334d6 128
Anna Bridge 142:4eea097334d6 129 /** Enable receiver only, transmitter disabled. */
Anna Bridge 142:4eea097334d6 130 usartEnableRx = USART_CMD_RXEN,
Anna Bridge 142:4eea097334d6 131
Anna Bridge 142:4eea097334d6 132 /** Enable transmitter only, receiver disabled. */
Anna Bridge 142:4eea097334d6 133 usartEnableTx = USART_CMD_TXEN,
Anna Bridge 142:4eea097334d6 134
Anna Bridge 142:4eea097334d6 135 /** Enable both receiver and transmitter. */
Anna Bridge 142:4eea097334d6 136 usartEnable = (USART_CMD_RXEN | USART_CMD_TXEN)
Anna Bridge 142:4eea097334d6 137 } USART_Enable_TypeDef;
Anna Bridge 142:4eea097334d6 138
Anna Bridge 142:4eea097334d6 139
Anna Bridge 142:4eea097334d6 140 /** Oversampling selection, used for asynchronous operation. */
Anna Bridge 142:4eea097334d6 141 typedef enum
Anna Bridge 142:4eea097334d6 142 {
Anna Bridge 142:4eea097334d6 143 usartOVS16 = USART_CTRL_OVS_X16, /**< 16x oversampling (normal). */
Anna Bridge 142:4eea097334d6 144 usartOVS8 = USART_CTRL_OVS_X8, /**< 8x oversampling. */
Anna Bridge 142:4eea097334d6 145 usartOVS6 = USART_CTRL_OVS_X6, /**< 6x oversampling. */
Anna Bridge 142:4eea097334d6 146 usartOVS4 = USART_CTRL_OVS_X4 /**< 4x oversampling. */
Anna Bridge 142:4eea097334d6 147 } USART_OVS_TypeDef;
Anna Bridge 142:4eea097334d6 148
Anna Bridge 142:4eea097334d6 149
Anna Bridge 142:4eea097334d6 150 /** Parity selection, mainly used for asynchronous operation. */
Anna Bridge 142:4eea097334d6 151 typedef enum
Anna Bridge 142:4eea097334d6 152 {
Anna Bridge 142:4eea097334d6 153 usartNoParity = USART_FRAME_PARITY_NONE, /**< No parity. */
Anna Bridge 142:4eea097334d6 154 usartEvenParity = USART_FRAME_PARITY_EVEN, /**< Even parity. */
Anna Bridge 142:4eea097334d6 155 usartOddParity = USART_FRAME_PARITY_ODD /**< Odd parity. */
Anna Bridge 142:4eea097334d6 156 } USART_Parity_TypeDef;
Anna Bridge 142:4eea097334d6 157
Anna Bridge 142:4eea097334d6 158
Anna Bridge 142:4eea097334d6 159 /** Stopbits selection, used for asynchronous operation. */
Anna Bridge 142:4eea097334d6 160 typedef enum
Anna Bridge 142:4eea097334d6 161 {
Anna Bridge 142:4eea097334d6 162 usartStopbits0p5 = USART_FRAME_STOPBITS_HALF, /**< 0.5 stopbits. */
Anna Bridge 142:4eea097334d6 163 usartStopbits1 = USART_FRAME_STOPBITS_ONE, /**< 1 stopbits. */
Anna Bridge 142:4eea097334d6 164 usartStopbits1p5 = USART_FRAME_STOPBITS_ONEANDAHALF, /**< 1.5 stopbits. */
Anna Bridge 142:4eea097334d6 165 usartStopbits2 = USART_FRAME_STOPBITS_TWO /**< 2 stopbits. */
Anna Bridge 142:4eea097334d6 166 } USART_Stopbits_TypeDef;
Anna Bridge 142:4eea097334d6 167
Anna Bridge 142:4eea097334d6 168
Anna Bridge 142:4eea097334d6 169 /** Clock polarity/phase mode. */
Anna Bridge 142:4eea097334d6 170 typedef enum
Anna Bridge 142:4eea097334d6 171 {
Anna Bridge 142:4eea097334d6 172 /** Clock idle low, sample on rising edge. */
Anna Bridge 142:4eea097334d6 173 usartClockMode0 = USART_CTRL_CLKPOL_IDLELOW | USART_CTRL_CLKPHA_SAMPLELEADING,
Anna Bridge 142:4eea097334d6 174
Anna Bridge 142:4eea097334d6 175 /** Clock idle low, sample on falling edge. */
Anna Bridge 142:4eea097334d6 176 usartClockMode1 = USART_CTRL_CLKPOL_IDLELOW | USART_CTRL_CLKPHA_SAMPLETRAILING,
Anna Bridge 142:4eea097334d6 177
Anna Bridge 142:4eea097334d6 178 /** Clock idle high, sample on falling edge. */
Anna Bridge 142:4eea097334d6 179 usartClockMode2 = USART_CTRL_CLKPOL_IDLEHIGH | USART_CTRL_CLKPHA_SAMPLELEADING,
Anna Bridge 142:4eea097334d6 180
Anna Bridge 142:4eea097334d6 181 /** Clock idle high, sample on rising edge. */
Anna Bridge 142:4eea097334d6 182 usartClockMode3 = USART_CTRL_CLKPOL_IDLEHIGH | USART_CTRL_CLKPHA_SAMPLETRAILING
Anna Bridge 142:4eea097334d6 183 } USART_ClockMode_TypeDef;
Anna Bridge 142:4eea097334d6 184
Anna Bridge 142:4eea097334d6 185
Anna Bridge 142:4eea097334d6 186 /** Pulse width selection for IrDA mode. */
Anna Bridge 142:4eea097334d6 187 typedef enum
Anna Bridge 142:4eea097334d6 188 {
Anna Bridge 142:4eea097334d6 189 /** IrDA pulse width is 1/16 for OVS=0 and 1/8 for OVS=1 */
Anna Bridge 142:4eea097334d6 190 usartIrDAPwONE = USART_IRCTRL_IRPW_ONE,
Anna Bridge 142:4eea097334d6 191
Anna Bridge 142:4eea097334d6 192 /** IrDA pulse width is 2/16 for OVS=0 and 2/8 for OVS=1 */
Anna Bridge 142:4eea097334d6 193 usartIrDAPwTWO = USART_IRCTRL_IRPW_TWO,
Anna Bridge 142:4eea097334d6 194
Anna Bridge 142:4eea097334d6 195 /** IrDA pulse width is 3/16 for OVS=0 and 3/8 for OVS=1 */
Anna Bridge 142:4eea097334d6 196 usartIrDAPwTHREE = USART_IRCTRL_IRPW_THREE,
Anna Bridge 142:4eea097334d6 197
Anna Bridge 142:4eea097334d6 198 /** IrDA pulse width is 4/16 for OVS=0 and 4/8 for OVS=1 */
Anna Bridge 142:4eea097334d6 199 usartIrDAPwFOUR = USART_IRCTRL_IRPW_FOUR
Anna Bridge 142:4eea097334d6 200 } USART_IrDAPw_Typedef;
Anna Bridge 142:4eea097334d6 201
Anna Bridge 142:4eea097334d6 202
Anna Bridge 142:4eea097334d6 203 /** PRS channel selection for IrDA mode. */
Anna Bridge 142:4eea097334d6 204 typedef enum
Anna Bridge 142:4eea097334d6 205 {
Anna Bridge 142:4eea097334d6 206 usartIrDAPrsCh0 = USART_IRCTRL_IRPRSSEL_PRSCH0, /**< PRS channel 0 */
Anna Bridge 142:4eea097334d6 207 usartIrDAPrsCh1 = USART_IRCTRL_IRPRSSEL_PRSCH1, /**< PRS channel 1 */
Anna Bridge 142:4eea097334d6 208 usartIrDAPrsCh2 = USART_IRCTRL_IRPRSSEL_PRSCH2, /**< PRS channel 2 */
Anna Bridge 142:4eea097334d6 209 usartIrDAPrsCh3 = USART_IRCTRL_IRPRSSEL_PRSCH3, /**< PRS channel 3 */
Anna Bridge 142:4eea097334d6 210 #if defined(USART_IRCTRL_IRPRSSEL_PRSCH4)
Anna Bridge 142:4eea097334d6 211 usartIrDAPrsCh4 = USART_IRCTRL_IRPRSSEL_PRSCH4, /**< PRS channel 4 */
Anna Bridge 142:4eea097334d6 212 #endif
Anna Bridge 142:4eea097334d6 213 #if defined(USART_IRCTRL_IRPRSSEL_PRSCH5)
Anna Bridge 142:4eea097334d6 214 usartIrDAPrsCh5 = USART_IRCTRL_IRPRSSEL_PRSCH5, /**< PRS channel 5 */
Anna Bridge 142:4eea097334d6 215 #endif
Anna Bridge 142:4eea097334d6 216 #if defined(USART_IRCTRL_IRPRSSEL_PRSCH6)
Anna Bridge 142:4eea097334d6 217 usartIrDAPrsCh6 = USART_IRCTRL_IRPRSSEL_PRSCH6, /**< PRS channel 6 */
Anna Bridge 142:4eea097334d6 218 #endif
Anna Bridge 142:4eea097334d6 219 #if defined(USART_IRCTRL_IRPRSSEL_PRSCH7)
Anna Bridge 142:4eea097334d6 220 usartIrDAPrsCh7 = USART_IRCTRL_IRPRSSEL_PRSCH7, /**< PRS channel 7 */
Anna Bridge 142:4eea097334d6 221 #endif
Anna Bridge 142:4eea097334d6 222 } USART_IrDAPrsSel_Typedef;
Anna Bridge 142:4eea097334d6 223
Anna Bridge 142:4eea097334d6 224 #if defined(_USART_I2SCTRL_MASK)
Anna Bridge 142:4eea097334d6 225 /** I2S format selection. */
Anna Bridge 142:4eea097334d6 226 typedef enum
Anna Bridge 142:4eea097334d6 227 {
Anna Bridge 142:4eea097334d6 228 usartI2sFormatW32D32 = USART_I2SCTRL_FORMAT_W32D32, /**< 32-bit word, 32-bit data */
Anna Bridge 142:4eea097334d6 229 usartI2sFormatW32D24M = USART_I2SCTRL_FORMAT_W32D24M, /**< 32-bit word, 32-bit data with 8 lsb masked */
Anna Bridge 142:4eea097334d6 230 usartI2sFormatW32D24 = USART_I2SCTRL_FORMAT_W32D24, /**< 32-bit word, 24-bit data */
Anna Bridge 142:4eea097334d6 231 usartI2sFormatW32D16 = USART_I2SCTRL_FORMAT_W32D16, /**< 32-bit word, 16-bit data */
Anna Bridge 142:4eea097334d6 232 usartI2sFormatW32D8 = USART_I2SCTRL_FORMAT_W32D8, /**< 32-bit word, 8-bit data */
Anna Bridge 142:4eea097334d6 233 usartI2sFormatW16D16 = USART_I2SCTRL_FORMAT_W16D16, /**< 16-bit word, 16-bit data */
Anna Bridge 142:4eea097334d6 234 usartI2sFormatW16D8 = USART_I2SCTRL_FORMAT_W16D8, /**< 16-bit word, 8-bit data */
Anna Bridge 142:4eea097334d6 235 usartI2sFormatW8D8 = USART_I2SCTRL_FORMAT_W8D8 /**< 8-bit word, 8-bit data */
Anna Bridge 142:4eea097334d6 236 } USART_I2sFormat_TypeDef;
Anna Bridge 142:4eea097334d6 237
Anna Bridge 142:4eea097334d6 238 /** I2S frame data justify. */
Anna Bridge 142:4eea097334d6 239 typedef enum
Anna Bridge 142:4eea097334d6 240 {
Anna Bridge 142:4eea097334d6 241 usartI2sJustifyLeft = USART_I2SCTRL_JUSTIFY_LEFT, /**< Data is left-justified within the frame */
Anna Bridge 142:4eea097334d6 242 usartI2sJustifyRight = USART_I2SCTRL_JUSTIFY_RIGHT /**< Data is right-justified within the frame */
Anna Bridge 142:4eea097334d6 243 } USART_I2sJustify_TypeDef;
Anna Bridge 142:4eea097334d6 244 #endif
Anna Bridge 142:4eea097334d6 245
Anna Bridge 142:4eea097334d6 246 #if defined(_USART_INPUT_MASK)
Anna Bridge 142:4eea097334d6 247 /** USART Rx input PRS selection. */
Anna Bridge 142:4eea097334d6 248 typedef enum
Anna Bridge 142:4eea097334d6 249 {
Anna Bridge 142:4eea097334d6 250 usartPrsRxCh0 = USART_INPUT_RXPRSSEL_PRSCH0, /**< PRSCH0 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 251 usartPrsRxCh1 = USART_INPUT_RXPRSSEL_PRSCH1, /**< PRSCH1 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 252 usartPrsRxCh2 = USART_INPUT_RXPRSSEL_PRSCH2, /**< PRSCH2 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 253 usartPrsRxCh3 = USART_INPUT_RXPRSSEL_PRSCH3, /**< PRSCH3 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 254
Anna Bridge 142:4eea097334d6 255 #if defined(USART_INPUT_RXPRSSEL_PRSCH7)
Anna Bridge 142:4eea097334d6 256 usartPrsRxCh4 = USART_INPUT_RXPRSSEL_PRSCH4, /**< PRSCH4 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 257 usartPrsRxCh5 = USART_INPUT_RXPRSSEL_PRSCH5, /**< PRSCH5 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 258 usartPrsRxCh6 = USART_INPUT_RXPRSSEL_PRSCH6, /**< PRSCH6 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 259 usartPrsRxCh7 = USART_INPUT_RXPRSSEL_PRSCH7, /**< PRSCH7 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 260 #endif
Anna Bridge 142:4eea097334d6 261
Anna Bridge 142:4eea097334d6 262 #if defined(USART_INPUT_RXPRSSEL_PRSCH11)
Anna Bridge 142:4eea097334d6 263 usartPrsRxCh8 = USART_INPUT_RXPRSSEL_PRSCH8, /**< PRSCH8 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 264 usartPrsRxCh9 = USART_INPUT_RXPRSSEL_PRSCH9, /**< PRSCH9 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 265 usartPrsRxCh10 = USART_INPUT_RXPRSSEL_PRSCH10, /**< PRSCH10 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 266 usartPrsRxCh11 = USART_INPUT_RXPRSSEL_PRSCH11 /**< PRSCH11 selected as USART_INPUT */
Anna Bridge 142:4eea097334d6 267 #endif
Anna Bridge 142:4eea097334d6 268 } USART_PrsRxCh_TypeDef;
Anna Bridge 142:4eea097334d6 269 #endif
Anna Bridge 142:4eea097334d6 270
Anna Bridge 142:4eea097334d6 271 /** USART PRS Transmit Trigger Channels */
Anna Bridge 142:4eea097334d6 272 typedef enum
Anna Bridge 142:4eea097334d6 273 {
Anna Bridge 142:4eea097334d6 274 usartPrsTriggerCh0 = USART_TRIGCTRL_TSEL_PRSCH0, /**< PRSCH0 selected as USART Trigger */
Anna Bridge 142:4eea097334d6 275 usartPrsTriggerCh1 = USART_TRIGCTRL_TSEL_PRSCH1, /**< PRSCH0 selected as USART Trigger */
Anna Bridge 142:4eea097334d6 276 usartPrsTriggerCh2 = USART_TRIGCTRL_TSEL_PRSCH2, /**< PRSCH0 selected as USART Trigger */
Anna Bridge 142:4eea097334d6 277 usartPrsTriggerCh3 = USART_TRIGCTRL_TSEL_PRSCH3, /**< PRSCH0 selected as USART Trigger */
Anna Bridge 142:4eea097334d6 278
Anna Bridge 142:4eea097334d6 279 #if defined(USART_TRIGCTRL_TSEL_PRSCH7)
Anna Bridge 142:4eea097334d6 280 usartPrsTriggerCh4 = USART_TRIGCTRL_TSEL_PRSCH4, /**< PRSCH0 selected as USART Trigger */
Anna Bridge 142:4eea097334d6 281 usartPrsTriggerCh5 = USART_TRIGCTRL_TSEL_PRSCH5, /**< PRSCH0 selected as USART Trigger */
Anna Bridge 142:4eea097334d6 282 usartPrsTriggerCh6 = USART_TRIGCTRL_TSEL_PRSCH6, /**< PRSCH0 selected as USART Trigger */
Anna Bridge 142:4eea097334d6 283 usartPrsTriggerCh7 = USART_TRIGCTRL_TSEL_PRSCH7, /**< PRSCH0 selected as USART Trigger */
Anna Bridge 142:4eea097334d6 284 #endif
Anna Bridge 142:4eea097334d6 285 } USART_PrsTriggerCh_TypeDef;
Anna Bridge 142:4eea097334d6 286
Anna Bridge 142:4eea097334d6 287 /*******************************************************************************
Anna Bridge 142:4eea097334d6 288 ******************************* STRUCTS ***********************************
Anna Bridge 142:4eea097334d6 289 ******************************************************************************/
Anna Bridge 142:4eea097334d6 290
Anna Bridge 142:4eea097334d6 291 /** Asynchronous mode init structure. */
Anna Bridge 142:4eea097334d6 292 typedef struct
Anna Bridge 142:4eea097334d6 293 {
Anna Bridge 142:4eea097334d6 294 /** Specifies whether TX and/or RX shall be enabled when init completed. */
Anna Bridge 142:4eea097334d6 295 USART_Enable_TypeDef enable;
Anna Bridge 142:4eea097334d6 296
Anna Bridge 142:4eea097334d6 297 /**
Anna Bridge 142:4eea097334d6 298 * USART/UART reference clock assumed when configuring baudrate setup. Set
Anna Bridge 142:4eea097334d6 299 * it to 0 if currently configurated reference clock shall be used.
Anna Bridge 142:4eea097334d6 300 */
Anna Bridge 142:4eea097334d6 301 uint32_t refFreq;
Anna Bridge 142:4eea097334d6 302
Anna Bridge 142:4eea097334d6 303 /** Desired baudrate. */
Anna Bridge 142:4eea097334d6 304 uint32_t baudrate;
Anna Bridge 142:4eea097334d6 305
Anna Bridge 142:4eea097334d6 306 /** Oversampling used. */
Anna Bridge 142:4eea097334d6 307 USART_OVS_TypeDef oversampling;
Anna Bridge 142:4eea097334d6 308
Anna Bridge 142:4eea097334d6 309 /** Number of databits in frame. Notice that UART modules only support 8 or
Anna Bridge 142:4eea097334d6 310 * 9 databits. */
Anna Bridge 142:4eea097334d6 311 USART_Databits_TypeDef databits;
Anna Bridge 142:4eea097334d6 312
Anna Bridge 142:4eea097334d6 313 /** Parity mode to use. */
Anna Bridge 142:4eea097334d6 314 USART_Parity_TypeDef parity;
Anna Bridge 142:4eea097334d6 315
Anna Bridge 142:4eea097334d6 316 /** Number of stopbits to use. */
Anna Bridge 142:4eea097334d6 317 USART_Stopbits_TypeDef stopbits;
Anna Bridge 142:4eea097334d6 318
Anna Bridge 142:4eea097334d6 319 #if defined(USART_INPUT_RXPRS) && defined(USART_CTRL_MVDIS)
Anna Bridge 142:4eea097334d6 320 /** Majority Vote Disable for 16x, 8x and 6x oversampling modes. */
Anna Bridge 142:4eea097334d6 321 bool mvdis;
Anna Bridge 142:4eea097334d6 322
Anna Bridge 142:4eea097334d6 323 /** Enable USART Rx via PRS. */
Anna Bridge 142:4eea097334d6 324 bool prsRxEnable;
Anna Bridge 142:4eea097334d6 325
Anna Bridge 142:4eea097334d6 326 /** Select PRS channel for USART Rx. (Only valid if prsRxEnable is true). */
Anna Bridge 142:4eea097334d6 327 USART_PrsRxCh_TypeDef prsRxCh;
Anna Bridge 142:4eea097334d6 328 #endif
Anna Bridge 142:4eea097334d6 329 #if defined(_USART_TIMING_CSHOLD_MASK)
Anna Bridge 142:4eea097334d6 330 /** Auto CS enabling */
Anna Bridge 142:4eea097334d6 331 bool autoCsEnable;
Anna Bridge 142:4eea097334d6 332 /** Auto CS hold time in baud cycles */
Anna Bridge 142:4eea097334d6 333 uint8_t autoCsHold;
Anna Bridge 142:4eea097334d6 334 /** Auto CS setup time in baud cycles */
Anna Bridge 142:4eea097334d6 335 uint8_t autoCsSetup;
Anna Bridge 142:4eea097334d6 336 #endif
Anna Bridge 142:4eea097334d6 337 } USART_InitAsync_TypeDef;
Anna Bridge 142:4eea097334d6 338
Anna Bridge 142:4eea097334d6 339 /** USART PRS trigger enable */
Anna Bridge 142:4eea097334d6 340 typedef struct
Anna Bridge 142:4eea097334d6 341 {
Anna Bridge 142:4eea097334d6 342 #if defined(USART_TRIGCTRL_AUTOTXTEN)
Anna Bridge 142:4eea097334d6 343 /** Enable AUTOTX */
Anna Bridge 142:4eea097334d6 344 bool autoTxTriggerEnable;
Anna Bridge 142:4eea097334d6 345 #endif
Anna Bridge 142:4eea097334d6 346 /** Trigger receive via PRS channel */
Anna Bridge 142:4eea097334d6 347 bool rxTriggerEnable;
Anna Bridge 142:4eea097334d6 348 /** Trigger transmit via PRS channel */
Anna Bridge 142:4eea097334d6 349 bool txTriggerEnable;
Anna Bridge 142:4eea097334d6 350 /** PRS channel to be used to trigger auto transmission */
Anna Bridge 142:4eea097334d6 351 USART_PrsTriggerCh_TypeDef prsTriggerChannel;
Anna Bridge 142:4eea097334d6 352 } USART_PrsTriggerInit_TypeDef;
Anna Bridge 142:4eea097334d6 353
Anna Bridge 142:4eea097334d6 354 /** Default config for USART async init structure. */
Anna Bridge 142:4eea097334d6 355 #if defined(_USART_TIMING_CSHOLD_MASK) && defined(USART_CTRL_MVDIS)
Anna Bridge 142:4eea097334d6 356 #define USART_INITASYNC_DEFAULT \
Anna Bridge 142:4eea097334d6 357 { \
Anna Bridge 142:4eea097334d6 358 usartEnable, /* Enable RX/TX when init completed. */ \
Anna Bridge 142:4eea097334d6 359 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 360 115200, /* 115200 bits/s. */ \
Anna Bridge 142:4eea097334d6 361 usartOVS16, /* 16x oversampling. */ \
Anna Bridge 142:4eea097334d6 362 usartDatabits8, /* 8 databits. */ \
Anna Bridge 142:4eea097334d6 363 usartNoParity, /* No parity. */ \
Anna Bridge 142:4eea097334d6 364 usartStopbits1, /* 1 stopbit. */ \
Anna Bridge 142:4eea097334d6 365 false, /* Do not disable majority vote. */ \
Anna Bridge 142:4eea097334d6 366 false, /* Not USART PRS input mode. */ \
Anna Bridge 142:4eea097334d6 367 usartPrsRxCh0, /* PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 368 false, /* Auto CS functionality enable/disable switch */ \
Anna Bridge 142:4eea097334d6 369 0, /* Auto CS Hold cycles */ \
Anna Bridge 142:4eea097334d6 370 0 /* Auto CS Setup cycles */ \
Anna Bridge 142:4eea097334d6 371 }
Anna Bridge 142:4eea097334d6 372 #elif defined(USART_INPUT_RXPRS) && defined(USART_CTRL_MVDIS)
Anna Bridge 142:4eea097334d6 373 #define USART_INITASYNC_DEFAULT \
Anna Bridge 142:4eea097334d6 374 { \
Anna Bridge 142:4eea097334d6 375 usartEnable, /* Enable RX/TX when init completed. */ \
Anna Bridge 142:4eea097334d6 376 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 377 115200, /* 115200 bits/s. */ \
Anna Bridge 142:4eea097334d6 378 usartOVS16, /* 16x oversampling. */ \
Anna Bridge 142:4eea097334d6 379 usartDatabits8, /* 8 databits. */ \
Anna Bridge 142:4eea097334d6 380 usartNoParity, /* No parity. */ \
Anna Bridge 142:4eea097334d6 381 usartStopbits1, /* 1 stopbit. */ \
Anna Bridge 142:4eea097334d6 382 false, /* Do not disable majority vote. */ \
Anna Bridge 142:4eea097334d6 383 false, /* Not USART PRS input mode. */ \
Anna Bridge 142:4eea097334d6 384 usartPrsRxCh0 /* PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 385 }
Anna Bridge 142:4eea097334d6 386 #else
Anna Bridge 142:4eea097334d6 387 #define USART_INITASYNC_DEFAULT \
Anna Bridge 142:4eea097334d6 388 { \
Anna Bridge 142:4eea097334d6 389 usartEnable, /* Enable RX/TX when init completed. */ \
Anna Bridge 142:4eea097334d6 390 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 391 115200, /* 115200 bits/s. */ \
Anna Bridge 142:4eea097334d6 392 usartOVS16, /* 16x oversampling. */ \
Anna Bridge 142:4eea097334d6 393 usartDatabits8, /* 8 databits. */ \
Anna Bridge 142:4eea097334d6 394 usartNoParity, /* No parity. */ \
Anna Bridge 142:4eea097334d6 395 usartStopbits1 /* 1 stopbit. */ \
Anna Bridge 142:4eea097334d6 396 }
Anna Bridge 142:4eea097334d6 397 #endif
Anna Bridge 142:4eea097334d6 398
Anna Bridge 142:4eea097334d6 399 /** Default config for USART PRS triggering structure. */
Anna Bridge 142:4eea097334d6 400 #if defined(USART_TRIGCTRL_AUTOTXTEN)
Anna Bridge 142:4eea097334d6 401 #define USART_INITPRSTRIGGER_DEFAULT \
Anna Bridge 142:4eea097334d6 402 { \
Anna Bridge 142:4eea097334d6 403 false, /* Do not enable autoTX triggering. */ \
Anna Bridge 142:4eea097334d6 404 false, /* Do not enable receive triggering. */ \
Anna Bridge 142:4eea097334d6 405 false, /* Do not enable transmit triggering. */ \
Anna Bridge 142:4eea097334d6 406 usartPrsTriggerCh0 /* Set default channel to zero. */ \
Anna Bridge 142:4eea097334d6 407 }
Anna Bridge 142:4eea097334d6 408 #else
Anna Bridge 142:4eea097334d6 409 #define USART_INITPRSTRIGGER_DEFAULT \
Anna Bridge 142:4eea097334d6 410 { \
Anna Bridge 142:4eea097334d6 411 false, /* Do not enable receive triggering. */ \
Anna Bridge 142:4eea097334d6 412 false, /* Do not enable transmit triggering. */ \
Anna Bridge 142:4eea097334d6 413 usartPrsTriggerCh0 /* Set default channel to zero. */ \
Anna Bridge 142:4eea097334d6 414 }
Anna Bridge 142:4eea097334d6 415 #endif
Anna Bridge 142:4eea097334d6 416
Anna Bridge 142:4eea097334d6 417 /** Synchronous mode init structure. */
Anna Bridge 142:4eea097334d6 418 typedef struct
Anna Bridge 142:4eea097334d6 419 {
Anna Bridge 142:4eea097334d6 420 /** Specifies whether TX and/or RX shall be enabled when init completed. */
Anna Bridge 142:4eea097334d6 421 USART_Enable_TypeDef enable;
Anna Bridge 142:4eea097334d6 422
Anna Bridge 142:4eea097334d6 423 /**
Anna Bridge 142:4eea097334d6 424 * USART/UART reference clock assumed when configuring baudrate setup. Set
Anna Bridge 142:4eea097334d6 425 * it to 0 if currently configurated reference clock shall be used.
Anna Bridge 142:4eea097334d6 426 */
Anna Bridge 142:4eea097334d6 427 uint32_t refFreq;
Anna Bridge 142:4eea097334d6 428
Anna Bridge 142:4eea097334d6 429 /** Desired baudrate. */
Anna Bridge 142:4eea097334d6 430 uint32_t baudrate;
Anna Bridge 142:4eea097334d6 431
Anna Bridge 142:4eea097334d6 432 /** Number of databits in frame. */
Anna Bridge 142:4eea097334d6 433 USART_Databits_TypeDef databits;
Anna Bridge 142:4eea097334d6 434
Anna Bridge 142:4eea097334d6 435 /** Select if to operate in master or slave mode. */
Anna Bridge 142:4eea097334d6 436 bool master;
Anna Bridge 142:4eea097334d6 437
Anna Bridge 142:4eea097334d6 438 /** Select if to send most or least significant bit first. */
Anna Bridge 142:4eea097334d6 439 bool msbf;
Anna Bridge 142:4eea097334d6 440
Anna Bridge 142:4eea097334d6 441 /** Clock polarity/phase mode. */
Anna Bridge 142:4eea097334d6 442 USART_ClockMode_TypeDef clockMode;
Anna Bridge 142:4eea097334d6 443
Anna Bridge 142:4eea097334d6 444 #if defined(USART_INPUT_RXPRS) && defined(USART_TRIGCTRL_AUTOTXTEN)
Anna Bridge 142:4eea097334d6 445 /** Enable USART Rx via PRS. */
Anna Bridge 142:4eea097334d6 446 bool prsRxEnable;
Anna Bridge 142:4eea097334d6 447
Anna Bridge 142:4eea097334d6 448 /** Select PRS channel for USART Rx. (Only valid if prsRxEnable is true). */
Anna Bridge 142:4eea097334d6 449 USART_PrsRxCh_TypeDef prsRxCh;
Anna Bridge 142:4eea097334d6 450
Anna Bridge 142:4eea097334d6 451 /** Enable AUTOTX mode. Transmits as long as RX is not full.
Anna Bridge 142:4eea097334d6 452 * If TX is empty, underflows are generated. */
Anna Bridge 142:4eea097334d6 453 bool autoTx;
Anna Bridge 142:4eea097334d6 454 #endif
Anna Bridge 142:4eea097334d6 455 #if defined(_USART_TIMING_CSHOLD_MASK)
Anna Bridge 142:4eea097334d6 456 /** Auto CS enabling */
Anna Bridge 142:4eea097334d6 457 bool autoCsEnable;
Anna Bridge 142:4eea097334d6 458 /** Auto CS hold time in baud cycles */
Anna Bridge 142:4eea097334d6 459 uint8_t autoCsHold;
Anna Bridge 142:4eea097334d6 460 /** Auto CS setup time in baud cycles */
Anna Bridge 142:4eea097334d6 461 uint8_t autoCsSetup;
Anna Bridge 142:4eea097334d6 462 #endif
Anna Bridge 142:4eea097334d6 463 } USART_InitSync_TypeDef;
Anna Bridge 142:4eea097334d6 464
Anna Bridge 142:4eea097334d6 465 /** Default config for USART sync init structure. */
Anna Bridge 142:4eea097334d6 466 #if defined(_USART_TIMING_CSHOLD_MASK)
Anna Bridge 142:4eea097334d6 467 #define USART_INITSYNC_DEFAULT \
Anna Bridge 142:4eea097334d6 468 { \
Anna Bridge 142:4eea097334d6 469 usartEnable, /* Enable RX/TX when init completed. */ \
Anna Bridge 142:4eea097334d6 470 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 471 1000000, /* 1 Mbits/s. */ \
Anna Bridge 142:4eea097334d6 472 usartDatabits8, /* 8 databits. */ \
Anna Bridge 142:4eea097334d6 473 true, /* Master mode. */ \
Anna Bridge 142:4eea097334d6 474 false, /* Send least significant bit first. */ \
Anna Bridge 142:4eea097334d6 475 usartClockMode0, /* Clock idle low, sample on rising edge. */ \
Anna Bridge 142:4eea097334d6 476 false, /* Not USART PRS input mode. */ \
Anna Bridge 142:4eea097334d6 477 usartPrsRxCh0, /* PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 478 false, /* No AUTOTX mode. */ \
Anna Bridge 142:4eea097334d6 479 false, /* No AUTOCS mode */ \
Anna Bridge 142:4eea097334d6 480 0, /* Auto CS Hold cycles */ \
Anna Bridge 142:4eea097334d6 481 0 /* Auto CS Setup cycles */ \
Anna Bridge 142:4eea097334d6 482 }
Anna Bridge 142:4eea097334d6 483 #elif defined(USART_INPUT_RXPRS) && defined(USART_TRIGCTRL_AUTOTXTEN)
Anna Bridge 142:4eea097334d6 484 #define USART_INITSYNC_DEFAULT \
Anna Bridge 142:4eea097334d6 485 { \
Anna Bridge 142:4eea097334d6 486 usartEnable, /* Enable RX/TX when init completed. */ \
Anna Bridge 142:4eea097334d6 487 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 488 1000000, /* 1 Mbits/s. */ \
Anna Bridge 142:4eea097334d6 489 usartDatabits8, /* 8 databits. */ \
Anna Bridge 142:4eea097334d6 490 true, /* Master mode. */ \
Anna Bridge 142:4eea097334d6 491 false, /* Send least significant bit first. */ \
Anna Bridge 142:4eea097334d6 492 usartClockMode0, /* Clock idle low, sample on rising edge. */ \
Anna Bridge 142:4eea097334d6 493 false, /* Not USART PRS input mode. */ \
Anna Bridge 142:4eea097334d6 494 usartPrsRxCh0, /* PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 495 false /* No AUTOTX mode. */ \
Anna Bridge 142:4eea097334d6 496 }
Anna Bridge 142:4eea097334d6 497 #else
Anna Bridge 142:4eea097334d6 498 #define USART_INITSYNC_DEFAULT \
Anna Bridge 142:4eea097334d6 499 { \
Anna Bridge 142:4eea097334d6 500 usartEnable, /* Enable RX/TX when init completed. */ \
Anna Bridge 142:4eea097334d6 501 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 502 1000000, /* 1 Mbits/s. */ \
Anna Bridge 142:4eea097334d6 503 usartDatabits8, /* 8 databits. */ \
Anna Bridge 142:4eea097334d6 504 true, /* Master mode. */ \
Anna Bridge 142:4eea097334d6 505 false, /* Send least significant bit first. */ \
Anna Bridge 142:4eea097334d6 506 usartClockMode0 /* Clock idle low, sample on rising edge. */ \
Anna Bridge 142:4eea097334d6 507 }
Anna Bridge 142:4eea097334d6 508 #endif
Anna Bridge 142:4eea097334d6 509
Anna Bridge 142:4eea097334d6 510
Anna Bridge 142:4eea097334d6 511 /** IrDA mode init structure. Inherited from asynchronous mode init structure */
Anna Bridge 142:4eea097334d6 512 typedef struct
Anna Bridge 142:4eea097334d6 513 {
Anna Bridge 142:4eea097334d6 514 /** General Async initialization structure. */
Anna Bridge 142:4eea097334d6 515 USART_InitAsync_TypeDef async;
Anna Bridge 142:4eea097334d6 516
Anna Bridge 142:4eea097334d6 517 /** Set to invert Rx signal before IrDA demodulator. */
Anna Bridge 142:4eea097334d6 518 bool irRxInv;
Anna Bridge 142:4eea097334d6 519
Anna Bridge 142:4eea097334d6 520 /** Set to enable filter on IrDA demodulator. */
Anna Bridge 142:4eea097334d6 521 bool irFilt;
Anna Bridge 142:4eea097334d6 522
Anna Bridge 142:4eea097334d6 523 /** Configure the pulse width generated by the IrDA modulator as a fraction
Anna Bridge 142:4eea097334d6 524 * of the configured USART bit period. */
Anna Bridge 142:4eea097334d6 525 USART_IrDAPw_Typedef irPw;
Anna Bridge 142:4eea097334d6 526
Anna Bridge 142:4eea097334d6 527 /** Enable the PRS channel selected by irPrsSel as input to IrDA module
Anna Bridge 142:4eea097334d6 528 * instead of TX. */
Anna Bridge 142:4eea097334d6 529 bool irPrsEn;
Anna Bridge 142:4eea097334d6 530
Anna Bridge 142:4eea097334d6 531 /** A PRS can be used as input to the pulse modulator instead of TX.
Anna Bridge 142:4eea097334d6 532 * This value selects the channel to use. */
Anna Bridge 142:4eea097334d6 533 USART_IrDAPrsSel_Typedef irPrsSel;
Anna Bridge 142:4eea097334d6 534 } USART_InitIrDA_TypeDef;
Anna Bridge 142:4eea097334d6 535
Anna Bridge 142:4eea097334d6 536
Anna Bridge 142:4eea097334d6 537 /** Default config for IrDA mode init structure. */
Anna Bridge 142:4eea097334d6 538 #if defined(_USART_TIMING_CSHOLD_MASK) && defined(USART_CTRL_MVDIS)
Anna Bridge 142:4eea097334d6 539 #define USART_INITIRDA_DEFAULT \
Anna Bridge 142:4eea097334d6 540 { \
Anna Bridge 142:4eea097334d6 541 { \
Anna Bridge 142:4eea097334d6 542 usartEnable, /* Enable RX/TX when init completed. */ \
Anna Bridge 142:4eea097334d6 543 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 544 115200, /* 115200 bits/s. */ \
Anna Bridge 142:4eea097334d6 545 usartOVS16, /* 16x oversampling. */ \
Anna Bridge 142:4eea097334d6 546 usartDatabits8, /* 8 databits. */ \
Anna Bridge 142:4eea097334d6 547 usartEvenParity, /* Even parity. */ \
Anna Bridge 142:4eea097334d6 548 usartStopbits1, /* 1 stopbit. */ \
Anna Bridge 142:4eea097334d6 549 false, /* Do not disable majority vote. */ \
Anna Bridge 142:4eea097334d6 550 false, /* Not USART PRS input mode. */ \
Anna Bridge 142:4eea097334d6 551 usartPrsRxCh0, /* PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 552 false, /* Auto CS functionality enable/disable switch */ \
Anna Bridge 142:4eea097334d6 553 0, /* Auto CS Hold cycles */ \
Anna Bridge 142:4eea097334d6 554 0 /* Auto CS Setup cycles */ \
Anna Bridge 142:4eea097334d6 555 }, \
Anna Bridge 142:4eea097334d6 556 false, /* Rx invert disabled. */ \
Anna Bridge 142:4eea097334d6 557 false, /* Filtering disabled. */ \
Anna Bridge 142:4eea097334d6 558 usartIrDAPwTHREE, /* Pulse width is set to ONE. */ \
Anna Bridge 142:4eea097334d6 559 false, /* Routing to PRS is disabled. */ \
Anna Bridge 142:4eea097334d6 560 usartIrDAPrsCh0 /* PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 561 }
Anna Bridge 142:4eea097334d6 562 #elif defined(USART_INPUT_RXPRS) && defined(USART_CTRL_MVDIS)
Anna Bridge 142:4eea097334d6 563 #define USART_INITIRDA_DEFAULT \
Anna Bridge 142:4eea097334d6 564 { \
Anna Bridge 142:4eea097334d6 565 { \
Anna Bridge 142:4eea097334d6 566 usartEnable, /* Enable RX/TX when init completed. */ \
Anna Bridge 142:4eea097334d6 567 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 568 115200, /* 115200 bits/s. */ \
Anna Bridge 142:4eea097334d6 569 usartOVS16, /* 16x oversampling. */ \
Anna Bridge 142:4eea097334d6 570 usartDatabits8, /* 8 databits. */ \
Anna Bridge 142:4eea097334d6 571 usartEvenParity, /* Even parity. */ \
Anna Bridge 142:4eea097334d6 572 usartStopbits1, /* 1 stopbit. */ \
Anna Bridge 142:4eea097334d6 573 false, /* Do not disable majority vote. */ \
Anna Bridge 142:4eea097334d6 574 false, /* Not USART PRS input mode. */ \
Anna Bridge 142:4eea097334d6 575 usartPrsRxCh0 /* PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 576 }, \
Anna Bridge 142:4eea097334d6 577 false, /* Rx invert disabled. */ \
Anna Bridge 142:4eea097334d6 578 false, /* Filtering disabled. */ \
Anna Bridge 142:4eea097334d6 579 usartIrDAPwTHREE, /* Pulse width is set to ONE. */ \
Anna Bridge 142:4eea097334d6 580 false, /* Routing to PRS is disabled. */ \
Anna Bridge 142:4eea097334d6 581 usartIrDAPrsCh0 /* PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 582 }
Anna Bridge 142:4eea097334d6 583 #else
Anna Bridge 142:4eea097334d6 584 #define USART_INITIRDA_DEFAULT \
Anna Bridge 142:4eea097334d6 585 { \
Anna Bridge 142:4eea097334d6 586 { \
Anna Bridge 142:4eea097334d6 587 usartEnable, /* Enable RX/TX when init completed. */ \
Anna Bridge 142:4eea097334d6 588 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 589 115200, /* 115200 bits/s. */ \
Anna Bridge 142:4eea097334d6 590 usartOVS16, /* 16x oversampling. */ \
Anna Bridge 142:4eea097334d6 591 usartDatabits8, /* 8 databits. */ \
Anna Bridge 142:4eea097334d6 592 usartEvenParity, /* Even parity. */ \
Anna Bridge 142:4eea097334d6 593 usartStopbits1 /* 1 stopbit. */ \
Anna Bridge 142:4eea097334d6 594 }, \
Anna Bridge 142:4eea097334d6 595 false, /* Rx invert disabled. */ \
Anna Bridge 142:4eea097334d6 596 false, /* Filtering disabled. */ \
Anna Bridge 142:4eea097334d6 597 usartIrDAPwTHREE, /* Pulse width is set to ONE. */ \
Anna Bridge 142:4eea097334d6 598 false, /* Routing to PRS is disabled. */ \
Anna Bridge 142:4eea097334d6 599 usartIrDAPrsCh0 /* PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 600 }
Anna Bridge 142:4eea097334d6 601 #endif
Anna Bridge 142:4eea097334d6 602
Anna Bridge 142:4eea097334d6 603 #if defined(_USART_I2SCTRL_MASK)
Anna Bridge 142:4eea097334d6 604 /** I2S mode init structure. Inherited from synchronous mode init structure */
Anna Bridge 142:4eea097334d6 605 typedef struct
Anna Bridge 142:4eea097334d6 606 {
Anna Bridge 142:4eea097334d6 607 /** General Sync initialization structure. */
Anna Bridge 142:4eea097334d6 608 USART_InitSync_TypeDef sync;
Anna Bridge 142:4eea097334d6 609
Anna Bridge 142:4eea097334d6 610 /** I2S mode. */
Anna Bridge 142:4eea097334d6 611 USART_I2sFormat_TypeDef format;
Anna Bridge 142:4eea097334d6 612
Anna Bridge 142:4eea097334d6 613 /** Delay on I2S data. Set to add a one-cycle delay between a transition
Anna Bridge 142:4eea097334d6 614 * on the word-clock and the start of the I2S word.
Anna Bridge 142:4eea097334d6 615 * Should be set for standard I2S format. */
Anna Bridge 142:4eea097334d6 616 bool delay;
Anna Bridge 142:4eea097334d6 617
Anna Bridge 142:4eea097334d6 618 /** Separate DMA Request For Left/Right Data. */
Anna Bridge 142:4eea097334d6 619 bool dmaSplit;
Anna Bridge 142:4eea097334d6 620
Anna Bridge 142:4eea097334d6 621 /** Justification of I2S data within the frame */
Anna Bridge 142:4eea097334d6 622 USART_I2sJustify_TypeDef justify;
Anna Bridge 142:4eea097334d6 623
Anna Bridge 142:4eea097334d6 624 /** Stero or Mono, set to true for mono. */
Anna Bridge 142:4eea097334d6 625 bool mono;
Anna Bridge 142:4eea097334d6 626 } USART_InitI2s_TypeDef;
Anna Bridge 142:4eea097334d6 627
Anna Bridge 142:4eea097334d6 628
Anna Bridge 142:4eea097334d6 629 /** Default config for I2S mode init structure. */
Anna Bridge 142:4eea097334d6 630 #if defined(_USART_TIMING_CSHOLD_MASK)
Anna Bridge 142:4eea097334d6 631 #define USART_INITI2S_DEFAULT \
Anna Bridge 142:4eea097334d6 632 { \
Anna Bridge 142:4eea097334d6 633 { \
Anna Bridge 142:4eea097334d6 634 usartEnableTx, /* Enable TX when init completed. */ \
Anna Bridge 142:4eea097334d6 635 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 636 1000000, /* Baudrate 1M bits/s. */ \
Anna Bridge 142:4eea097334d6 637 usartDatabits16, /* 16 databits. */ \
Anna Bridge 142:4eea097334d6 638 true, /* Operate as I2S master. */ \
Anna Bridge 142:4eea097334d6 639 true, /* Most significant bit first. */ \
Anna Bridge 142:4eea097334d6 640 usartClockMode0, /* Clock idle low, sample on rising edge. */ \
Anna Bridge 142:4eea097334d6 641 false, /* Don't enable USARTRx via PRS. */ \
Anna Bridge 142:4eea097334d6 642 usartPrsRxCh0, /* PRS channel selection (dummy). */ \
Anna Bridge 142:4eea097334d6 643 false, /* Disable AUTOTX mode. */ \
Anna Bridge 142:4eea097334d6 644 false, /* No AUTOCS mode */ \
Anna Bridge 142:4eea097334d6 645 0, /* Auto CS Hold cycles */ \
Anna Bridge 142:4eea097334d6 646 0 /* Auto CS Setup cycles */ \
Anna Bridge 142:4eea097334d6 647 }, \
Anna Bridge 142:4eea097334d6 648 usartI2sFormatW16D16, /* 16-bit word, 16-bit data */ \
Anna Bridge 142:4eea097334d6 649 true, /* Delay on I2S data. */ \
Anna Bridge 142:4eea097334d6 650 false, /* No DMA split. */ \
Anna Bridge 142:4eea097334d6 651 usartI2sJustifyLeft, /* Data is left-justified within the frame */ \
Anna Bridge 142:4eea097334d6 652 false /* Stereo mode. */ \
Anna Bridge 142:4eea097334d6 653 }
Anna Bridge 142:4eea097334d6 654 #else
Anna Bridge 142:4eea097334d6 655 #define USART_INITI2S_DEFAULT \
Anna Bridge 142:4eea097334d6 656 { \
Anna Bridge 142:4eea097334d6 657 { \
Anna Bridge 142:4eea097334d6 658 usartEnableTx, /* Enable TX when init completed. */ \
Anna Bridge 142:4eea097334d6 659 0, /* Use current configured reference clock for configuring baudrate. */ \
Anna Bridge 142:4eea097334d6 660 1000000, /* Baudrate 1M bits/s. */ \
Anna Bridge 142:4eea097334d6 661 usartDatabits16, /* 16 databits. */ \
Anna Bridge 142:4eea097334d6 662 true, /* Operate as I2S master. */ \
Anna Bridge 142:4eea097334d6 663 true, /* Most significant bit first. */ \
Anna Bridge 142:4eea097334d6 664 usartClockMode0, /* Clock idle low, sample on rising edge. */ \
Anna Bridge 142:4eea097334d6 665 false, /* Don't enable USARTRx via PRS. */ \
Anna Bridge 142:4eea097334d6 666 usartPrsRxCh0, /* PRS channel selection (dummy). */ \
Anna Bridge 142:4eea097334d6 667 false /* Disable AUTOTX mode. */ \
Anna Bridge 142:4eea097334d6 668 }, \
Anna Bridge 142:4eea097334d6 669 usartI2sFormatW16D16, /* 16-bit word, 16-bit data */ \
Anna Bridge 142:4eea097334d6 670 true, /* Delay on I2S data. */ \
Anna Bridge 142:4eea097334d6 671 false, /* No DMA split. */ \
Anna Bridge 142:4eea097334d6 672 usartI2sJustifyLeft, /* Data is left-justified within the frame */ \
Anna Bridge 142:4eea097334d6 673 false /* Stereo mode. */ \
Anna Bridge 142:4eea097334d6 674 }
Anna Bridge 142:4eea097334d6 675 #endif
Anna Bridge 142:4eea097334d6 676 #endif
Anna Bridge 142:4eea097334d6 677
Anna Bridge 142:4eea097334d6 678 /*******************************************************************************
Anna Bridge 142:4eea097334d6 679 ***************************** PROTOTYPES **********************************
Anna Bridge 142:4eea097334d6 680 ******************************************************************************/
Anna Bridge 142:4eea097334d6 681
Anna Bridge 142:4eea097334d6 682 void USART_BaudrateAsyncSet(USART_TypeDef *usart,
Anna Bridge 142:4eea097334d6 683 uint32_t refFreq,
Anna Bridge 142:4eea097334d6 684 uint32_t baudrate,
Anna Bridge 142:4eea097334d6 685 USART_OVS_TypeDef ovs);
Anna Bridge 142:4eea097334d6 686 uint32_t USART_BaudrateCalc(uint32_t refFreq,
Anna Bridge 142:4eea097334d6 687 uint32_t clkdiv,
Anna Bridge 142:4eea097334d6 688 bool syncmode,
Anna Bridge 142:4eea097334d6 689 USART_OVS_TypeDef ovs);
Anna Bridge 142:4eea097334d6 690 uint32_t USART_BaudrateGet(USART_TypeDef *usart);
Anna Bridge 142:4eea097334d6 691 void USART_BaudrateSyncSet(USART_TypeDef *usart,
Anna Bridge 142:4eea097334d6 692 uint32_t refFreq,
Anna Bridge 142:4eea097334d6 693 uint32_t baudrate);
Anna Bridge 142:4eea097334d6 694 void USART_Enable(USART_TypeDef *usart, USART_Enable_TypeDef enable);
Anna Bridge 142:4eea097334d6 695
Anna Bridge 142:4eea097334d6 696 void USART_InitAsync(USART_TypeDef *usart, const USART_InitAsync_TypeDef *init);
Anna Bridge 142:4eea097334d6 697 void USART_InitSync(USART_TypeDef *usart, const USART_InitSync_TypeDef *init);
Anna Bridge 142:4eea097334d6 698 void USARTn_InitIrDA(USART_TypeDef *usart, const USART_InitIrDA_TypeDef *init);
Anna Bridge 142:4eea097334d6 699
Anna Bridge 142:4eea097334d6 700 #if defined(_USART_I2SCTRL_MASK)
Anna Bridge 142:4eea097334d6 701 void USART_InitI2s(USART_TypeDef *usart, USART_InitI2s_TypeDef *init);
Anna Bridge 142:4eea097334d6 702 #endif
Anna Bridge 142:4eea097334d6 703 void USART_InitPrsTrigger(USART_TypeDef *usart, const USART_PrsTriggerInit_TypeDef *init);
Anna Bridge 142:4eea097334d6 704
Anna Bridge 142:4eea097334d6 705 #if defined(DEFAULT_IRDA_USART) || defined(USART0) || ((USART_COUNT == 1) && defined(USART1))
Anna Bridge 142:4eea097334d6 706 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 707 * @brief
Anna Bridge 142:4eea097334d6 708 * Init DEFAULT_IRDA_USART for asynchronous IrDA mode.
Anna Bridge 142:4eea097334d6 709 *
Anna Bridge 142:4eea097334d6 710 * @details
Anna Bridge 142:4eea097334d6 711 * This function will configure basic settings in order to operate in
Anna Bridge 142:4eea097334d6 712 * asynchronous IrDA mode.
Anna Bridge 142:4eea097334d6 713 *
Anna Bridge 142:4eea097334d6 714 * Special control setup not covered by this function must be done after
Anna Bridge 142:4eea097334d6 715 * using this function by direct modification of the CTRL and IRCTRL
Anna Bridge 142:4eea097334d6 716 * registers.
Anna Bridge 142:4eea097334d6 717 *
Anna Bridge 142:4eea097334d6 718 * Notice that pins used by the USART/UART module must be properly configured
Anna Bridge 142:4eea097334d6 719 * by the user explicitly, in order for the USART/UART to work as intended.
Anna Bridge 142:4eea097334d6 720 * (When configuring pins, one should remember to consider the sequence of
Anna Bridge 142:4eea097334d6 721 * configuration, in order to avoid unintended pulses/glitches on output
Anna Bridge 142:4eea097334d6 722 * pins.)
Anna Bridge 142:4eea097334d6 723 *
Anna Bridge 142:4eea097334d6 724 * @param[in] init
Anna Bridge 142:4eea097334d6 725 * Pointer to initialization structure used to configure async IrDA setup.
Anna Bridge 142:4eea097334d6 726 *
Anna Bridge 142:4eea097334d6 727 * @deprecated
Anna Bridge 142:4eea097334d6 728 * Deprecated function. New code should use USARTn_InitIrDA().
Anna Bridge 142:4eea097334d6 729 * This function uses DEFAULT_IRDA_USART, which unless otherwise specified, is
Anna Bridge 142:4eea097334d6 730 * USART0 on most devices, and USART1 on devices that don't have a USART0.
Anna Bridge 142:4eea097334d6 731 *
Anna Bridge 142:4eea097334d6 732 ******************************************************************************/
Anna Bridge 142:4eea097334d6 733 __STATIC_INLINE void USART_InitIrDA(const USART_InitIrDA_TypeDef *init)
Anna Bridge 142:4eea097334d6 734 {
Anna Bridge 142:4eea097334d6 735 #if defined(DEFAULT_IRDA_USART)
Anna Bridge 142:4eea097334d6 736 USART_TypeDef *usart = DEFAULT_IRDA_USART;
Anna Bridge 142:4eea097334d6 737 #elif (USART_COUNT == 1) && defined(USART1)
Anna Bridge 142:4eea097334d6 738 USART_TypeDef *usart = USART1;
Anna Bridge 142:4eea097334d6 739 #else
Anna Bridge 142:4eea097334d6 740 USART_TypeDef *usart = USART0;
Anna Bridge 142:4eea097334d6 741 #endif
Anna Bridge 142:4eea097334d6 742 USARTn_InitIrDA(usart, init);
Anna Bridge 142:4eea097334d6 743 }
Anna Bridge 142:4eea097334d6 744 #endif
Anna Bridge 142:4eea097334d6 745
Anna Bridge 142:4eea097334d6 746 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 747 * @brief
Anna Bridge 142:4eea097334d6 748 * Clear one or more pending USART interrupts.
Anna Bridge 142:4eea097334d6 749 *
Anna Bridge 142:4eea097334d6 750 * @param[in] usart
Anna Bridge 142:4eea097334d6 751 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 752 *
Anna Bridge 142:4eea097334d6 753 * @param[in] flags
Anna Bridge 142:4eea097334d6 754 * Pending USART/UART interrupt source(s) to clear. Use one or more valid
Anna Bridge 142:4eea097334d6 755 * interrupt flags for the USART module (USART_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 756 ******************************************************************************/
Anna Bridge 142:4eea097334d6 757 __STATIC_INLINE void USART_IntClear(USART_TypeDef *usart, uint32_t flags)
Anna Bridge 142:4eea097334d6 758 {
Anna Bridge 142:4eea097334d6 759 usart->IFC = flags;
Anna Bridge 142:4eea097334d6 760 }
Anna Bridge 142:4eea097334d6 761
Anna Bridge 142:4eea097334d6 762
Anna Bridge 142:4eea097334d6 763 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 764 * @brief
Anna Bridge 142:4eea097334d6 765 * Disable one or more USART interrupts.
Anna Bridge 142:4eea097334d6 766 *
Anna Bridge 142:4eea097334d6 767 * @param[in] usart
Anna Bridge 142:4eea097334d6 768 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 769 *
Anna Bridge 142:4eea097334d6 770 * @param[in] flags
Anna Bridge 142:4eea097334d6 771 * USART/UART interrupt source(s) to disable. Use one or more valid
Anna Bridge 142:4eea097334d6 772 * interrupt flags for the USART module (USART_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 773 ******************************************************************************/
Anna Bridge 142:4eea097334d6 774 __STATIC_INLINE void USART_IntDisable(USART_TypeDef *usart, uint32_t flags)
Anna Bridge 142:4eea097334d6 775 {
Anna Bridge 142:4eea097334d6 776 usart->IEN &= ~flags;
Anna Bridge 142:4eea097334d6 777 }
Anna Bridge 142:4eea097334d6 778
Anna Bridge 142:4eea097334d6 779
Anna Bridge 142:4eea097334d6 780 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 781 * @brief
Anna Bridge 142:4eea097334d6 782 * Enable one or more USART interrupts.
Anna Bridge 142:4eea097334d6 783 *
Anna Bridge 142:4eea097334d6 784 * @note
Anna Bridge 142:4eea097334d6 785 * Depending on the use, a pending interrupt may already be set prior to
Anna Bridge 142:4eea097334d6 786 * enabling the interrupt. Consider using USART_IntClear() prior to enabling
Anna Bridge 142:4eea097334d6 787 * if such a pending interrupt should be ignored.
Anna Bridge 142:4eea097334d6 788 *
Anna Bridge 142:4eea097334d6 789 * @param[in] usart
Anna Bridge 142:4eea097334d6 790 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 791 *
Anna Bridge 142:4eea097334d6 792 * @param[in] flags
Anna Bridge 142:4eea097334d6 793 * USART/UART interrupt source(s) to enable. Use one or more valid
Anna Bridge 142:4eea097334d6 794 * interrupt flags for the USART module (USART_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 795 ******************************************************************************/
Anna Bridge 142:4eea097334d6 796 __STATIC_INLINE void USART_IntEnable(USART_TypeDef *usart, uint32_t flags)
Anna Bridge 142:4eea097334d6 797 {
Anna Bridge 142:4eea097334d6 798 usart->IEN |= flags;
Anna Bridge 142:4eea097334d6 799 }
Anna Bridge 142:4eea097334d6 800
Anna Bridge 142:4eea097334d6 801
Anna Bridge 142:4eea097334d6 802 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 803 * @brief
Anna Bridge 142:4eea097334d6 804 * Get pending USART interrupt flags.
Anna Bridge 142:4eea097334d6 805 *
Anna Bridge 142:4eea097334d6 806 * @note
Anna Bridge 142:4eea097334d6 807 * The event bits are not cleared by the use of this function.
Anna Bridge 142:4eea097334d6 808 *
Anna Bridge 142:4eea097334d6 809 * @param[in] usart
Anna Bridge 142:4eea097334d6 810 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 811 *
Anna Bridge 142:4eea097334d6 812 * @return
Anna Bridge 142:4eea097334d6 813 * USART/UART interrupt source(s) pending. Returns one or more valid
Anna Bridge 142:4eea097334d6 814 * interrupt flags for the USART module (USART_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 815 ******************************************************************************/
Anna Bridge 142:4eea097334d6 816 __STATIC_INLINE uint32_t USART_IntGet(USART_TypeDef *usart)
Anna Bridge 142:4eea097334d6 817 {
Anna Bridge 142:4eea097334d6 818 return usart->IF;
Anna Bridge 142:4eea097334d6 819 }
Anna Bridge 142:4eea097334d6 820
Anna Bridge 142:4eea097334d6 821
Anna Bridge 142:4eea097334d6 822 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 823 * @brief
Anna Bridge 142:4eea097334d6 824 * Get enabled and pending USART interrupt flags.
Anna Bridge 142:4eea097334d6 825 * Useful for handling more interrupt sources in the same interrupt handler.
Anna Bridge 142:4eea097334d6 826 *
Anna Bridge 142:4eea097334d6 827 * @param[in] usart
Anna Bridge 142:4eea097334d6 828 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 829 *
Anna Bridge 142:4eea097334d6 830 * @note
Anna Bridge 142:4eea097334d6 831 * Interrupt flags are not cleared by the use of this function.
Anna Bridge 142:4eea097334d6 832 *
Anna Bridge 142:4eea097334d6 833 * @return
Anna Bridge 142:4eea097334d6 834 * Pending and enabled USART interrupt sources.
Anna Bridge 142:4eea097334d6 835 * The return value is the bitwise AND combination of
Anna Bridge 142:4eea097334d6 836 * - the OR combination of enabled interrupt sources in USARTx_IEN_nnn
Anna Bridge 142:4eea097334d6 837 * register (USARTx_IEN_nnn) and
Anna Bridge 142:4eea097334d6 838 * - the OR combination of valid interrupt flags of the USART module
Anna Bridge 142:4eea097334d6 839 * (USARTx_IF_nnn).
Anna Bridge 142:4eea097334d6 840 ******************************************************************************/
Anna Bridge 142:4eea097334d6 841 __STATIC_INLINE uint32_t USART_IntGetEnabled(USART_TypeDef *usart)
Anna Bridge 142:4eea097334d6 842 {
Anna Bridge 142:4eea097334d6 843 uint32_t ien;
Anna Bridge 142:4eea097334d6 844
Anna Bridge 142:4eea097334d6 845 /* Store USARTx->IEN in temporary variable in order to define explicit order
Anna Bridge 142:4eea097334d6 846 * of volatile accesses. */
Anna Bridge 142:4eea097334d6 847 ien = usart->IEN;
Anna Bridge 142:4eea097334d6 848
Anna Bridge 142:4eea097334d6 849 /* Bitwise AND of pending and enabled interrupts */
Anna Bridge 142:4eea097334d6 850 return usart->IF & ien;
Anna Bridge 142:4eea097334d6 851 }
Anna Bridge 142:4eea097334d6 852
Anna Bridge 142:4eea097334d6 853
Anna Bridge 142:4eea097334d6 854 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 855 * @brief
Anna Bridge 142:4eea097334d6 856 * Set one or more pending USART interrupts from SW.
Anna Bridge 142:4eea097334d6 857 *
Anna Bridge 142:4eea097334d6 858 * @param[in] usart
Anna Bridge 142:4eea097334d6 859 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 860 *
Anna Bridge 142:4eea097334d6 861 * @param[in] flags
Anna Bridge 142:4eea097334d6 862 * USART/UART interrupt source(s) to set to pending. Use one or more valid
Anna Bridge 142:4eea097334d6 863 * interrupt flags for the USART module (USART_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 864 ******************************************************************************/
Anna Bridge 142:4eea097334d6 865 __STATIC_INLINE void USART_IntSet(USART_TypeDef *usart, uint32_t flags)
Anna Bridge 142:4eea097334d6 866 {
Anna Bridge 142:4eea097334d6 867 usart->IFS = flags;
Anna Bridge 142:4eea097334d6 868 }
Anna Bridge 142:4eea097334d6 869
Anna Bridge 142:4eea097334d6 870
Anna Bridge 142:4eea097334d6 871 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 872 * @brief
Anna Bridge 142:4eea097334d6 873 * Get USART STATUS register.
Anna Bridge 142:4eea097334d6 874 *
Anna Bridge 142:4eea097334d6 875 * @param[in] usart
Anna Bridge 142:4eea097334d6 876 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 877 *
Anna Bridge 142:4eea097334d6 878 * @return
Anna Bridge 142:4eea097334d6 879 * STATUS register value.
Anna Bridge 142:4eea097334d6 880 *
Anna Bridge 142:4eea097334d6 881 ******************************************************************************/
Anna Bridge 142:4eea097334d6 882 __STATIC_INLINE uint32_t USART_StatusGet(USART_TypeDef *usart)
Anna Bridge 142:4eea097334d6 883 {
Anna Bridge 142:4eea097334d6 884 return usart->STATUS;
Anna Bridge 142:4eea097334d6 885 }
Anna Bridge 142:4eea097334d6 886
Anna Bridge 142:4eea097334d6 887 void USART_Reset(USART_TypeDef *usart);
Anna Bridge 142:4eea097334d6 888 uint8_t USART_Rx(USART_TypeDef *usart);
Anna Bridge 142:4eea097334d6 889 uint16_t USART_RxDouble(USART_TypeDef *usart);
Anna Bridge 142:4eea097334d6 890 uint32_t USART_RxDoubleExt(USART_TypeDef *usart);
Anna Bridge 142:4eea097334d6 891 uint16_t USART_RxExt(USART_TypeDef *usart);
Anna Bridge 142:4eea097334d6 892
Anna Bridge 142:4eea097334d6 893
Anna Bridge 142:4eea097334d6 894 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 895 * @brief
Anna Bridge 142:4eea097334d6 896 * Receive one 4-8 bit frame, (or part of 10-16 bit frame).
Anna Bridge 142:4eea097334d6 897 *
Anna Bridge 142:4eea097334d6 898 * @details
Anna Bridge 142:4eea097334d6 899 * This function is used to quickly receive one 4-8 bits frame by reading the
Anna Bridge 142:4eea097334d6 900 * RXDATA register directly, without checking the STATUS register for the
Anna Bridge 142:4eea097334d6 901 * RXDATAV flag. This can be useful from the RXDATAV interrupt handler,
Anna Bridge 142:4eea097334d6 902 * i.e. waiting is superfluous, in order to quickly read the received data.
Anna Bridge 142:4eea097334d6 903 * Please refer to @ref USART_RxDataXGet() for reception of 9 bit frames.
Anna Bridge 142:4eea097334d6 904 *
Anna Bridge 142:4eea097334d6 905 * @note
Anna Bridge 142:4eea097334d6 906 * Since this function does not check whether the RXDATA register actually
Anna Bridge 142:4eea097334d6 907 * holds valid data, it should only be used in situations when it is certain
Anna Bridge 142:4eea097334d6 908 * that there is valid data, ensured by some external program routine, e.g.
Anna Bridge 142:4eea097334d6 909 * like when handling an RXDATAV interrupt. The @ref USART_Rx() is normally a
Anna Bridge 142:4eea097334d6 910 * better choice if the validity of the RXDATA register is not certain.
Anna Bridge 142:4eea097334d6 911 *
Anna Bridge 142:4eea097334d6 912 * @note
Anna Bridge 142:4eea097334d6 913 * Notice that possible parity/stop bits in asynchronous mode are not
Anna Bridge 142:4eea097334d6 914 * considered part of specified frame bit length.
Anna Bridge 142:4eea097334d6 915 *
Anna Bridge 142:4eea097334d6 916 * @param[in] usart
Anna Bridge 142:4eea097334d6 917 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 918 *
Anna Bridge 142:4eea097334d6 919 * @return
Anna Bridge 142:4eea097334d6 920 * Data received.
Anna Bridge 142:4eea097334d6 921 ******************************************************************************/
Anna Bridge 142:4eea097334d6 922 __STATIC_INLINE uint8_t USART_RxDataGet(USART_TypeDef *usart)
Anna Bridge 142:4eea097334d6 923 {
Anna Bridge 142:4eea097334d6 924 return (uint8_t)usart->RXDATA;
Anna Bridge 142:4eea097334d6 925 }
Anna Bridge 142:4eea097334d6 926
Anna Bridge 142:4eea097334d6 927
Anna Bridge 142:4eea097334d6 928 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 929 * @brief
Anna Bridge 142:4eea097334d6 930 * Receive two 4-8 bit frames, or one 10-16 bit frame.
Anna Bridge 142:4eea097334d6 931 *
Anna Bridge 142:4eea097334d6 932 * @details
Anna Bridge 142:4eea097334d6 933 * This function is used to quickly receive one 10-16 bits frame or two 4-8
Anna Bridge 142:4eea097334d6 934 * bit frames by reading the RXDOUBLE register directly, without checking
Anna Bridge 142:4eea097334d6 935 * the STATUS register for the RXDATAV flag. This can be useful from the
Anna Bridge 142:4eea097334d6 936 * RXDATAV interrupt handler, i.e. waiting is superfluous, in order to
Anna Bridge 142:4eea097334d6 937 * quickly read the received data.
Anna Bridge 142:4eea097334d6 938 * This function is normally used to receive one frame when operating with
Anna Bridge 142:4eea097334d6 939 * frame length 10-16 bits. Please refer to @ref USART_RxDoubleXGet()
Anna Bridge 142:4eea097334d6 940 * for reception of two 9 bit frames.
Anna Bridge 142:4eea097334d6 941 *
Anna Bridge 142:4eea097334d6 942 * @note
Anna Bridge 142:4eea097334d6 943 * Since this function does not check whether the RXDOUBLE register actually
Anna Bridge 142:4eea097334d6 944 * holds valid data, it should only be used in situations when it is certain
Anna Bridge 142:4eea097334d6 945 * that there is valid data, ensured by some external program routine, e.g.
Anna Bridge 142:4eea097334d6 946 * like when handling an RXDATAV interrupt. The @ref USART_RxDouble() is
Anna Bridge 142:4eea097334d6 947 * normally a better choice if the validity of the RXDOUBLE register is not
Anna Bridge 142:4eea097334d6 948 * certain.
Anna Bridge 142:4eea097334d6 949 *
Anna Bridge 142:4eea097334d6 950 * @note
Anna Bridge 142:4eea097334d6 951 * Notice that possible parity/stop bits in asynchronous mode are not
Anna Bridge 142:4eea097334d6 952 * considered part of specified frame bit length.
Anna Bridge 142:4eea097334d6 953 *
Anna Bridge 142:4eea097334d6 954 * @param[in] usart
Anna Bridge 142:4eea097334d6 955 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 956 *
Anna Bridge 142:4eea097334d6 957 * @return
Anna Bridge 142:4eea097334d6 958 * Data received.
Anna Bridge 142:4eea097334d6 959 ******************************************************************************/
Anna Bridge 142:4eea097334d6 960 __STATIC_INLINE uint16_t USART_RxDoubleGet(USART_TypeDef *usart)
Anna Bridge 142:4eea097334d6 961 {
Anna Bridge 142:4eea097334d6 962 return (uint16_t)usart->RXDOUBLE;
Anna Bridge 142:4eea097334d6 963 }
Anna Bridge 142:4eea097334d6 964
Anna Bridge 142:4eea097334d6 965
Anna Bridge 142:4eea097334d6 966 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 967 * @brief
Anna Bridge 142:4eea097334d6 968 * Receive two 4-9 bit frames, or one 10-16 bit frame with extended
Anna Bridge 142:4eea097334d6 969 * information.
Anna Bridge 142:4eea097334d6 970 *
Anna Bridge 142:4eea097334d6 971 * @details
Anna Bridge 142:4eea097334d6 972 * This function is used to quickly receive one 10-16 bits frame or two 4-9
Anna Bridge 142:4eea097334d6 973 * bit frames by reading the RXDOUBLEX register directly, without checking
Anna Bridge 142:4eea097334d6 974 * the STATUS register for the RXDATAV flag. This can be useful from the
Anna Bridge 142:4eea097334d6 975 * RXDATAV interrupt handler, i.e. waiting is superfluous, in order to
Anna Bridge 142:4eea097334d6 976 * quickly read the received data.
Anna Bridge 142:4eea097334d6 977 *
Anna Bridge 142:4eea097334d6 978 * @note
Anna Bridge 142:4eea097334d6 979 * Since this function does not check whether the RXDOUBLEX register actually
Anna Bridge 142:4eea097334d6 980 * holds valid data, it should only be used in situations when it is certain
Anna Bridge 142:4eea097334d6 981 * that there is valid data, ensured by some external program routine, e.g.
Anna Bridge 142:4eea097334d6 982 * like when handling an RXDATAV interrupt. The @ref USART_RxDoubleExt() is
Anna Bridge 142:4eea097334d6 983 * normally a better choice if the validity of the RXDOUBLEX register is not
Anna Bridge 142:4eea097334d6 984 * certain.
Anna Bridge 142:4eea097334d6 985 *
Anna Bridge 142:4eea097334d6 986 * @note
Anna Bridge 142:4eea097334d6 987 * Notice that possible parity/stop bits in asynchronous mode are not
Anna Bridge 142:4eea097334d6 988 * considered part of specified frame bit length.
Anna Bridge 142:4eea097334d6 989 *
Anna Bridge 142:4eea097334d6 990 * @param[in] usart
Anna Bridge 142:4eea097334d6 991 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 992 *
Anna Bridge 142:4eea097334d6 993 * @return
Anna Bridge 142:4eea097334d6 994 * Data received.
Anna Bridge 142:4eea097334d6 995 ******************************************************************************/
Anna Bridge 142:4eea097334d6 996 __STATIC_INLINE uint32_t USART_RxDoubleXGet(USART_TypeDef *usart)
Anna Bridge 142:4eea097334d6 997 {
Anna Bridge 142:4eea097334d6 998 return usart->RXDOUBLEX;
Anna Bridge 142:4eea097334d6 999 }
Anna Bridge 142:4eea097334d6 1000
Anna Bridge 142:4eea097334d6 1001
Anna Bridge 142:4eea097334d6 1002 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 1003 * @brief
Anna Bridge 142:4eea097334d6 1004 * Receive one 4-9 bit frame, (or part of 10-16 bit frame) with extended
Anna Bridge 142:4eea097334d6 1005 * information.
Anna Bridge 142:4eea097334d6 1006 *
Anna Bridge 142:4eea097334d6 1007 * @details
Anna Bridge 142:4eea097334d6 1008 * This function is used to quickly receive one 4-9 bit frame, (or part of
Anna Bridge 142:4eea097334d6 1009 * 10-16 bit frame) with extended information by reading the RXDATAX register
Anna Bridge 142:4eea097334d6 1010 * directly, without checking the STATUS register for the RXDATAV flag. This
Anna Bridge 142:4eea097334d6 1011 * can be useful from the RXDATAV interrupt handler, i.e. waiting is
Anna Bridge 142:4eea097334d6 1012 * superfluous, in order to quickly read the received data.
Anna Bridge 142:4eea097334d6 1013 *
Anna Bridge 142:4eea097334d6 1014 * @note
Anna Bridge 142:4eea097334d6 1015 * Since this function does not check whether the RXDATAX register actually
Anna Bridge 142:4eea097334d6 1016 * holds valid data, it should only be used in situations when it is certain
Anna Bridge 142:4eea097334d6 1017 * that there is valid data, ensured by some external program routine, e.g.
Anna Bridge 142:4eea097334d6 1018 * like when handling an RXDATAV interrupt. The @ref USART_RxExt() is normally
Anna Bridge 142:4eea097334d6 1019 * a better choice if the validity of the RXDATAX register is not certain.
Anna Bridge 142:4eea097334d6 1020 *
Anna Bridge 142:4eea097334d6 1021 * @note
Anna Bridge 142:4eea097334d6 1022 * Notice that possible parity/stop bits in asynchronous mode are not
Anna Bridge 142:4eea097334d6 1023 * considered part of specified frame bit length.
Anna Bridge 142:4eea097334d6 1024 *
Anna Bridge 142:4eea097334d6 1025 * @param[in] usart
Anna Bridge 142:4eea097334d6 1026 * Pointer to USART/UART peripheral register block.
Anna Bridge 142:4eea097334d6 1027 *
Anna Bridge 142:4eea097334d6 1028 * @return
Anna Bridge 142:4eea097334d6 1029 * Data received.
Anna Bridge 142:4eea097334d6 1030 ******************************************************************************/
Anna Bridge 142:4eea097334d6 1031 __STATIC_INLINE uint16_t USART_RxDataXGet(USART_TypeDef *usart)
Anna Bridge 142:4eea097334d6 1032 {
Anna Bridge 142:4eea097334d6 1033 return (uint16_t)usart->RXDATAX;
Anna Bridge 142:4eea097334d6 1034 }
Anna Bridge 142:4eea097334d6 1035
Anna Bridge 142:4eea097334d6 1036 uint8_t USART_SpiTransfer(USART_TypeDef *usart, uint8_t data);
Anna Bridge 142:4eea097334d6 1037 void USART_Tx(USART_TypeDef *usart, uint8_t data);
Anna Bridge 142:4eea097334d6 1038 void USART_TxDouble(USART_TypeDef *usart, uint16_t data);
Anna Bridge 142:4eea097334d6 1039 void USART_TxDoubleExt(USART_TypeDef *usart, uint32_t data);
Anna Bridge 142:4eea097334d6 1040 void USART_TxExt(USART_TypeDef *usart, uint16_t data);
Anna Bridge 142:4eea097334d6 1041
Anna Bridge 142:4eea097334d6 1042
Anna Bridge 142:4eea097334d6 1043 /** @} (end addtogroup USART) */
Anna Bridge 142:4eea097334d6 1044 /** @} (end addtogroup emlib) */
Anna Bridge 142:4eea097334d6 1045
Anna Bridge 142:4eea097334d6 1046 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 1047 }
Anna Bridge 142:4eea097334d6 1048 #endif
Anna Bridge 142:4eea097334d6 1049
Anna Bridge 142:4eea097334d6 1050 #endif /* defined(USART_COUNT) && (USART_COUNT > 0) */
Anna Bridge 142:4eea097334d6 1051 #endif /* EM_USART_H */