mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-28 16:01:18 +01:00
cpu/efm32: implement uart_mode
This commit is contained in:
parent
8fa920d04c
commit
4e6b46ca20
@ -376,6 +376,46 @@ typedef struct {
|
||||
/**
|
||||
* @brief UART device configuration.
|
||||
*/
|
||||
#ifndef DOXYGEN
|
||||
/**
|
||||
* @brief Override parity values
|
||||
* @{
|
||||
*/
|
||||
#define HAVE_UART_PARITY_T
|
||||
typedef enum {
|
||||
UART_PARITY_NONE = 0,
|
||||
UART_PARITY_ODD = 1,
|
||||
UART_PARITY_EVEN = 2,
|
||||
UART_PARITY_MARK = 3,
|
||||
UART_PARITY_SPACE = 4,
|
||||
} uart_parity_t;
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief Override data bits length values
|
||||
* @{
|
||||
*/
|
||||
#define HAVE_UART_DATA_BITS_T
|
||||
typedef enum {
|
||||
UART_DATA_BITS_5 = 5,
|
||||
UART_DATA_BITS_6 = 6,
|
||||
UART_DATA_BITS_7 = 7,
|
||||
UART_DATA_BITS_8 = 8,
|
||||
} uart_data_bits_t;
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief Override stop bits length values
|
||||
* @{
|
||||
*/
|
||||
#define HAVE_UART_STOP_BITS_T
|
||||
typedef enum {
|
||||
UART_STOP_BITS_1 = 2,
|
||||
UART_STOP_BITS_2 = 4,
|
||||
} uart_stop_bits_t;
|
||||
/** @} */
|
||||
#endif /* ndef DOXYGEN */
|
||||
|
||||
typedef struct {
|
||||
void *dev; /**< UART, USART or LEUART device used */
|
||||
gpio_t rx_pin; /**< pin used for RX */
|
||||
|
||||
@ -154,6 +154,42 @@ int uart_init(uart_t dev, uint32_t baudrate, uart_rx_cb_t rx_cb, void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef MODULE_PERIPH_UART_MODECFG
|
||||
int uart_mode(uart_t dev, uart_data_bits_t data_bits, uart_parity_t parity,
|
||||
uart_stop_bits_t stop_bits)
|
||||
{
|
||||
if (parity == UART_PARITY_MARK || parity == UART_PARITY_SPACE) {
|
||||
return UART_NOMODE;
|
||||
}
|
||||
|
||||
#ifdef USE_LEUART
|
||||
if (_is_usart(dev)) {
|
||||
#endif
|
||||
USART_TypeDef *uart = (USART_TypeDef *) uart_config[dev].dev;
|
||||
|
||||
USART_FrameSet(uart,
|
||||
USART_DataBits2Def(data_bits),
|
||||
USART_StopBits2Def(stop_bits),
|
||||
USART_Parity2Def(parity));
|
||||
#ifdef USE_LEUART
|
||||
} else {
|
||||
if (data_bits != UART_DATA_BITS_8) {
|
||||
return UART_NOMODE;
|
||||
}
|
||||
|
||||
LEUART_TypeDef *leuart = (LEUART_TypeDef *) uart_config[dev].dev;
|
||||
|
||||
LEUART_FrameSet(leuart,
|
||||
LEUART_DataBits2Def(data_bits),
|
||||
LEUART_StopBits2Def(stop_bits),
|
||||
LEUART_Parity2Def(parity));
|
||||
}
|
||||
#endif
|
||||
|
||||
return UART_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
void uart_write(uart_t dev, const uint8_t *data, size_t len)
|
||||
{
|
||||
#ifdef USE_LEUART
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user