EFM32 Zero Gecko Software Documentation  efm32zg-doc-4.2.1

Universal Synchronous/Asynchronous Receiver/Transmitter (USART) peripheral API

. More...

Data Structures

struct  USART_InitAsync_TypeDef
 
struct  USART_PrsTriggerInit_TypeDef
 
struct  USART_InitSync_TypeDef
 
struct  USART_InitIrDA_TypeDef
 
struct  USART_InitI2s_TypeDef
 

Macros

#define USART_INITASYNC_DEFAULT
 
#define USART_INITPRSTRIGGER_DEFAULT
 
#define USART_INITSYNC_DEFAULT
 
#define USART_INITIRDA_DEFAULT
 
#define USART_INITI2S_DEFAULT
 

Enumerations

enum  USART_Databits_TypeDef {
  usartDatabits4 = USART_FRAME_DATABITS_FOUR,
  usartDatabits5 = USART_FRAME_DATABITS_FIVE,
  usartDatabits6 = USART_FRAME_DATABITS_SIX,
  usartDatabits7 = USART_FRAME_DATABITS_SEVEN,
  usartDatabits8 = USART_FRAME_DATABITS_EIGHT,
  usartDatabits9 = USART_FRAME_DATABITS_NINE,
  usartDatabits10 = USART_FRAME_DATABITS_TEN,
  usartDatabits11 = USART_FRAME_DATABITS_ELEVEN,
  usartDatabits12 = USART_FRAME_DATABITS_TWELVE,
  usartDatabits13 = USART_FRAME_DATABITS_THIRTEEN,
  usartDatabits14 = USART_FRAME_DATABITS_FOURTEEN,
  usartDatabits15 = USART_FRAME_DATABITS_FIFTEEN,
  usartDatabits16 = USART_FRAME_DATABITS_SIXTEEN
}
 
enum  USART_Enable_TypeDef {
  usartDisable = 0x0,
  usartEnableRx = USART_CMD_RXEN,
  usartEnableTx = USART_CMD_TXEN,
  usartEnable = (USART_CMD_RXEN | USART_CMD_TXEN)
}
 
enum  USART_OVS_TypeDef {
  usartOVS16 = USART_CTRL_OVS_X16,
  usartOVS8 = USART_CTRL_OVS_X8,
  usartOVS6 = USART_CTRL_OVS_X6,
  usartOVS4 = USART_CTRL_OVS_X4
}
 
enum  USART_Parity_TypeDef {
  usartNoParity = USART_FRAME_PARITY_NONE,
  usartEvenParity = USART_FRAME_PARITY_EVEN,
  usartOddParity = USART_FRAME_PARITY_ODD
}
 
enum  USART_Stopbits_TypeDef {
  usartStopbits0p5 = USART_FRAME_STOPBITS_HALF,
  usartStopbits1 = USART_FRAME_STOPBITS_ONE,
  usartStopbits1p5 = USART_FRAME_STOPBITS_ONEANDAHALF,
  usartStopbits2 = USART_FRAME_STOPBITS_TWO
}
 
enum  USART_ClockMode_TypeDef {
  usartClockMode0 = USART_CTRL_CLKPOL_IDLELOW | USART_CTRL_CLKPHA_SAMPLELEADING,
  usartClockMode1 = USART_CTRL_CLKPOL_IDLELOW | USART_CTRL_CLKPHA_SAMPLETRAILING,
  usartClockMode2 = USART_CTRL_CLKPOL_IDLEHIGH | USART_CTRL_CLKPHA_SAMPLELEADING,
  usartClockMode3 = USART_CTRL_CLKPOL_IDLEHIGH | USART_CTRL_CLKPHA_SAMPLETRAILING
}
 
enum  USART_IrDAPw_Typedef {
  usartIrDAPwONE = USART_IRCTRL_IRPW_ONE,
  usartIrDAPwTWO = USART_IRCTRL_IRPW_TWO,
  usartIrDAPwTHREE = USART_IRCTRL_IRPW_THREE,
  usartIrDAPwFOUR = USART_IRCTRL_IRPW_FOUR
}
 
enum  USART_IrDAPrsSel_Typedef {
  usartIrDAPrsCh0 = USART_IRCTRL_IRPRSSEL_PRSCH0,
  usartIrDAPrsCh1 = USART_IRCTRL_IRPRSSEL_PRSCH1,
  usartIrDAPrsCh2 = USART_IRCTRL_IRPRSSEL_PRSCH2,
  usartIrDAPrsCh3 = USART_IRCTRL_IRPRSSEL_PRSCH3
}
 
enum  USART_I2sFormat_TypeDef {
  usartI2sFormatW32D32 = USART_I2SCTRL_FORMAT_W32D32,
  usartI2sFormatW32D24M = USART_I2SCTRL_FORMAT_W32D24M,
  usartI2sFormatW32D24 = USART_I2SCTRL_FORMAT_W32D24,
  usartI2sFormatW32D16 = USART_I2SCTRL_FORMAT_W32D16,
  usartI2sFormatW32D8 = USART_I2SCTRL_FORMAT_W32D8,
  usartI2sFormatW16D16 = USART_I2SCTRL_FORMAT_W16D16,
  usartI2sFormatW16D8 = USART_I2SCTRL_FORMAT_W16D8,
  usartI2sFormatW8D8 = USART_I2SCTRL_FORMAT_W8D8
}
 
