UARTE driver

group nrfx_uarte

UARTE peripheral driver.

Defines

NRFX_UARTE_INSTANCE(id)

Macro for creating a UARTE driver instance.

NRFX_UARTE_DEFAULT_CONFIG(_pin_tx, _pin_rx)

UARTE driver default configuration.

This configuration sets up UARTE with the following options:

  • hardware flow control disabled

  • no parity bit

  • one stop bit

  • baudrate: 115200

Parameters:
  • _pin_tx[in] TX pin.

  • _pin_rx[in] RX pin.

NRFX_UARTE_INST_HANDLER_GET(idx)

Macro returning UARTE interrupt handler.

param[in] idx UARTE index.

Returns:

Interrupt handler.

Typedefs

typedef void (*nrfx_uarte_event_handler_t)(nrfx_uarte_event_t const *p_event, void *p_context)

UARTE interrupt event handler.

Param p_event:

[in] Pointer to event structure. Event is allocated on the stack so it is available only within the context of the event handler.

Param p_context:

[in] Context passed to the interrupt handler, set on initialization.

Enums

enum nrfx_uarte_evt_type_t

Types of UARTE driver events.

Values:

enumerator NRFX_UARTE_EVT_TX_DONE

Requested TX transfer completed.

enumerator NRFX_UARTE_EVT_RX_DONE

Requested RX transfer completed.

enumerator NRFX_UARTE_EVT_ERROR

Error reported by UART peripheral.

enumerator NRFX_UARTE_EVT_RX_BUF_REQUEST

Request for a RX buffer.

enumerator NRFX_UARTE_EVT_RX_DISABLED

Receiver is disabled.

enumerator NRFX_UARTE_EVT_RX_BUF_TOO_LATE

RX buffer request handled too late.

enumerator NRFX_UARTE_EVT_RX_BYTE

Byte was received.

enumerator NRFX_UARTE_EVT_TRIGGER

Result of nrfx_uarte_int_trigger.

Functions

nrfx_err_t nrfx_uarte_init(nrfx_uarte_t const *p_instance, nrfx_uarte_config_t const *p_config, nrfx_uarte_event_handler_t event_handler)

Function for initializing the UARTE driver.

This function configures UARTE but peripheral is kept disabled to reduce power consumption.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • p_config[in] Pointer to the structure with the initial configuration.

  • event_handler[in] Event handler provided by the user. If not provided driver works in blocking mode.

Return values:
  • NRFX_SUCCESS – Initialization was successful.

  • NRFX_ERROR_ALREADY – The driver is already initialized.

  • NRFX_ERROR_INVALID_STATE – The driver is already initialized. Deprecated - use NRFX_ERROR_ALREADY instead.

  • NRFX_ERROR_INVALID_PARAM – Invalid configuration.

  • NRFX_ERROR_BUSY – Some other peripheral with the same instance ID is already in use. This is possible only if Peripheral Resource Sharing (PRS) module is enabled.

nrfx_err_t nrfx_uarte_reconfigure(nrfx_uarte_t const *p_instance, nrfx_uarte_config_t const *p_config)

Function for reconfiguring the UARTE driver.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • p_config[in] Pointer to the structure with the configuration.

Return values:
  • NRFX_SUCCESS – Reconfiguration was successful.

  • NRFX_ERROR_BUSY – The driver is during transfer.

  • NRFX_ERROR_INVALID_STATE – The driver is uninitialized.

void nrfx_uarte_uninit(nrfx_uarte_t const *p_instance)

Function for uninitializing the UARTE driver.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

bool nrfx_uarte_init_check(nrfx_uarte_t const *p_instance)

Function for checking if the UARTE driver instance is initialized.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

Return values:
  • true – Instance is already initialized.

  • false – Instance is not initialized.

NRFX_STATIC_INLINE uint32_t nrfx_uarte_task_address_get(nrfx_uarte_t const *p_instance, nrf_uarte_task_t task)

