1
0
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:
Bas Stottelaar 2019-09-28 12:03:35 +02:00
parent 8fa920d04c
commit 4e6b46ca20
2 changed files with 76 additions and 0 deletions

View File

@ -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 */

View File

@ -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