enum  USART_I2sJustify_TypeDef {
  usartI2sJustifyLeft = USART_I2SCTRL_JUSTIFY_LEFT,
  usartI2sJustifyRight = USART_I2SCTRL_JUSTIFY_RIGHT
}
 
enum  USART_PrsRxCh_TypeDef {
  usartPrsRxCh0 = USART_INPUT_RXPRSSEL_PRSCH0,
  usartPrsRxCh1 = USART_INPUT_RXPRSSEL_PRSCH1,
  usartPrsRxCh2 = USART_INPUT_RXPRSSEL_PRSCH2,
  usartPrsRxCh3 = USART_INPUT_RXPRSSEL_PRSCH3
}
 
enum  USART_PrsTriggerCh_TypeDef {
  usartPrsTriggerCh0 = USART_TRIGCTRL_TSEL_PRSCH0,
  usartPrsTriggerCh1 = USART_TRIGCTRL_TSEL_PRSCH1,
  usartPrsTriggerCh2 = USART_TRIGCTRL_TSEL_PRSCH2,
  usartPrsTriggerCh3 = USART_TRIGCTRL_TSEL_PRSCH3
}
 

Functions

void USART_BaudrateAsyncSet (USART_TypeDef *usart, uint32_t refFreq, uint32_t baudrate, USART_OVS_TypeDef ovs)
 Configure USART/UART operating in asynchronous mode to use a given baudrate (or as close as possible to specified baudrate). More...
 
uint32_t USART_BaudrateCalc (uint32_t refFreq, uint32_t clkdiv, bool syncmode, USART_OVS_TypeDef ovs)
 Calculate baudrate for USART/UART given reference frequency, clock division and oversampling rate (if async mode). More...
 
uint32_t USART_BaudrateGet (USART_TypeDef *usart)
 Get current baudrate for USART/UART. More...
 
void USART_BaudrateSyncSet (USART_TypeDef *usart, uint32_t refFreq, uint32_t baudrate)
 Configure USART operating in synchronous mode to use a given baudrate (or as close as possible to specified baudrate). More...
 
void USART_Enable (USART_TypeDef *usart, USART_Enable_TypeDef enable)
 Enable/disable USART/UART receiver and/or transmitter. More...
 
void USART_InitAsync (USART_TypeDef *usart, const USART_InitAsync_TypeDef *init)
 Init USART/UART for normal asynchronous mode. More...
 
void USART_InitSync (USART_TypeDef *usart, const USART_InitSync_TypeDef *init)
 Init USART for synchronous mode. More...
 
void USART_InitIrDA (const USART_InitIrDA_TypeDef *init)
 Init USART0 for asynchronous IrDA mode. More...
 
void USART_InitI2s (USART_TypeDef *usart, USART_InitI2s_TypeDef *init)
 Init USART for I2S mode. More...
 
void USART_InitPrsTrigger (USART_TypeDef *usart, const USART_PrsTriggerInit_TypeDef *init)
 Initialize automatic transmissions using PRS channel as trigger. More...
 
__STATIC_INLINE void USART_IntClear (USART_TypeDef *usart, uint32_t flags)
 Clear one or more pending USART interrupts. More...
 
__STATIC_INLINE void USART_IntDisable (USART_TypeDef *usart, uint32_t flags)
 Disable one or more USART interrupts. More...
 
__STATIC_INLINE void USART_IntEnable (USART_TypeDef *usart, uint32_t flags)
 Enable one or more USART interrupts. More...
 
__STATIC_INLINE uint32_t USART_IntGet (USART_TypeDef *usart)
 Get pending USART interrupt flags. More...
 
__STATIC_INLINE uint32_t USART_IntGetEnabled (USART_TypeDef *usart)
 Get enabled and pending USART interrupt flags. Useful for handling more interrupt sources in the same interrupt handler. More...
 
__STATIC_INLINE void USART_IntSet (USART_TypeDef *usart, uint32_t flags)
 Set one or more pending USART interrupts from SW. More...
 
__STATIC_INLINE uint32_t USART_StatusGet (USART_TypeDef *usart)
 Get USART STATUS register. More...
 
void USART_Reset (USART_TypeDef *usart)
 Reset USART/UART to same state as after a HW reset. More...
 
uint8_t USART_Rx (USART_TypeDef *usart)
 Receive one 4-8 bit frame, (or part of 10-16 bit frame). More...
 
uint16_t USART_RxDouble (USART_TypeDef *usart)
 Receive two 4-8 bit frames, or one 10-16 bit frame. More...
 
uint32_t USART_RxDoubleExt (USART_TypeDef *usart)
 Receive two 4-9 bit frames, or one 10-16 bit frame with extended information. More...
 
uint16_t USART_RxExt (USART_TypeDef *usart)
 Receive one 4-9 bit frame, (or part of 10-16 bit frame) with extended information. More...
 
__STATIC_INLINE uint8_t USART_RxDataGet (USART_TypeDef *usart)
 Receive one 4-8 bit frame, (or part of 10-16 bit frame). More...
 
__STATIC_INLINE uint16_t USART_RxDoubleGet (USART_TypeDef *usart)
 Receive two 4-8 bit frames, or one 10-16 bit frame. More...
 
__STATIC_INLINE uint32_t USART_RxDoubleXGet (USART_TypeDef *usart)
 Receive two 4-9 bit frames, or one 10-16 bit frame with extended information. More...
 