Function for getting the address of the specified UARTE task.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • task[in] Task.

Returns:

Task address.

NRFX_STATIC_INLINE uint32_t nrfx_uarte_event_address_get(nrfx_uarte_t const *p_instance, nrf_uarte_event_t event)

Function for getting the address of the specified UARTE event.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • event[in] Event.

Returns:

Event address.

nrfx_err_t nrfx_uarte_tx(nrfx_uarte_t const *p_instance, uint8_t const *p_data, size_t length, uint32_t flags)

Function for sending data over UARTE.

If an event handler is provided in nrfx_uarte_init() call, this function returns immediately (unless special flags are used) and the handler is called when the transfer is done. Otherwise, the transfer is performed in blocking mode, that is, this function returns when the transfer is finished.

Note

Peripherals using EasyDMA (including UARTE) require the transfer buffers to be placed in the Data RAM region. If this condition is not met, this function will attempt to use the cache buffer provided in the configuration and if it is not available it will return error.

Note

To achieve the lowest power consumption, transmitter is stopped and peripheral is disabled (if receiver is not used) when transfer is completed.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • p_data[in] Pointer to data.

  • length[in] Number of bytes to send. Maximum possible length is dependent on the used SoC (see the MAXCNT register description in the Product Specification). The driver checks it with assertion.

  • flags[in] Option flags. See Flags used for .

Return values:
  • NRFX_SUCCESS – Initialization was successful.

  • NRFX_ERROR_BUSY – Driver is busy transferring the data.

  • NRFX_ERROR_FORBIDDEN – The transfer was aborted from a different context (blocking mode only) or transfer cannot be performed due to driver state, configuration or transfer parameters.

  • NRFX_ERROR_INVALID_ADDR – p_data does not point to RAM buffer and cache buffer is not provided or attempted to use non DMA buffer with linked transfer (see NRFX_UARTE_TX_LINK).

  • NRFX_ERROR_INVALID_LENGTH – Flag NRFX_UARTE_TX_EARLY_RETURN is used but length exceeds internal buffer size.

bool nrfx_uarte_tx_in_progress(nrfx_uarte_t const *p_instance)

Function for checking if UARTE is currently transmitting.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

Return values:
  • true – The UARTE is transmitting.

  • false – The UARTE is not transmitting.

nrfx_err_t nrfx_uarte_tx_abort(nrfx_uarte_t const *p_instance, bool sync)

Function for aborting any ongoing transmission.

Note

When abortion is not synchronous, the NRFX_UARTE_EVT_TX_DONE event will be generated in non-blocking mode. It will contain the number of bytes sent until the abort was called. If NRFX_UARTE_TX_LINK flag was used for the transfer and linked transfer have not started yet, there will be the second NRFX_UARTE_EVT_TX_DONE event with length equal to 0. The event handler will be called from the UARTE interrupt context.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • sync[in] If true operation is synchronous. Transmitter is stopped upon function return and no event is generated.

Return values:
  • NRFX_SUCCESS – Successfully initiated abort or when transmitter synchronously stopped.

  • NRFX_ERROR_INVALID_STATE – Attempt to asynchronously abort when no transfer is active.

nrfx_err_t nrfx_uarte_rx_enable(nrfx_uarte_t const *p_instance, uint32_t flags)

Function for enabling the receiver.

The event handler will be called from the caller context with the NRFX_UARTE_EVT_RX_BUF_REQUEST event. The user may respond and provide a buffer using nrfx_uarte_rx_buffer_set. An error is returned if buffer is not provided. After that, the receiver is started and another NRFX_UARTE_EVT_RX_BUF_REQUEST is generated. If a new buffer is not provided, then the receiver is disabled once the first buffer becomes full. If a new buffer is provided, then the receiver will seamlessly switch to a new buffer (using a hardware shortcut).

Note

If transmitter is inactive then peripheral is disabled after receiver is stopped to achieve the lowest power consumption.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • flags[in] Option flags. See Flags used for .

