UART¶
Low-level UART peripheral driver.
This is a basic UART (Universal Asynchronous Receiver Transmitter) interface to allow platform independent access to the MCU’s serial communication abilities. This interface is intentionally designed to be as simple as possible, to allow for easy implementation and maximum portability. In RIOT we only use the common 8-N-1 format of the serial port (8 data bits, no parity bit, one stop bit).
The simple interface provides capabilities to initialize the serial communication module, which automatically enables for receiving data, as well as writing data to the UART port, which means transmitting data. The UART device and the corresponding pins need to be mapped in RIOT/boards/ * /include/periph_conf.h
. Furthermore you need to select the baudrate for initialization which is typically {9600, 19200, 38400, 57600, 115200} baud. Additionally you should register a callback function that is executed in interrupt context when data is being received. The driver will then read the received data byte, call the registered callback function and pass the received data to it via its argument. The interface enforces the receiving to be implemented in an interrupt driven mode. Thus, you never know how many bytes are going to be received and might want to handle that in your specific callback function. The transmit function can be implemented in any way.
By default the UART_DEV(0)
device of each board is initialized and mapped to STDIO in RIOT which is used for standard input/output functions like printf()
or puts()
.
-
enum
@150
¶ - UART_OK
= 0
- everything in order
- UART_NODEV
= -1
- invalid UART device given
- UART_NOBAUD
= -2
- given baudrate is not applicable
- UART_INTERR
= -3
- all other internal errors
- UART_NOMODE
= -4
- given mode is not applicable
- UART_OK
-
unsigned int
uart_t
¶ Define default UART type identifier.
-
void(*
uart_rx_cb_t
()¶ Signature for receive interrupt callback.
Parameters
arg: context to the callback (optional) data: the byte that was received
-
int
uart_init
(uart.h::uart_t
uart, uint32_t baudrate,uart.h::uart_rx_cb_t
rx_cb, void * arg)¶ Initialize a given UART device.
The UART device will be initialized with the following configuration:
- 8 data bits
- no parity
- 1 stop bit
- baudrate as given
If no callback parameter is given (rx_cb := NULL), the UART will be initialized in TX only mode.
Parameters
uart: UART device to initialize baudrate: desired baudrate in baud/s rx_cb: receive callback, executed in interrupt context once for every byte that is received (RX buffer filled), set to NULL for TX only mode arg: optional context passed to the callback functions Return values
- UART_OK on success
- UART_NODEV on invalid UART device
- UART_NOBAUD on inapplicable baudrate
- UART_INTERR on other errors
-
void
uart_write
(uart.h::uart_t
uart, const uint8_t * data,msp430_types.h::size_t
len)¶ Write data from the given buffer to the specified UART device.
This function is blocking, as it will only return after
len
bytes from the given buffer have been send. The way this data is send is up to the implementation: active waiting, interrupt driven, DMA, etc.Parameters
uart: UART device to use for transmission data: data buffer to send len: number of bytes to send
-
void
uart_poweron
(uart.h::uart_t
uart)¶ Power on the given UART device.
Parameters
uart: the UART device to power on
-
void
uart_poweroff
(uart.h::uart_t
uart)¶ Power off the given UART device.
Parameters
uart: the UART device to power off
-
UART_UNDEF
¶ Default UART undefined value.
1
(UINT_MAX)
-
UART_DEV
( x)¶ Default UART device access macro.
1
(x)
-
struct
uart_isr_ctx_t
¶ Interrupt context for a UART device.
-
uart.h::uart_rx_cb_t
rx_cb
¶ data received interrupt callback
-
void *
arg
¶ argument to both callback routines
-