__STATIC_INLINE uint16_t USART_RxDataXGet (USART_TypeDef *usart)
 Receive one 4-9 bit frame, (or part of 10-16 bit frame) with extended information. More...
 
uint8_t USART_SpiTransfer (USART_TypeDef *usart, uint8_t data)
 Perform one 8 bit frame SPI transfer. More...
 
void USART_Tx (USART_TypeDef *usart, uint8_t data)
 Transmit one 4-9 bit frame. More...
 
void USART_TxDouble (USART_TypeDef *usart, uint16_t data)
 Transmit two 4-9 bit frames, or one 10-16 bit frame. More...
 
void USART_TxDoubleExt (USART_TypeDef *usart, uint32_t data)
 Transmit two 4-9 bit frames, or one 10-16 bit frame with extended control. More...
 
void USART_TxExt (USART_TypeDef *usart, uint16_t data)
 Transmit one 4-9 bit frame with extended control. More...
 

Detailed Description

Universal Synchronous/Asynchronous Receiver/Transmitter Peripheral API

.

Macro Definition Documentation

#define USART_INITASYNC_DEFAULT
Value:
{ \
usartEnable, /* Enable RX/TX when init completed. */ \
0, /* Use current configured reference clock for configuring baudrate. */ \
115200, /* 115200 bits/s. */ \
usartOVS16, /* 16x oversampling. */ \
usartDatabits8, /* 8 databits. */ \
usartNoParity, /* No parity. */ \
usartStopbits1, /* 1 stopbit. */ \
false, /* Do not disable majority vote. */ \
false, /* Not USART PRS input mode. */ \
usartPrsRxCh0 /* PRS channel 0. */ \
}

Default config for USART async init structure.

Definition at line 331 of file em_usart.h.

Referenced by BSP_BccInit(), RETARGET_SerialInit(), and UARTDRV_Init().

#define USART_INITPRSTRIGGER_DEFAULT
Value:
{ \
false, /* Do not enable autoTX triggering. */ \
false, /* Do not enable receive triggering. */ \
false, /* Do not enable transmit triggering. */ \
usartPrsTriggerCh0 /* Set default channel to zero. */ \
}

Default config for USART PRS triggering structure.

Definition at line 359 of file em_usart.h.

#define USART_INITSYNC_DEFAULT
Value:
{ \
usartEnable, /* Enable RX/TX when init completed. */ \
0, /* Use current configured reference clock for configuring baudrate. */ \
1000000, /* 1 Mbits/s. */ \
usartDatabits8, /* 8 databits. */ \
true, /* Master mode. */ \
false, /* Send least significant bit first. */ \
usartClockMode0, /* Clock idle low, sample on rising edge. */ \
false, /* Not USART PRS input mode. */ \
usartPrsRxCh0, /* PRS channel 0. */ \
false /* No AUTOTX mode. */ \
}

Default config for USART sync init structure.

Definition at line 442 of file em_usart.h.

Referenced by MICROSD_Init(), and SPIDRV_Init().

#define USART_INITIRDA_DEFAULT
Value:
{ \
{ \
usartEnable, /* Enable RX/TX when init completed. */ \
0, /* Use current configured reference clock for configuring baudrate. */ \
115200, /* 115200 bits/s. */ \
usartOVS16, /* 16x oversampling. */ \
usartDatabits8, /* 8 databits. */ \
usartEvenParity, /* Even parity. */ \
usartStopbits1 /* 1 stopbit. */ \
}, \
false, /* Rx invert disabled. */ \
false, /* Filtering disabled. */ \
usartIrDAPwTHREE, /* Pulse width is set to ONE. */ \
false, /* Routing to PRS is disabled. */ \
usartIrDAPrsCh0 /* PRS channel 0. */ \
}

Default config for IrDA mode init structure.

Definition at line 496 of file em_usart.h.

#define USART_INITI2S_DEFAULT
Value:
{ \
{ \
usartEnableTx, /* Enable TX when init completed. */ \
0, /* Use current configured reference clock for configuring baudrate. */ \
1000000, /* Baudrate 1M bits/s. */ \
usartDatabits16, /* 16 databits. */ \
true, /* Operate as I2S master. */ \
true, /* Most significant bit first. */ \
usartClockMode0, /* Clock idle low, sample on rising edge. */ \
false, /* Don't enable USARTRx via PRS. */ \
usartPrsRxCh0, /* PRS channel selection (dummy). */ \
false /* Disable AUTOTX mode. */ \
}, \
usartI2sFormatW16D16, /* 16-bit word, 16-bit data */ \
true, /* Delay on I2S data. */ \
false, /* No DMA split. */ \
usartI2sJustifyLeft, /* Data is left-justified within the frame */ \
false /* Stereo mode. */ \
}

Default config for I2S mode init structure.

Definition at line 542 of file em_usart.h.

Enumeration Type Documentation

Databit selection.

Enumerator
usartDatabits4 

4 databits (not available for UART).

usartDatabits5 

5 databits (not available for UART).

usartDatabits6 

6 databits (not available for UART).

usartDatabits7 

7 databits (not available for UART).

usartDatabits8 

8 databits.

usartDatabits9 

9 databits.

usartDatabits10 

10 databits (not available for UART).

usartDatabits11 

11 databits (not available for UART).

usartDatabits12 

12 databits (not available for UART).