Return values:
  • NRFX_SUCCESS – Receiver successfully enabled.

  • NRFX_ERROR_BUSY – When receiver is already enabled.

  • NRFX_ERROR_NO_MEM – When buffer was not provided.

nrfx_err_t nrfx_uarte_rx_buffer_set(nrfx_uarte_t const *p_instance, uint8_t *p_data, size_t length)

Function for providing reception buffer.

The function should be called as a response to the NRFX_UARTE_EVT_RX_BUF_REQUEST event. If the function is called before enabling the receiver, the first buffer is configured. If the function is called and there is no active buffer but the receiver is enabled but not started, it starts reception.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • p_data[in] Pointer to a buffer.

  • length[in] Buffer length.

Return values:
  • NRFX_SUCCESS – Buffer successfully set.

  • NRFX_ERROR_INVALID_STATE – Buffer provided without pending request.

  • NRFX_ERROR_TIMEOUT – Buffer provided too late. Receiver is being disabled.

nrfx_err_t nrfx_uarte_rx(nrfx_uarte_t const *p_instance, uint8_t *p_data, size_t length)

Function for receiving data over UARTE.

If an event handler is provided in the nrfx_uarte_init() call, this function returns immediately and the handler is called when the transfer is done. Otherwise, the transfer is performed in blocking mode, that is this function returns when the transfer is finished. Blocking mode is not using interrupt so there is no context switching inside the function. The receive buffer pointer is double-buffered in non-blocking mode. The secondary buffer can be set immediately after starting the transfer and will be filled when the primary buffer is full. The double-buffering feature allows receiving data continuously.

Deprecated:

Use nrfx_uarte_rx_enable and nrfx_uarte_rx_buffer_set.

Note

Peripherals using EasyDMA (including UARTE) require the transfer buffers to be placed in the Data RAM region. If this condition is not met, this function fails with the error code NRFX_ERROR_INVALID_ADDR.

Warning

When the double-buffering feature is used and the UARTE interrupt is processed with a delay (for example, due to a higher priority interrupt) long enough for both buffers to get filled completely, the event handler will be invoked only once, to notify that the first buffer has been filled. This is because from hardware perspective it is impossible to deduce in such case if the second buffer was also filled completely or not. To prevent this from happening, keep the UARTE interrupt latency low or use large enough reception buffers.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • p_data[in] Pointer to data.

  • length[in] Number of bytes to receive. Maximum possible length is dependent on the used SoC (see the MAXCNT register description in the Product Specification). The driver checks it with assertion.

Return values:
  • NRFX_SUCCESS – Initialization is successful.

  • NRFX_ERROR_BUSY – The driver is already receiving (and the secondary buffer has already been set in non-blocking mode).

  • NRFX_ERROR_FORBIDDEN – The transfer is aborted from a different context (blocking mode only).

  • NRFX_ERROR_INTERNAL – The UARTE peripheral reports an error.

  • NRFX_ERROR_INVALID_ADDR – p_data does not point to RAM buffer.

nrfx_err_t nrfx_uarte_rx_ready(nrfx_uarte_t const *p_instance, size_t *p_rx_amount)

Function for testing the receiver state in blocking mode.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • p_rx_amount[out] Pointer to the variable to be filled with the number of received bytes. Can be NULL.

Return values:
  • NRFX_SUCCESS – The receiving operation is completed.

  • NRFX_ERROR_BUSY – The receiver did not complete the operation.

  • NRFX_ERROR_FORBIDDEN – Operation is not supporting in the current configuration.

nrfx_err_t nrfx_uarte_rx_abort(nrfx_uarte_t const *p_instance, bool disable_all, bool sync)

Function for aborting any ongoing reception.

Note

NRFX_UARTE_EVT_RX_DONE event will be generated in non-blocking mode. It will contain number of bytes received until the abort was called. The event handler will be called from the UARTE interrupt context.

Warning

