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)
177 #if defined(USART_IRCTRL_IRPRSSEL_PRSCH7)
182 #if defined(_USART_I2SCTRL_MASK)
186 usartI2sFormatW32D32 = USART_I2SCTRL_FORMAT_W32D32,
187 usartI2sFormatW32D24M = USART_I2SCTRL_FORMAT_W32D24M,
188 usartI2sFormatW32D24 = USART_I2SCTRL_FORMAT_W32D24,
189 usartI2sFormatW32D16 = USART_I2SCTRL_FORMAT_W32D16,
190 usartI2sFormatW32D8 = USART_I2SCTRL_FORMAT_W32D8,
191 usartI2sFormatW16D16 = USART_I2SCTRL_FORMAT_W16D16,
192 usartI2sFormatW16D8 = USART_I2SCTRL_FORMAT_W16D8,
193 usartI2sFormatW8D8 = USART_I2SCTRL_FORMAT_W8D8
194 } USART_I2sFormat_TypeDef;
199 usartI2sJustifyLeft = USART_I2SCTRL_JUSTIFY_LEFT,
200 usartI2sJustifyRight = USART_I2SCTRL_JUSTIFY_RIGHT
201 } USART_I2sJustify_TypeDef;
204 #if defined(_USART_INPUT_MASK)
208 usartPrsRxCh0 = USART_INPUT_RXPRSSEL_PRSCH0,
209 usartPrsRxCh1 = USART_INPUT_RXPRSSEL_PRSCH1,
210 usartPrsRxCh2 = USART_INPUT_RXPRSSEL_PRSCH2,
211 usartPrsRxCh3 = USART_INPUT_RXPRSSEL_PRSCH3,
213 #if defined(USART_INPUT_RXPRSSEL_PRSCH7)
214 usartPrsRxCh4 = USART_INPUT_RXPRSSEL_PRSCH4,
215 usartPrsRxCh5 = USART_INPUT_RXPRSSEL_PRSCH5,
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
226 } USART_PrsRxCh_TypeDef;
237 #if defined(USART_TRIGCTRL_TSEL_PRSCH7)
277 #if defined(USART_INPUT_RXPRS) && defined(USART_CTRL_MVDIS)
285 USART_PrsRxCh_TypeDef prsRxCh;
287 #if defined(_USART_TIMING_CSHOLD_MASK)
300 #if defined(USART_TRIGCTRL_AUTOTXTEN)
302 bool autoTxTriggerEnable;
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)
407 USART_PrsRxCh_TypeDef prsRxCh;
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)
523 USART_I2sFormat_TypeDef format;
534 USART_I2sJustify_TypeDef justify;
538 } USART_InitI2s_TypeDef;
542 #define USART_INITI2S_DEFAULT \
556 usartI2sFormatW16D16, \
559 usartI2sJustifyLeft, \
584 #if defined(USART0) || ((USART_COUNT == 1) && defined(USART1))
588 #if defined(_USART_I2SCTRL_MASK)
589 void USART_InitI2s(
USART_TypeDef *usart, USART_InitI2s_TypeDef *init);
624 usart->
IEN &= ~flags;
698 return usart->
IF & ien;
772 return (uint8_t)usart->
RXDATA;
881 return (uint16_t)usart->
RXDATAX;
#define USART_TRIGCTRL_TSEL_PRSCH1
#define USART_CTRL_OVS_X16
USART_Stopbits_TypeDef stopbits
__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...
void USART_Tx(USART_TypeDef *usart, uint8_t data)
Transmit one 4-9 bit frame.
#define USART_IRCTRL_IRPRSSEL_PRSCH7
#define USART_FRAME_DATABITS_EIGHT
#define USART_IRCTRL_IRPRSSEL_PRSCH0
USART_PrsTriggerCh_TypeDef prsTriggerChannel
#define USART_IRCTRL_IRPRSSEL_PRSCH1
#define USART_TRIGCTRL_TSEL_PRSCH2
#define USART_FRAME_STOPBITS_ONEANDAHALF
void USART_InitSync(USART_TypeDef *usart, const USART_InitSync_TypeDef *init)
Init USART for synchronous mode.
#define USART_TRIGCTRL_TSEL_PRSCH7
USART_OVS_TypeDef oversampling
__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...
USART_Databits_TypeDef databits
#define USART_IRCTRL_IRPRSSEL_PRSCH3
uint8_t USART_Rx(USART_TypeDef *usart)
Receive one 4-8 bit frame, (or part of 10-16 bit frame).
#define USART_FRAME_DATABITS_FOURTEEN
USART_InitAsync_TypeDef async
void USART_TxDoubleExt(USART_TypeDef *usart, uint32_t data)
Transmit two 4-9 bit frames, or one 10-16 bit frame with extended control.
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...
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.
#define USART_FRAME_DATABITS_SIXTEEN
USART_IrDAPw_Typedef irPw
USART_Parity_TypeDef parity
#define USART_IRCTRL_IRPW_FOUR
__STATIC_INLINE void USART_IntEnable(USART_TypeDef *usart, uint32_t flags)
Enable one or more USART interrupts.
#define USART_IRCTRL_IRPW_THREE
USART_Enable_TypeDef enable
#define USART_IRCTRL_IRPRSSEL_PRSCH4
#define USART_CTRL_CLKPOL_IDLELOW
USART_PrsTriggerCh_TypeDef
#define USART_IRCTRL_IRPW_ONE
#define USART_FRAME_DATABITS_SEVEN
void USART_InitIrDA(const USART_InitIrDA_TypeDef *init)
Init USART0 for asynchronous IrDA mode.
#define USART_CTRL_CLKPHA_SAMPLETRAILING
__STATIC_INLINE uint32_t USART_IntGet(USART_TypeDef *usart)
Get pending USART interrupt flags.
#define USART_IRCTRL_IRPRSSEL_PRSCH2
#define USART_FRAME_STOPBITS_TWO
#define USART_CTRL_OVS_X6
uint16_t USART_RxExt(USART_TypeDef *usart)
Receive one 4-9 bit frame, (or part of 10-16 bit frame) with extended information.
__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_FRAME_DATABITS_FIFTEEN
#define USART_TRIGCTRL_TSEL_PRSCH5
__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_TRIGCTRL_TSEL_PRSCH6
USART_IrDAPrsSel_Typedef irPrsSel
#define USART_TRIGCTRL_TSEL_PRSCH3
#define USART_TRIGCTRL_TSEL_PRSCH0
#define USART_FRAME_STOPBITS_HALF
USART_ClockMode_TypeDef clockMode
#define USART_FRAME_PARITY_ODD
#define USART_CTRL_CLKPOL_IDLEHIGH
__STATIC_INLINE uint32_t USART_StatusGet(USART_TypeDef *usart)
Get USART STATUS register.
#define USART_FRAME_DATABITS_THIRTEEN
USART_Enable_TypeDef enable
#define USART_FRAME_STOPBITS_ONE
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.
void USART_Reset(USART_TypeDef *usart)
Reset USART/UART to same state as after a HW reset.
uint8_t USART_SpiTransfer(USART_TypeDef *usart, uint8_t data)
Perform one 8 bit frame SPI transfer.
#define USART_FRAME_DATABITS_TWELVE
#define USART_FRAME_DATABITS_FOUR
#define USART_CTRL_OVS_X4
#define USART_TRIGCTRL_TSEL_PRSCH4
__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_IRCTRL_IRPW_TWO
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.
#define USART_FRAME_PARITY_NONE
#define USART_CTRL_CLKPHA_SAMPLELEADING
void USART_InitAsync(USART_TypeDef *usart, const USART_InitAsync_TypeDef *init)
Init USART/UART for normal asynchronous mode.
#define USART_FRAME_PARITY_EVEN
uint16_t USART_RxDouble(USART_TypeDef *usart)
Receive two 4-8 bit frames, or one 10-16 bit frame.
#define USART_FRAME_DATABITS_SIX
uint32_t USART_BaudrateGet(USART_TypeDef *usart)
Get current baudrate for USART/UART.
#define USART_IRCTRL_IRPRSSEL_PRSCH6
#define USART_CTRL_OVS_X8
#define USART_FRAME_DATABITS_ELEVEN
#define USART_FRAME_DATABITS_FIVE
#define USART_FRAME_DATABITS_NINE
#define USART_FRAME_DATABITS_TEN
__STATIC_INLINE uint8_t USART_RxDataGet(USART_TypeDef *usart)
Receive one 4-8 bit frame, (or part of 10-16 bit frame).
void USART_TxDouble(USART_TypeDef *usart, uint16_t data)
Transmit two 4-9 bit frames, or one 10-16 bit frame.
#define USART_IRCTRL_IRPRSSEL_PRSCH5
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 ...