usartDatabits13 

13 databits (not available for UART).

usartDatabits14 

14 databits (not available for UART).

usartDatabits15 

15 databits (not available for UART).

usartDatabits16 

16 databits (not available for UART).

Definition at line 63 of file em_usart.h.

Enable selection.

Enumerator
usartDisable 

Disable both receiver and transmitter.

usartEnableRx 

Enable receiver only, transmitter disabled.

usartEnableTx 

Enable transmitter only, receiver disabled.

usartEnable 

Enable both receiver and transmitter.

Definition at line 82 of file em_usart.h.

Oversampling selection, used for asynchronous operation.

Enumerator
usartOVS16 

16x oversampling (normal).

usartOVS8 

8x oversampling.

usartOVS6 

6x oversampling.

usartOVS4 

4x oversampling.

Definition at line 99 of file em_usart.h.

Parity selection, mainly used for asynchronous operation.

Enumerator
usartNoParity 

No parity.

usartEvenParity 

Even parity.

usartOddParity 

Odd parity.

Definition at line 109 of file em_usart.h.

Stopbits selection, used for asynchronous operation.

Enumerator
usartStopbits0p5 

0.5 stopbits.

usartStopbits1 

1 stopbits.

usartStopbits1p5 

1.5 stopbits.

usartStopbits2 

2 stopbits.

Definition at line 118 of file em_usart.h.

Clock polarity/phase mode.

Enumerator
usartClockMode0 

Clock idle low, sample on rising edge.

usartClockMode1 

Clock idle low, sample on falling edge.

usartClockMode2 

Clock idle high, sample on falling edge.

usartClockMode3 

Clock idle high, sample on rising edge.

Definition at line 128 of file em_usart.h.

Pulse width selection for IrDA mode.

Enumerator
usartIrDAPwONE 

IrDA pulse width is 1/16 for OVS=0 and 1/8 for OVS=1

usartIrDAPwTWO 

IrDA pulse width is 2/16 for OVS=0 and 2/8 for OVS=1

usartIrDAPwTHREE 

IrDA pulse width is 3/16 for OVS=0 and 3/8 for OVS=1

usartIrDAPwFOUR 

IrDA pulse width is 4/16 for OVS=0 and 4/8 for OVS=1

Definition at line 145 of file em_usart.h.

PRS channel selection for IrDA mode.

Enumerator
usartIrDAPrsCh0 

PRS channel 0

usartIrDAPrsCh1 

PRS channel 1

usartIrDAPrsCh2 

PRS channel 2

usartIrDAPrsCh3 

PRS channel 3

Definition at line 162 of file em_usart.h.

I2S format selection.

Enumerator
usartI2sFormatW32D32 

32-bit word, 32-bit data

usartI2sFormatW32D24M 

32-bit word, 32-bit data with 8 lsb masked

usartI2sFormatW32D24 

32-bit word, 24-bit data

usartI2sFormatW32D16 

32-bit word, 16-bit data

usartI2sFormatW32D8 

32-bit word, 8-bit data

usartI2sFormatW16D16 

16-bit word, 16-bit data

usartI2sFormatW16D8 

16-bit word, 8-bit data

usartI2sFormatW8D8 

8-bit word, 8-bit data

Definition at line 184 of file em_usart.h.

I2S frame data justify.

Enumerator
usartI2sJustifyLeft 

Data is left-justified within the frame

usartI2sJustifyRight 

Data is right-justified within the frame

Definition at line 197 of file em_usart.h.

USART Rx input PRS selection.

Enumerator
usartPrsRxCh0 

PRSCH0 selected as USART_INPUT

usartPrsRxCh1 

PRSCH1 selected as USART_INPUT

usartPrsRxCh2 

PRSCH2 selected as USART_INPUT

usartPrsRxCh3 

PRSCH3 selected as USART_INPUT

Definition at line 206 of file em_usart.h.

USART PRS Transmit Trigger Channels

Enumerator
usartPrsTriggerCh0 

PRSCH0 selected as USART Trigger

usartPrsTriggerCh1 

PRSCH0 selected as USART Trigger

usartPrsTriggerCh2 

PRSCH0 selected as USART Trigger

usartPrsTriggerCh3 

PRSCH0 selected as USART Trigger

Definition at line 230 of file em_usart.h.

Function Documentation

void USART_BaudrateAsyncSet ( USART_TypeDef usart,
uint32_t  refFreq,
uint32_t  baudrate,
USART_OVS_TypeDef  ovs 
)
Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]refFreqUSART/UART reference clock frequency in Hz that will be used. If set to 0, the currently configured reference clock is assumed.
[in]baudrateBaudrate to try to achieve for USART/UART.
[in]ovsOversampling to be used. Normal is 16x oversampling, but lower oversampling may be used to achieve higher rates or better baudrate accuracy in some cases. Notice that lower oversampling frequency makes channel more vulnerable to bit faults during reception due to clock inaccuracies compared to link partner.

Definition at line 162 of file em_usart.c.

References _USART_CLKDIV_DIV_MASK, _USART_CTRL_OVS_MASK, USART_TypeDef::CLKDIV, CMU_ClockFreqGet(), cmuClock_HFPER, USART_TypeDef::CTRL, USART_CTRL_OVS_X16, USART_CTRL_OVS_X4, USART_CTRL_OVS_X6, and USART_CTRL_OVS_X8.