When the double-buffering feature is used and the UARTE interrupt is processed with a delay (for example, due to a higher priority interrupt) long enough for the first buffer to be filled completely, the event handler will be supplied with the pointer to the first buffer and the number of bytes received in the second buffer. This is because from hardware perspective it is impossible to deduce the reception of which buffer has been aborted. To prevent this from happening, keep the UARTE interrupt latency low or use large enough reception buffers.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

  • disable_all[in] If true, UARTE is stopped. If false and there is a second RX buffer provided, only the first transfer is stopped.

  • sync[in] If true, receiver is disabled synchronously.

Return values:
  • NRFX_SUCCESS – Successfully initiate disabling or disabled (synchronous mode).

  • NRFX_ERROR_INVALID_STATE – Receiver was not enabled.

uint32_t nrfx_uarte_errorsrc_get(nrfx_uarte_t const *p_instance)

Function for reading error source mask.

Mask contains values from nrf_uarte_error_mask_t.

Note

Function must be used in the blocking mode only. In case of non-blocking mode, an error event is generated. Function clears error sources after reading.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

Returns:

Mask of reported errors.

bool nrfx_uarte_rx_new_data_check(nrfx_uarte_t const *p_instance)

Function for checking if there was new RX data since the last check.

Function checks NRF_UARTE_EVENT_RXDRDY event and clears it if it was set.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

Return values:
  • true – At least one byte was received since the last check.

  • false – No new data was received since the last check.

NRFX_STATIC_INLINE void nrfx_uarte_rxdrdy_enable(nrfx_uarte_t const *p_instance)

Function for enabling NRFX_UARTE_EVT_RX_BYTE event.

The function enables the NRF_UARTE_EVENT_RXDRDY hardware event which is generated whenever a byte is received in RXD registers. The event indicates only that data is received, hence it must not be used yet because it may not be present yet in the RAM buffer handled by the EasyDMA. The event can be used only to detect a receiver activity. The event can be enabled at any time. Enabling it may increase the number of interrupts (after each received byte).

Note

If there were a receiver activity prior to enabling the NRF_UARTE_EVENT_RXDRDY event, the NRF_UARTE_EVENT_RXDRDY event may already be set and the NRFX_UARTE_EVT_RX_BYTE will be triggered immediately. To avoid that, it is recommended to clear that event by calling the nrfx_uarte_rx_new_data_check.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

NRFX_STATIC_INLINE void nrfx_uarte_rxdrdy_disable(nrfx_uarte_t const *p_instance)

Function for disabling NRFX_UARTE_EVT_RX_BYTE event.

The function disables the RXDRDY hardware event. See the nrfx_uarte_rxdrdy_enable for more details. The event can be disabled at any time.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

nrfx_err_t nrfx_uarte_int_trigger(nrfx_uarte_t const *p_instance)

Function for triggering UARTE interrupt.

Function can be used to jump into UARTE interrupt context. User handler is called with the event NRFX_UARTE_EVT_TRIGGER.

Parameters:
  • p_instance[in] Pointer to the driver instance structure.

Return values:
  • NRFX_ERROR_FORBIDDEN – Failure. User handler is not configured.

  • NRFX_SUCCESS – If interrupt is successfully triggered.

struct nrfx_uarte_t
#include <nrfx_uarte.h>

Structure for the UARTE driver instance.

Public Members

NRF_UARTE_Type *p_reg

Pointer to a structure with UARTE registers.

uint8_t drv_inst_idx

Index of the driver instance. For internal use only.

struct nrfx_uarte_rx_cache_t
#include <nrfx_uarte.h>

Structure used internally to handle reception through cache buffers.

Public Members

nrfy_uarte_buffer_t user[2]

User buffers.

nrfy_uarte_buffer_t cache[2]

Cache buffers.

size_t cache_len

Single cache buffer length.

size_t started

Used for tracking progress of the current user buffer.

size_t received

Amount of received data in the current user buffer.

uint8_t idx

Used for determining which cache buffer to use.

bool buf_req

Flag indicate that next user buffer should be requested.

