35 #ifndef __SILICON_LABS_EM_USART_H__
36 #define __SILICON_LABS_EM_USART_H__
39 #if defined(USART_COUNT) && (USART_COUNT > 0)
168 #if defined(USART_IRCTRL_IRPRSSEL_PRSCH4)
171 #if defined(USART_IRCTRL_IRPRSSEL_PRSCH5)
174 #if defined(USART_IRCTRL_IRPRSSEL_PRSCH6)
175 usartIrDAPrsCh6 = USART_IRCTRL_IRPRSSEL_PRSCH6,
177 #if defined(USART_IRCTRL_IRPRSSEL_PRSCH7)
178 usartIrDAPrsCh7 = USART_IRCTRL_IRPRSSEL_PRSCH7,
182 #if defined(_USART_I2SCTRL_MASK)
204 #if defined(_USART_INPUT_MASK)
213 #if defined(USART_INPUT_RXPRSSEL_PRSCH7)
216 usartPrsRxCh6 = USART_INPUT_RXPRSSEL_PRSCH6,
217 usartPrsRxCh7 = USART_INPUT_RXPRSSEL_PRSCH7,
220 #if defined(USART_INPUT_RXPRSSEL_PRSCH11)
221 usartPrsRxCh8 = USART_INPUT_RXPRSSEL_PRSCH8,
222 usartPrsRxCh9 = USART_INPUT_RXPRSSEL_PRSCH9,
223 usartPrsRxCh10 = USART_INPUT_RXPRSSEL_PRSCH10,
224 usartPrsRxCh11 = USART_INPUT_RXPRSSEL_PRSCH11
237 #if defined(USART_TRIGCTRL_TSEL_PRSCH7)
240 usartPrsTriggerCh6 = USART_TRIGCTRL_TSEL_PRSCH6,
241 usartPrsTriggerCh7 = USART_TRIGCTRL_TSEL_PRSCH7,
277 #if defined(USART_INPUT_RXPRS) && defined(USART_CTRL_MVDIS)
287 #if defined(_USART_TIMING_CSHOLD_MASK)
300 #if defined(USART_TRIGCTRL_AUTOTXTEN)
313 #if defined(_USART_TIMING_CSHOLD_MASK) && defined(USART_CTRL_MVDIS)
314 #define USART_INITASYNC_DEFAULT \
330 #elif defined(USART_INPUT_RXPRS) && defined(USART_CTRL_MVDIS)
331 #define USART_INITASYNC_DEFAULT \
345 #define USART_INITASYNC_DEFAULT \
358 #if defined(USART_TRIGCTRL_AUTOTXTEN)
359 #define USART_INITPRSTRIGGER_DEFAULT \
367 #define USART_INITPRSTRIGGER_DEFAULT \
402 #if defined(USART_INPUT_RXPRS) && defined(USART_TRIGCTRL_AUTOTXTEN)
413 #if defined(_USART_TIMING_CSHOLD_MASK)
424 #if defined(_USART_TIMING_CSHOLD_MASK)
425 #define USART_INITSYNC_DEFAULT \
441 #elif defined(USART_INPUT_RXPRS) && defined(USART_TRIGCTRL_AUTOTXTEN)
442 #define USART_INITSYNC_DEFAULT \
456 #define USART_INITSYNC_DEFAULT \
496 #define USART_INITIRDA_DEFAULT \
515 #if defined(_USART_I2SCTRL_MASK)
542 #define USART_INITI2S_DEFAULT \
556 usartI2sFormatW16D16, \
559 usartI2sJustifyLeft, \
584 #if defined(USART0) || ((USART_COUNT == 1) && defined(USART1))
588 #if defined(_USART_I2SCTRL_MASK)
624 usart->
IEN &= ~flags;
698 return usart->
IF & ien;
772 return (uint8_t)usart->
RXDATA;
881 return (uint16_t)usart->
RXDATAX;
USART_Stopbits_TypeDef stopbits
USART_I2sJustify_TypeDef justify
__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...
#define USART_FRAME_PARITY_EVEN
void USART_Tx(USART_TypeDef *usart, uint8_t data)
Transmit one 4-9 bit frame.
#define USART_FRAME_DATABITS_SIXTEEN
#define USART_FRAME_DATABITS_FOUR
#define USART_CTRL_OVS_X4
USART_PrsTriggerCh_TypeDef prsTriggerChannel
#define USART_CTRL_CLKPOL_IDLEHIGH
void USART_InitSync(USART_TypeDef *usart, const USART_InitSync_TypeDef *init)
Init USART for synchronous mode.
USART_OVS_TypeDef oversampling
#define USART_IRCTRL_IRPRSSEL_PRSCH3
#define USART_FRAME_DATABITS_SEVEN
__STATIC_INLINE void USART_IntClear(USART_TypeDef *usart, uint32_t flags)
Clear one or more pending USART interrupts.
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 spe...
#define USART_IRCTRL_IRPRSSEL_PRSCH4
#define USART_TRIGCTRL_TSEL_PRSCH4
USART_Databits_TypeDef databits
#define USART_FRAME_STOPBITS_HALF
uint8_t USART_Rx(USART_TypeDef *usart)
Receive one 4-8 bit frame, (or part of 10-16 bit frame).
USART_InitAsync_TypeDef async
#define USART_IRCTRL_IRPW_FOUR
#define USART_TRIGCTRL_TSEL_PRSCH5
void USART_TxDoubleExt(USART_TypeDef *usart, uint32_t data)
Transmit two 4-9 bit frames, or one 10-16 bit frame with extended control.
#define USART_IRCTRL_IRPW_ONE
USART_InitSync_TypeDef sync
uint32_t USART_RxDoubleExt(USART_TypeDef *usart)
Receive two 4-9 bit frames, or one 10-16 bit frame with extended information.
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...
USART_PrsRxCh_TypeDef prsRxCh
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.
USART_IrDAPw_Typedef irPw
USART_Parity_TypeDef parity
__STATIC_INLINE void USART_IntEnable(USART_TypeDef *usart, uint32_t flags)
Enable one or more USART interrupts.
USART_Enable_TypeDef enable
#define USART_I2SCTRL_FORMAT_W32D32
#define USART_I2SCTRL_FORMAT_W32D24M
#define USART_INPUT_RXPRSSEL_PRSCH0
#define USART_CTRL_OVS_X8
#define USART_FRAME_DATABITS_ELEVEN
USART_PrsTriggerCh_TypeDef
USART_I2sFormat_TypeDef format
#define USART_FRAME_STOPBITS_ONEANDAHALF
#define USART_CTRL_OVS_X6
#define USART_FRAME_DATABITS_FIFTEEN
void USART_InitIrDA(const USART_InitIrDA_TypeDef *init)
Init USART0 for asynchronous IrDA mode.
#define USART_FRAME_DATABITS_FOURTEEN
__STATIC_INLINE uint32_t USART_IntGet(USART_TypeDef *usart)
Get pending USART interrupt flags.
uint16_t USART_RxExt(USART_TypeDef *usart)
Receive one 4-9 bit frame, (or part of 10-16 bit frame) with extended information.
#define USART_TRIGCTRL_TSEL_PRSCH2
__STATIC_INLINE void USART_IntSet(USART_TypeDef *usart, uint32_t flags)
Set one or more pending USART interrupts from SW.
__STATIC_INLINE uint16_t USART_RxDoubleGet(USART_TypeDef *usart)
Receive two 4-8 bit frames, or one 10-16 bit frame.
#define USART_I2SCTRL_JUSTIFY_LEFT
__STATIC_INLINE uint32_t USART_RxDoubleXGet(USART_TypeDef *usart)
Receive two 4-9 bit frames, or one 10-16 bit frame with extended information.
#define USART_IRCTRL_IRPRSSEL_PRSCH5
#define USART_INPUT_RXPRSSEL_PRSCH4
USART_IrDAPrsSel_Typedef irPrsSel
#define USART_TRIGCTRL_TSEL_PRSCH1
#define USART_IRCTRL_IRPW_THREE
#define USART_INPUT_RXPRSSEL_PRSCH5
#define USART_IRCTRL_IRPRSSEL_PRSCH1
#define USART_FRAME_PARITY_ODD
#define USART_IRCTRL_IRPW_TWO
USART_ClockMode_TypeDef clockMode
#define USART_FRAME_DATABITS_EIGHT
#define USART_FRAME_DATABITS_NINE
#define USART_INPUT_RXPRSSEL_PRSCH2
#define USART_I2SCTRL_FORMAT_W16D16
__STATIC_INLINE uint32_t USART_StatusGet(USART_TypeDef *usart)
Get USART STATUS register.
#define USART_INPUT_RXPRSSEL_PRSCH1
USART_Enable_TypeDef enable
#define USART_I2SCTRL_FORMAT_W8D8
#define USART_CTRL_OVS_X16
void USART_TxExt(USART_TypeDef *usart, uint16_t data)
Transmit one 4-9 bit frame with extended control.
USART_Databits_TypeDef databits
__STATIC_INLINE void USART_IntDisable(USART_TypeDef *usart, uint32_t flags)
Disable one or more USART interrupts.
#define USART_INPUT_RXPRSSEL_PRSCH3
#define USART_FRAME_DATABITS_TWELVE
void USART_Reset(USART_TypeDef *usart)
Reset USART/UART to same state as after a HW reset.
#define USART_IRCTRL_IRPRSSEL_PRSCH2
uint8_t USART_SpiTransfer(USART_TypeDef *usart, uint8_t data)
Perform one 8 bit frame SPI transfer.
#define USART_I2SCTRL_FORMAT_W16D8
#define USART_CTRL_CLKPOL_IDLELOW
void USART_InitI2s(USART_TypeDef *usart, USART_InitI2s_TypeDef *init)
Init USART for I2S mode.
#define USART_FRAME_DATABITS_THIRTEEN
#define USART_CTRL_CLKPHA_SAMPLELEADING
#define USART_FRAME_STOPBITS_TWO
__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.
#define USART_I2SCTRL_FORMAT_W32D8
#define USART_TRIGCTRL_TSEL_PRSCH3
#define USART_IRCTRL_IRPRSSEL_PRSCH0
void USART_Enable(USART_TypeDef *usart, USART_Enable_TypeDef enable)
Enable/disable USART/UART receiver and/or transmitter.
void USART_InitPrsTrigger(USART_TypeDef *usart, const USART_PrsTriggerInit_TypeDef *init)
Initialize automatic transmissions using PRS channel as trigger.
void USART_InitAsync(USART_TypeDef *usart, const USART_InitAsync_TypeDef *init)
Init USART/UART for normal asynchronous mode.
uint16_t USART_RxDouble(USART_TypeDef *usart)
Receive two 4-8 bit frames, or one 10-16 bit frame.
#define USART_CTRL_CLKPHA_SAMPLETRAILING
uint32_t USART_BaudrateGet(USART_TypeDef *usart)
Get current baudrate for USART/UART.
#define USART_I2SCTRL_JUSTIFY_RIGHT
#define USART_FRAME_DATABITS_TEN
#define USART_TRIGCTRL_TSEL_PRSCH0
#define USART_FRAME_STOPBITS_ONE
#define USART_FRAME_DATABITS_FIVE
__STATIC_INLINE uint8_t USART_RxDataGet(USART_TypeDef *usart)
Receive one 4-8 bit frame, (or part of 10-16 bit frame).
#define USART_FRAME_DATABITS_SIX
void USART_TxDouble(USART_TypeDef *usart, uint16_t data)
Transmit two 4-9 bit frames, or one 10-16 bit frame.
USART_PrsRxCh_TypeDef prsRxCh
#define USART_I2SCTRL_FORMAT_W32D16
#define USART_FRAME_PARITY_NONE
#define USART_I2SCTRL_FORMAT_W32D24
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 ...