Referenced by USART_InitAsync().

uint32_t USART_BaudrateCalc ( uint32_t  refFreq,
uint32_t  clkdiv,
bool  syncmode,
USART_OVS_TypeDef  ovs 
)

This function returns the baudrate that a USART/UART module will use if configured with the given frequency, clock divisor and mode. Notice that this function will not use actual HW configuration. It can be used to determinate if a given configuration is sufficiently accurate for the application.

Parameters
[in]refFreqUSART/UART HF peripheral frequency used.
[in]clkdivClock division factor to be used.
[in]syncmode
  • true - synchronous mode operation.
  • false - asynchronous mode operation.
[in]ovsOversampling used if asynchronous mode. Not used if syncmode is true.
Returns
Baudrate with given settings.

Definition at line 293 of file em_usart.c.

References _USART_CLKDIV_MASK, USART_CTRL_OVS_X16, USART_CTRL_OVS_X6, and USART_CTRL_OVS_X8.

Referenced by USART_BaudrateGet().

uint32_t USART_BaudrateGet ( USART_TypeDef usart)

This function returns the actual baudrate (not considering oscillator inaccuracies) used by a USART/UART peripheral.

Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
Current baudrate.

Definition at line 423 of file em_usart.c.

References _USART_CTRL_OVS_MASK, USART_TypeDef::CLKDIV, CMU_ClockFreqGet(), cmuClock_HFPER, USART_TypeDef::CTRL, USART_BaudrateCalc(), and USART_CTRL_SYNC.

Referenced by SPIDRV_GetBitrate().

void USART_BaudrateSyncSet ( USART_TypeDef usart,
uint32_t  refFreq,
uint32_t  baudrate 
)

The configuration will be set to use a baudrate <= the specified baudrate in order to ensure that the baudrate does not exceed the specified value.

Fractional clock division is suppressed, although the HW design allows it. It could cause half clock cycles to exceed specified limit, and thus potentially violate specifications for the slave device. In some special situations fractional clock division may be useful even in synchronous mode, but in those cases it must be directly adjusted, possibly assisted by USART_BaudrateCalc():

Parameters
[in]usartPointer to USART peripheral register block. (Cannot be used on UART modules.)
[in]refFreqUSART reference clock frequency in Hz that will be used. If set to 0, the currently configured reference clock is assumed.
[in]baudrateBaudrate to try to achieve for USART.

Definition at line 472 of file em_usart.c.

References _USART_CLKDIV_DIV_MASK, BUS_RegMaskedWrite(), USART_TypeDef::CLKDIV, CMU_ClockFreqGet(), and cmuClock_HFPER.

Referenced by MICROSD_SpiClkFast(), MICROSD_SpiClkSlow(), SPIDRV_SetBitrate(), and USART_InitSync().

void USART_Enable ( USART_TypeDef usart,
USART_Enable_TypeDef  enable 
)

Notice that this function does not do any configuration. Enabling should normally be done after initialization is done (if not enabled as part of init).

Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]enableSelect status for receiver/transmitter.

Definition at line 541 of file em_usart.c.

References _USART_CMD_RXEN_MASK, _USART_CMD_TXEN_MASK, and USART_TypeDef::CMD.

Referenced by RETARGET_SerialInit(), UARTDRV_Init(), and USART_InitI2s().

void USART_InitAsync ( USART_TypeDef usart,
const USART_InitAsync_TypeDef init 
)

This function will configure basic settings in order to operate in normal asynchronous mode.

Special control setup not covered by this function must be done after using this function by direct modification of the CTRL register.

Notice that pins used by the USART/UART module must be properly configured by the user explicitly, in order for the USART/UART to work as intended. (When configuring pins, one should remember to consider the sequence of configuration, in order to avoid unintended pulses/glitches on output pins.)

Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]initPointer to initialization structure used to configure basic async setup.

Definition at line 583 of file em_usart.c.

References USART_InitAsync_TypeDef::baudrate, USART_TypeDef::CMD, USART_TypeDef::CTRL, USART_InitAsync_TypeDef::databits, USART_InitAsync_TypeDef::enable, USART_TypeDef::FRAME, USART_TypeDef::INPUT, USART_InitAsync_TypeDef::mvdis, USART_InitAsync_TypeDef::oversampling, USART_InitAsync_TypeDef::parity, USART_InitAsync_TypeDef::prsRxCh, USART_InitAsync_TypeDef::prsRxEnable, USART_InitAsync_TypeDef::refFreq, USART_InitAsync_TypeDef::stopbits, USART_BaudrateAsyncSet(), USART_CTRL_AUTOCS, USART_CTRL_MVDIS, USART_INPUT_RXPRS, and USART_Reset().

Referenced by BSP_BccInit(), RETARGET_SerialInit(), UARTDRV_Init(), and USART_InitIrDA().

void USART_InitSync ( USART_TypeDef usart,
const USART_InitSync_TypeDef init 
)

This function will configure basic settings in order to operate in synchronous mode.

Special control setup not covered by this function must be done after using this function by direct modification of the CTRL register.

Notice that pins used by the USART module must be properly configured by the user explicitly, in order for the USART to work as intended. (When configuring pins, one should remember to consider the sequence of configuration, in order to avoid unintended pulses/glitches on output pins.)

Parameters
[in]usartPointer to USART peripheral register block. (UART does not support this mode.)
[in]initPointer to initialization structure used to configure basic async setup.