struct nrfx_uarte_config_t
#include <nrfx_uarte.h>

Structure for the UARTE configuration.

Public Members

uint32_t txd_pin

TXD pin number.

uint32_t rxd_pin

RXD pin number.

uint32_t rts_pin

RTS pin number.

uint32_t cts_pin

CTS pin number.

void *p_context

Context passed to interrupt handler.

nrfy_uarte_buffer_t tx_cache

TX cache buffer.

nrfy_uarte_buffer_t rx_cache

RX cache buffer.

A buffer to store flushed RX data. The buffer is also used when the input RX buffer is from an address space that cannot be handled by the DMA. A buffer size must be at least 5 bytes which is the size of the HW FIFO, and should be bigger if expected to be used as cache when an input RX buffer cannot be used for the DMA. If not provided, then bytes left in the FIFO after a receiver is disabled will be discarded, and reception will not be performed if the input RX buffer cannot be used by the DMA.

nrfx_uarte_rx_cache_t *p_rx_cache_scratch

Static RAM memory area used for receiving data through RX cache buffer. Can be NULL if RX caching is not used.

nrf_uarte_baudrate_t baudrate

Baud rate.

nrf_uarte_config_t config

Peripheral configuration.

bool skip_psel_cfg

Skip pin selection configuration.

When set to true, the driver does not modify pin select registers in the peripheral. Those registers are supposed to be set up externally before the driver is initialized.

Note

When both GPIO configuration and pin selection are to be skipped, the structure fields that specify pins can be omitted, as they are ignored anyway.

bool skip_gpio_cfg

Skip GPIO configuration of pins.

When set to true, the driver does not modify any GPIO parameters of the used pins. Those parameters are supposed to be configured externally before the driver is initialized.

bool tx_stop_on_end

Indicates that the STOPTX task is PPIed with ENDTX event.

If SHORT exists, then it will be used by the driver, otherwise (D)PPI connection must be setup by the user.

uint8_t interrupt_priority

Interrupt priority.

struct nrfx_uarte_rx_evt_t
#include <nrfx_uarte.h>

Structure for NRFX_UARTE_EVT_RX_DONE event.

Public Members

uint8_t *p_buffer

Pointer to the received data.

size_t length

Amount of received data.

struct nrfx_uarte_tx_evt_t
#include <nrfx_uarte.h>

Structure for the NRFX_UARTE_EVT_TX_DONE event.

Public Members

const uint8_t *p_buffer

Pointer to the transferred data.

size_t length

Amount of transferred data.

uint32_t flags

Flags. See Flags used for .

struct nrfx_uarte_error_evt_t
#include <nrfx_uarte.h>

Structure for the NRFX_UARTE_EVT_ERROR.

Public Members

nrfy_uarte_buffer_t rx

Transfer details, including number of bytes received.

uint32_t error_mask

Mask of error flags that generated the event.

struct nrfx_uarte_rx_disabled_evt_t
#include <nrfx_uarte.h>

Structure for the NRFX_UARTE_EVT_RX_DISABLED.

Public Members

size_t flush_cnt

Number of bytes flushed from RX FIFO.

They will be copied to the next provided buffer if NRFX_UARTE_RX_ENABLE_KEEP_FIFO_CONTENT is set.

struct nrfx_uarte_event_t
#include <nrfx_uarte.h>

Structure for UARTE event.

Public Members

nrfx_uarte_evt_type_t type

Event type.

nrfx_uarte_rx_evt_t rx

Data for NRFX_UARTE_EVT_RX_DONE.

nrfx_uarte_tx_evt_t tx

Data for NRFX_UARTE_EVT_TX_DONE.

nrfx_uarte_error_evt_t error

Data for NRFX_UARTE_EVT_ERROR.

nrfx_uarte_rx_disabled_evt_t rx_disabled

Data for NRFX_UARTE_EVT_RX_DISABLED.

union nrfx_uarte_event_t.[anonymous] data

Union to store event data.