35 #if defined(USART_COUNT) && (USART_COUNT > 0)
61 #if (USART_COUNT == 1) && defined(USART0)
62 #define USART_REF_VALID(ref) ((ref) == USART0)
64 #elif (USART_COUNT == 1) && defined(USART1)
65 #define USART_REF_VALID(ref) ((ref) == USART1)
67 #elif (USART_COUNT == 2) && defined(USART2)
68 #define USART_REF_VALID(ref) (((ref) == USART1) || ((ref) == USART2))
70 #elif (USART_COUNT == 2)
71 #define USART_REF_VALID(ref) (((ref) == USART0) || ((ref) == USART1))
73 #elif (USART_COUNT == 3)
74 #define USART_REF_VALID(ref) (((ref) == USART0) || ((ref) == USART1) || \
76 #elif (USART_COUNT == 4)
77 #define USART_REF_VALID(ref) (((ref) == USART0) || ((ref) == USART1) || \
78 ((ref) == USART2) || ((ref) == USART3))
79 #elif (USART_COUNT == 5)
80 #define USART_REF_VALID(ref) (((ref) == USART0) || ((ref) == USART1) || \
81 ((ref) == USART2) || ((ref) == USART3) || \
83 #elif (USART_COUNT == 6)
84 #define USART_REF_VALID(ref) (((ref) == USART0) || ((ref) == USART1) || \
85 ((ref) == USART2) || ((ref) == USART3) || \
86 ((ref) == USART4) || ((ref) == USART5))
88 #error "Undefined number of USARTs."
91 #if defined(USARTRF_COUNT) && (USARTRF_COUNT > 0)
92 #if (USARTRF_COUNT == 1) && defined(USARTRF0)
93 #define USARTRF_REF_VALID(ref) ((ref) == USARTRF0)
94 #elif (USARTRF_COUNT == 1) && defined(USARTRF1)
95 #define USARTRF_REF_VALID(ref) ((ref) == USARTRF1)
97 #define USARTRF_REF_VALID(ref) (0)
100 #define USARTRF_REF_VALID(ref) (0)
103 #if defined(_EZR32_HAPPY_FAMILY)
104 #define USART_IRDA_VALID(ref) ((ref) == USART0)
105 #elif defined(_EFM32_HAPPY_FAMILY)
106 #define USART_IRDA_VALID(ref) (((ref) == USART0) || ((ref) == USART1))
107 #elif defined(USART0)
108 #define USART_IRDA_VALID(ref) ((ref) == USART0)
109 #elif (USART_COUNT == 1) && defined(USART1)
110 #define USART_IRDA_VALID(ref) ((ref) == USART1)
112 #define USART_IRDA_VALID(ref) (0)
115 #if defined(_EZR32_HAPPY_FAMILY)
116 #define USART_I2S_VALID(ref) ((ref) == USART0)
117 #elif defined(_EFM32_HAPPY_FAMILY)
118 #define USART_I2S_VALID(ref) (((ref) == USART0) || ((ref) == USART1))
119 #elif defined(_EFM32_TINY_FAMILY) || defined(_EFM32_ZERO_FAMILY) || defined(_SILICON_LABS_32B_PLATFORM_2)
120 #define USART_I2S_VALID(ref) ((ref) == USART1)
121 #elif defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
122 #define USART_I2S_VALID(ref) (((ref) == USART1) || ((ref) == USART2))
125 #if (UART_COUNT == 1)
126 #define UART_REF_VALID(ref) ((ref) == UART0)
127 #elif (UART_COUNT == 2)
128 #define UART_REF_VALID(ref) (((ref) == UART0) || ((ref) == UART1))
130 #define UART_REF_VALID(ref) (0)
171 EFM_ASSERT(baudrate);
211 EFM_ASSERT(baudrate <= (refFreq / 16));
216 EFM_ASSERT(baudrate <= (refFreq / 8));
221 EFM_ASSERT(baudrate <= (refFreq / 6));
226 EFM_ASSERT(baudrate <= (refFreq / 4));
241 #if defined(_USART_CLKDIV_DIV_MASK) && (_USART_CLKDIV_DIV_MASK >= 0x7FFFF8UL)
242 clkdiv = 32 * refFreq + (oversample * baudrate) / 2;
243 clkdiv /= (oversample * baudrate);
247 clkdiv = 4 * refFreq + (oversample * baudrate) / 2;
248 clkdiv /= (oversample * baudrate);
388 divisor = oversample * (256 + clkdiv);
390 quotient = refFreq / divisor;
391 remainder = refFreq % divisor;
396 br = (uint32_t)(factor * quotient);
403 br += (uint32_t)((factor * remainder) / divisor);
474 #if defined(_USART_CLKDIV_DIV_MASK) && (_USART_CLKDIV_DIV_MASK >= 0x7FFFF8UL)
481 EFM_ASSERT(baudrate);
495 #if defined(_USART_CLKDIV_DIV_MASK) && (_USART_CLKDIV_DIV_MASK >= 0x7FFFF8UL)
497 clkdiv = 2 * baudrate;
498 clkdiv = (0x100ULL * (uint64_t)refFreq) / clkdiv;
504 clkdiv = 2 * refFreq;
505 clkdiv += baudrate - 1;
513 clkdiv &= 0xffffff00;
546 EFM_ASSERT( USART_REF_VALID(usart)
547 || USARTRF_REF_VALID(usart)
548 || UART_REF_VALID(usart) );
551 tmp = ~((uint32_t) (enable));
553 usart->
CMD = tmp << 1;
556 usart->
CMD = (uint32_t) (enable);
586 EFM_ASSERT( USART_REF_VALID(usart)
587 || USARTRF_REF_VALID(usart)
588 || UART_REF_VALID(usart) );
593 #if defined(USART_INPUT_RXPRS) && defined(USART_CTRL_MVDIS)
615 #if defined(_USART_TIMING_CSHOLD_MASK)
616 usart->TIMING = ((init->autoCsHold << _USART_TIMING_CSHOLD_SHIFT)
617 & _USART_TIMING_CSHOLD_MASK)
618 | ((init->autoCsSetup << _USART_TIMING_CSSETUP_SHIFT)
619 & _USART_TIMING_CSSETUP_MASK);
620 if (init->autoCsEnable)
657 EFM_ASSERT( USART_REF_VALID(usart) || USARTRF_REF_VALID(usart) );
667 #if defined(_USART_CTRL_AUTOTX_MASK)
671 #if defined(_USART_INPUT_RXPRS_MASK)
693 #if defined(_USART_TIMING_CSHOLD_MASK)
694 usart->TIMING = ((init->autoCsHold << _USART_TIMING_CSHOLD_SHIFT)
695 & _USART_TIMING_CSHOLD_MASK)
696 | ((init->autoCsSetup << _USART_TIMING_CSSETUP_SHIFT)
697 & _USART_TIMING_CSSETUP_MASK);
698 if (init->autoCsEnable)
708 #if defined(USART0) || ((USART_COUNT == 1) && defined(USART1))
737 #if (USART_COUNT == 1) && defined(USART1)
767 #if defined(_USART_I2SCTRL_MASK)
802 EFM_ASSERT(USART_I2S_VALID(usart));
843 #if defined(USART_TRIGCTRL_AUTOTXTEN)
848 #if defined(USART_TRIGCTRL_AUTOTXTEN)
879 EFM_ASSERT( USART_REF_VALID(usart)
880 || USARTRF_REF_VALID(usart)
881 || UART_REF_VALID(usart) );
893 #if defined(_USART_ROUTEPEN_MASK) || defined(_UART_ROUTEPEN_MASK)
894 usart->ROUTEPEN = _USART_ROUTEPEN_RESETVALUE;
895 usart->ROUTELOC0 = _USART_ROUTELOC0_RESETVALUE;
896 usart->ROUTELOC1 = _USART_ROUTELOC1_RESETVALUE;
901 if (USART_IRDA_VALID(usart))
906 #if defined(_USART_INPUT_RESETVALUE)
910 #if defined(_USART_I2SCTRL_RESETVALUE)
911 if (USART_I2S_VALID(usart))
948 return (uint8_t)usart->
RXDATA;
1047 return (uint16_t)usart->
RXDATAX;
1074 usart->
TXDATA = (uint32_t)data;
1077 return (uint8_t)usart->
RXDATA;
1109 usart->
TXDATA = (uint32_t)data;
1209 usart->
TXDATAX = (uint32_t)data;
Clock management unit (CMU) API.
USART_Stopbits_TypeDef stopbits
USART_I2sJustify_TypeDef justify
#define USART_CMD_CLEARRX
void USART_Tx(USART_TypeDef *usart, uint8_t data)
Transmit one 4-9 bit frame.
#define USART_TRIGCTRL_RXTEN
#define USART_CTRL_OVS_X4
Emlib peripheral API "assert" implementation.
USART_PrsTriggerCh_TypeDef prsTriggerChannel
void USART_InitSync(USART_TypeDef *usart, const USART_InitSync_TypeDef *init)
Init USART for synchronous mode.
USART_OVS_TypeDef oversampling
#define _USART_I2SCTRL_RESETVALUE
RAM and peripheral bit-field set and clear API.
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_CMD_TXTRIDIS
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_FRAME_RESETVALUE
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_CMD_MASTEREN
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
#define USART_FRAME_PARITY_DEFAULT
USART_IrDAPw_Typedef irPw
USART_Parity_TypeDef parity
Universal synchronous/asynchronous receiver/transmitter (USART/UART) peripheral API.
USART_Enable_TypeDef enable
#define USART_CMD_CLEARTX
#define USART_CTRL_OVS_X8
USART_I2sFormat_TypeDef format
#define USART_CTRL_OVS_X6
#define USART_STATUS_RXDATAV
void USART_InitIrDA(const USART_InitIrDA_TypeDef *init)
Init USART0 for asynchronous IrDA mode.
#define _USART_IEN_RESETVALUE
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_STATUS_TXBL
#define _USART_TRIGCTRL_RESETVALUE
#define _USART_CTRL_RESETVALUE
#define USART_CMD_MASTERDIS
#define _USART_CMD_TXEN_MASK
#define USART_FRAME_STOPBITS_DEFAULT
#define _USART_CLKDIV_RESETVALUE
#define _USART_IRCTRL_IRFILT_SHIFT
#define USART_TRIGCTRL_TXTEN
USART_IrDAPrsSel_Typedef irPrsSel
#define USART_CTRL_AUTOTX
#define _USART_TRIGCTRL_AUTOTXTEN_MASK
#define USART_CMD_RXBLOCKDIS
USART_ClockMode_TypeDef clockMode
#define _USART_ROUTE_RESETVALUE
USART_Enable_TypeDef enable
#define USART_CTRL_OVS_X16
#define _USART_TRIGCTRL_TXTEN_MASK
void USART_TxExt(USART_TypeDef *usart, uint16_t data)
Transmit one 4-9 bit frame with extended control.
USART_Databits_TypeDef databits
#define USART_STATUS_RXFULL
#define USART_TRIGCTRL_AUTOTXTEN
void USART_Reset(USART_TypeDef *usart)
Reset USART/UART to same state as after a HW reset.
#define _USART_CMD_RXEN_MASK
uint8_t USART_SpiTransfer(USART_TypeDef *usart, uint8_t data)
Perform one 8 bit frame SPI transfer.
#define _USART_IRCTRL_IRPRSEN_SHIFT
#define _USART_TRIGCTRL_RXTEN_MASK
__STATIC_INLINE void BUS_RegMaskedWrite(volatile uint32_t *addr, uint32_t mask, uint32_t val)
Perform peripheral register masked clear and value write.
#define USART_CTRL_AUTOCS
void USART_InitI2s(USART_TypeDef *usart, USART_InitI2s_TypeDef *init)
Init USART for I2S mode.
#define _USART_CLKDIV_DIV_MASK
#define USART_I2SCTRL_DELAY
#define USART_I2SCTRL_MONO
#define _USART_CTRL_OVS_MASK
#define _USART_INPUT_RESETVALUE
#define USART_IRCTRL_IREN
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.
#define _USART_CLKDIV_MASK
#define _USART_TRIGCTRL_TSEL_MASK
uint16_t USART_RxDouble(USART_TypeDef *usart)
Receive two 4-8 bit frames, or one 10-16 bit frame.
uint32_t USART_BaudrateGet(USART_TypeDef *usart)
Get current baudrate for USART/UART.
uint32_t CMU_ClockFreqGet(CMU_Clock_TypeDef clock)
Get clock frequency for a clock point.
void USART_TxDouble(USART_TypeDef *usart, uint16_t data)
Transmit two 4-9 bit frames, or one 10-16 bit frame.
#define USART_INPUT_RXPRS
USART_PrsRxCh_TypeDef prsRxCh
#define _USART_IRCTRL_RESETVALUE
#define USART_I2SCTRL_DMASPLIT
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 ...