Definition at line 654 of file em_usart.c.

References USART_InitSync_TypeDef::autoTx, USART_InitSync_TypeDef::baudrate, USART_InitSync_TypeDef::clockMode, USART_TypeDef::CMD, USART_TypeDef::CTRL, USART_InitSync_TypeDef::databits, USART_InitSync_TypeDef::enable, USART_TypeDef::FRAME, USART_TypeDef::INPUT, USART_InitSync_TypeDef::master, USART_InitSync_TypeDef::msbf, USART_InitSync_TypeDef::prsRxCh, USART_InitSync_TypeDef::prsRxEnable, USART_InitSync_TypeDef::refFreq, USART_BaudrateSyncSet(), USART_CMD_MASTEREN, USART_CTRL_AUTOCS, USART_CTRL_AUTOTX, USART_CTRL_MSBF, USART_CTRL_SYNC, USART_FRAME_PARITY_DEFAULT, USART_FRAME_STOPBITS_DEFAULT, USART_INPUT_RXPRS, and USART_Reset().

Referenced by MICROSD_Init(), SPI_TFT_Init(), SPIDRV_Init(), and USART_InitI2s().

void USART_InitIrDA ( const USART_InitIrDA_TypeDef init)

This function will configure basic settings in order to operate in asynchronous IrDA mode.

Special control setup not covered by this function must be done after using this function by direct modification of the CTRL and IRCTRL registers.

Notice that pins used by the USART/UART module must be properly configured by the user explicitly, in order for the USART/UART to work as intended. (When configuring pins, one should remember to consider the sequence of configuration, in order to avoid unintended pulses/glitches on output pins.)

Parameters
[in]initPointer to initialization structure used to configure async IrDA setup.
Note
This function only applies to USART0 as IrDA is not supported on the other USART modules.

Definition at line 735 of file em_usart.c.

References _USART_IRCTRL_IRFILT_SHIFT, _USART_IRCTRL_IRPRSEN_SHIFT, USART_InitIrDA_TypeDef::async, USART_TypeDef::CTRL, USART_TypeDef::IRCTRL, USART_InitIrDA_TypeDef::irFilt, USART_InitIrDA_TypeDef::irPrsEn, USART_InitIrDA_TypeDef::irPrsSel, USART_InitIrDA_TypeDef::irPw, USART_InitIrDA_TypeDef::irRxInv, USART1, USART_CTRL_RXINV, USART_CTRL_TXINV, USART_InitAsync(), and USART_IRCTRL_IREN.

void USART_InitI2s ( USART_TypeDef usart,
USART_InitI2s_TypeDef init 
)

This function will configure basic settings in order to operate in I2S mode.

Special control setup not covered by this function must be done after using this function by direct modification of the CTRL and I2SCTRL registers.

Notice that pins used by the USART module must be properly configured by the user explicitly, in order for the USART to work as intended. (When configuring pins, one should remember to consider the sequence of configuration, in order to avoid unintended pulses/glitches on output pins.)

Parameters
[in]usartPointer to USART peripheral register block. (UART does not support this mode.)
[in]initPointer to initialization structure used to configure basic I2S setup.
Note
This function does not apply to all USART's. Refer to chip manuals.

Definition at line 797 of file em_usart.c.

References USART_InitI2s_TypeDef::delay, USART_InitI2s_TypeDef::dmaSplit, USART_InitSync_TypeDef::enable, USART_InitI2s_TypeDef::format, USART_TypeDef::I2SCTRL, USART_InitI2s_TypeDef::justify, USART_InitI2s_TypeDef::mono, USART_InitI2s_TypeDef::sync, USART_Enable(), USART_I2SCTRL_DELAY, USART_I2SCTRL_DMASPLIT, USART_I2SCTRL_EN, USART_I2SCTRL_MONO, USART_InitSync(), and usartDisable.

void USART_InitPrsTrigger ( USART_TypeDef usart,
const USART_PrsTriggerInit_TypeDef init 
)
__STATIC_INLINE void USART_IntClear ( USART_TypeDef usart,
uint32_t  flags 
)
Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]flagsPending USART/UART interrupt source(s) to clear. Use one or more valid interrupt flags for the USART module (USART_IF_nnn) OR'ed together.

Definition at line 605 of file em_usart.h.

References USART_TypeDef::IFC.

Referenced by RETARGET_SerialInit(), and UARTDRV_Init().

__STATIC_INLINE void USART_IntDisable ( USART_TypeDef usart,
uint32_t  flags 
)
Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]flagsUSART/UART interrupt source(s) to disable. Use one or more valid interrupt flags for the USART module (USART_IF_nnn) OR'ed together.

Definition at line 622 of file em_usart.h.

References USART_TypeDef::IEN.

__STATIC_INLINE void USART_IntEnable ( USART_TypeDef usart,
uint32_t  flags 
)
Note
Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. Consider using USART_IntClear() prior to enabling if such a pending interrupt should be ignored.
Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]flagsUSART/UART interrupt source(s) to enable. Use one or more valid interrupt flags for the USART module (USART_IF_nnn) OR'ed together.

Definition at line 644 of file em_usart.h.

References USART_TypeDef::IEN.

Referenced by RETARGET_SerialInit().

__STATIC_INLINE uint32_t USART_IntGet ( USART_TypeDef usart)
Note
The event bits are not cleared by the use of this function.
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
USART/UART interrupt source(s) pending. Returns one or more valid interrupt flags for the USART module (USART_IF_nnn) OR'ed together.

Definition at line 664 of file em_usart.h.

References USART_TypeDef::IF.

__STATIC_INLINE uint32_t USART_IntGetEnabled ( USART_TypeDef usart)
Parameters
[in]usartPointer to USART/UART peripheral register block.
Note
Interrupt flags are not cleared by the use of this function.
Returns
Pending and enabled USART interrupt sources. The return value is the bitwise AND combination of
  • the OR combination of enabled interrupt sources in USARTx_IEN_nnn register (USARTx_IEN_nnn) and
  • the OR combination of valid interrupt flags of the USART module (USARTx_IF_nnn).

Definition at line 689 of file em_usart.h.

References USART_TypeDef::IEN, and USART_TypeDef::IF.

__STATIC_INLINE void USART_IntSet ( USART_TypeDef usart,
uint32_t  flags 
)
Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]flagsUSART/UART interrupt source(s) to set to pending. Use one or more valid interrupt flags for the USART module (USART_IF_nnn) OR'ed together.

Definition at line 713 of file em_usart.h.

References USART_TypeDef::IFS.

__STATIC_INLINE uint32_t USART_StatusGet ( USART_TypeDef usart)
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
STATUS register value.

Definition at line 730 of file em_usart.h.

References USART_TypeDef::STATUS.

uint8_t USART_Rx ( USART_TypeDef usart)

This function is normally used to receive one frame when operating with frame length 4-8 bits. Please refer to USART_RxExt() for reception of 9 bit frames.

Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.

Note
This function will stall if the buffer is empty, until data is received. Alternatively the user can explicitly check whether data is available, and if data is avaliable, call USART_RxDataGet() to read the RXDATA register directly.
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
Data received.

Definition at line 943 of file em_usart.c.

References USART_TypeDef::RXDATA, USART_TypeDef::STATUS, and USART_STATUS_RXDATAV.

Referenced by SPI_TFT_WriteRegister().

uint16_t USART_RxDouble ( USART_TypeDef usart)

This function is normally used to receive one frame when operating with frame length 10-16 bits. Please refer to USART_RxDoubleExt() for reception of two 9 bit frames.

Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.

Note
This function will stall if buffer is empty, until data is received. Alternatively the user can explicitly check whether data is available, and if data is avaliable, call USART_RxDoubleGet() to read the RXDOUBLE register directly.
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
Data received.

Definition at line 976 of file em_usart.c.

References USART_TypeDef::RXDOUBLE, USART_TypeDef::STATUS, and USART_STATUS_RXFULL.

uint32_t USART_RxDoubleExt ( USART_TypeDef usart)

This function is normally used to receive one frame when operating with frame length 10-16 bits and additional RX status information is required.

Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.

Note
This function will stall if buffer is empty, until data is received. Alternatively the user can explicitly check whether data is available, and if data is avaliable, call USART_RxDoubleXGet() to read the RXDOUBLEX register directly.
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
Data received.

Definition at line 1009 of file em_usart.c.

References USART_TypeDef::RXDOUBLEX, USART_TypeDef::STATUS, and USART_STATUS_RXFULL.

uint16_t USART_RxExt ( USART_TypeDef usart)

This function is normally used to receive one frame when operating with frame length 4-9 bits and additional RX status information is required.

Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.

Note
This function will stall if buffer is empty, until data is received. Alternatively the user can explicitly check whether data is available, and if data is avaliable, call USART_RxDataXGet() to read the RXDATAX register directly.
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
Data received.

Definition at line 1042 of file em_usart.c.

References USART_TypeDef::RXDATAX, USART_TypeDef::STATUS, and USART_STATUS_RXDATAV.

__STATIC_INLINE uint8_t USART_RxDataGet ( USART_TypeDef usart)

This function is used to quickly receive one 4-8 bits frame by reading the RXDATA register directly, without checking the STATUS register for the RXDATAV flag. This can be useful from the RXDATAV interrupt handler, i.e. waiting is superfluous, in order to quickly read the received data. Please refer to USART_RxDataXGet() for reception of 9 bit frames.

Note
Since this function does not check whether the RXDATA register actually holds valid data, it should only be used in situations when it is certain that there is valid data, ensured by some external program routine, e.g. like when handling an RXDATAV interrupt. The USART_Rx() is normally a better choice if the validity of the RXDATA register is not certain.
Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
Data received.

Definition at line 770 of file em_usart.h.

References USART_TypeDef::RXDATA.

__STATIC_INLINE uint16_t USART_RxDoubleGet ( USART_TypeDef usart)

This function is used to quickly receive one 10-16 bits frame or two 4-8 bit frames by reading the RXDOUBLE register directly, without checking the STATUS register for the RXDATAV flag. This can be useful from the RXDATAV interrupt handler, i.e. waiting is superfluous, in order to quickly read the received data. This function is normally used to receive one frame when operating with frame length 10-16 bits. Please refer to USART_RxDoubleXGet() for reception of two 9 bit frames.

Note
Since this function does not check whether the RXDOUBLE register actually holds valid data, it should only be used in situations when it is certain that there is valid data, ensured by some external program routine, e.g. like when handling an RXDATAV interrupt. The USART_RxDouble() is normally a better choice if the validity of the RXDOUBLE register is not certain.
Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
Data received.

Definition at line 808 of file em_usart.h.

References USART_TypeDef::RXDOUBLE.

__STATIC_INLINE uint32_t USART_RxDoubleXGet ( USART_TypeDef usart)

This function is used to quickly receive one 10-16 bits frame or two 4-9 bit frames by reading the RXDOUBLEX register directly, without checking the STATUS register for the RXDATAV flag. This can be useful from the RXDATAV interrupt handler, i.e. waiting is superfluous, in order to quickly read the received data.

Note
Since this function does not check whether the RXDOUBLEX register actually holds valid data, it should only be used in situations when it is certain that there is valid data, ensured by some external program routine, e.g. like when handling an RXDATAV interrupt. The USART_RxDoubleExt() is normally a better choice if the validity of the RXDOUBLEX register is not certain.
Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
Data received.

Definition at line 844 of file em_usart.h.

References USART_TypeDef::RXDOUBLEX.

__STATIC_INLINE uint16_t USART_RxDataXGet ( USART_TypeDef usart)

This function is used to quickly receive one 4-9 bit frame, (or part of 10-16 bit frame) with extended information by reading the RXDATAX register directly, without checking the STATUS register for the RXDATAV flag. This can be useful from the RXDATAV interrupt handler, i.e. waiting is superfluous, in order to quickly read the received data.

Note
Since this function does not check whether the RXDATAX register actually holds valid data, it should only be used in situations when it is certain that there is valid data, ensured by some external program routine, e.g. like when handling an RXDATAV interrupt. The USART_RxExt() is normally a better choice if the validity of the RXDATAX register is not certain.
Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.
Parameters
[in]usartPointer to USART/UART peripheral register block.
Returns
Data received.

Definition at line 879 of file em_usart.h.

References USART_TypeDef::RXDATAX.

uint8_t USART_SpiTransfer ( USART_TypeDef usart,
uint8_t  data 
)
Note
This function will stall if the transmit buffer is full. When a transmit buffer becomes available, data is written and the function will wait until the data is fully transmitted. The SPI return value is then read out and returned.
Parameters
[in]usartPointer to USART peripheral register block.
[in]dataData to transmit.
Returns
Data received.

Definition at line 1070 of file em_usart.c.

References USART_TypeDef::RXDATA, USART_TypeDef::STATUS, USART_TypeDef::TXDATA, USART_STATUS_TXBL, and USART_STATUS_TXC.

Referenced by MICROSD_XferSpi().

void USART_Tx ( USART_TypeDef usart,
uint8_t  data 
)

Depending on frame length configuration, 4-8 (least significant) bits from data are transmitted. If frame length is 9, 8 bits are transmitted from data and one bit as specified by CTRL register, BIT8DV field. Please refer to USART_TxExt() for transmitting 9 bit frame with full control of all 9 bits.

Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.

Note
This function will stall if buffer is full, until buffer becomes available.
Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]dataData to transmit. See details above for further info.

Definition at line 1104 of file em_usart.c.

References USART_TypeDef::STATUS, USART_TypeDef::TXDATA, and USART_STATUS_TXBL.

Referenced by SPI_TFT_WriteRegister().

void USART_TxDouble ( USART_TypeDef usart,
uint16_t  data 
)

Depending on frame length configuration, 4-8 (least significant) bits from each byte in data are transmitted. If frame length is 9, 8 bits are transmitted from each byte in data adding one bit as specified by CTRL register, BIT8DV field, to each byte. Please refer to USART_TxDoubleExt() for transmitting two 9 bit frames with full control of all 9 bits.

If frame length is 10-16, 10-16 (least significant) bits from data are transmitted.

Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.

Note
This function will stall if buffer is full, until buffer becomes available.
Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]dataData to transmit, the least significant byte holds the frame transmitted first. See details above for further info.

Definition at line 1140 of file em_usart.c.

References USART_TypeDef::STATUS, USART_TypeDef::TXDOUBLE, and USART_STATUS_TXBL.

void USART_TxDoubleExt ( USART_TypeDef usart,
uint32_t  data 
)

Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.

Note
This function will stall if buffer is full, until buffer becomes available.
Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]dataData to transmit with extended control. Contains two 16 bit words concatenated. Least significant word holds frame transitted first. If frame length is 4-9, two frames with 4-9 least significant bits from each 16 bit word are transmitted.
If frame length is 10-16 bits, 8 data bits are taken from the least significant 16 bit word, and the remaining bits from the other 16 bit word.
Additional control bits are available as documented in the reference manual (set to 0 if not used). For 10-16 bit frame length, these control bits are taken from the most significant 16 bit word.

Definition at line 1176 of file em_usart.c.

References USART_TypeDef::STATUS, USART_TypeDef::TXDOUBLEX, and USART_STATUS_TXBL.

void USART_TxExt ( USART_TypeDef usart,
uint16_t  data 
)

Notice that possible parity/stop bits in asynchronous mode are not considered part of specified frame bit length.

Note
This function will stall if buffer is full, until buffer becomes available.
Parameters
[in]usartPointer to USART/UART peripheral register block.
[in]dataData to transmit with extended control. Least significant bits contains frame bits, and additional control bits are available as documented in the reference manual (set to 0 if not used).

Definition at line 1204 of file em_usart.c.

References USART_TypeDef::STATUS, USART_TypeDef::TXDATAX, and USART_STATUS_TXBL.