Atmel Software Framework

Universal Asynchronous Receiver Transceiver (UART)

The Universal Asynchronous Receiver Transmitter features a two-pin UART that can be used for communication and trace purposes and offers an ideal medium for in-situ programming solutions.

Moreover, the association with two peripheral DMA controller (PDC) channels permits packet handling for these tasks with processor time reduced to a minimum.

Usage
  1. Enable the UART peripheral clock in the PMC.
  2. Enable the required UART PIOs (see pio.h).
  3. Configure the UART by calling uart_init.
  4. Send data through the UART using the uart_write.
  5. Receive data from the UART using the uart_read; the availability of data can be polled with uart_is_rx_ready.
  6. Disable the transmitter and/or the receiver of the UART with uart_disable_tx and uart_disable_rx.

Functions

void uart_config_optical_interface (Uart *p_uart, struct uart_config_optical *cfg)
 Enable UART optical interface. More...
 
void uart_disable (Uart *p_uart)
 Disable UART receiver and transmitter. More...
 
void uart_disable_interrupt (Uart *p_uart, uint32_t ul_sources)
 Disable UART interrupts. More...
 
void uart_disable_optical_interface (Uart *p_uart)
 Disable UART optical interface. More...
 
void uart_disable_rx (Uart *p_uart)
 Disable UART receiver. More...
 
void uart_disable_tx (Uart *p_uart)
 Disable UART transmitter. More...
 
void uart_enable (Uart *p_uart)
 Enable UART receiver and transmitter. More...
 
void uart_enable_interrupt (Uart *p_uart, uint32_t ul_sources)
 Enable UART interrupts. More...
 
void uart_enable_optical_interface (Uart *p_uart)
 Enable UART optical interface. More...
 
void uart_enable_rx (Uart *p_uart)
 Enable UART receiver. More...
 
void uart_enable_tx (Uart *p_uart)
 Enable UART transmitter. More...
 
uint32_t uart_get_interrupt_mask (Uart *p_uart)
 Read UART interrupt mask. More...
 
Pdc * uart_get_pdc_base (Uart *p_uart)
 Get UART PDC base address. More...
 
uint32_t uart_get_status (Uart *p_uart)
 Get current status. More...
 
uint32_t uart_init (Uart *p_uart, const sam_uart_opt_t *p_uart_opt)
 Configure UART with the specified parameters. More...
 
uint32_t uart_is_rx_buf_end (Uart *p_uart)
 Check if one receive buffer is filled. More...
 
uint32_t uart_is_rx_buf_full (Uart *p_uart)
 Check if both receive buffers are full. More...
 
uint32_t uart_is_rx_ready (Uart *p_uart)
 Check if Received data is ready. More...
 
uint32_t uart_is_tx_buf_empty (Uart *p_uart)
 Check if both transmit buffers are sent out. More...
 
uint32_t uart_is_tx_buf_end (Uart *p_uart)
 Check if one transmit buffer is sent out. More...
 
uint32_t uart_is_tx_empty (Uart *p_uart)
 Check if Transmit Hold Register is empty. More...
 
uint32_t uart_is_tx_ready (Uart *p_uart)
 Check if Transmit is Ready. More...
 
uint32_t uart_read (Uart *p_uart, uint8_t *puc_data)
 Read from UART Receive Holding Register. More...
 
void uart_reset (Uart *p_uart)
 Reset UART receiver and transmitter. More...
 
void uart_reset_rx (Uart *p_uart)
 Reset UART receiver. More...
 
void uart_reset_status (Uart *p_uart)
 Reset status bits. More...
 
void uart_reset_tx (Uart *p_uart)
 Reset UART transmitter. More...
 
void uart_set_clock_divisor (Uart *p_uart, uint16_t us_divisor)
 Set UART clock divisor value. More...
 
void uart_set_sleepwalking (Uart *p_uart, uint8_t ul_low_value, bool cmpmode, bool cmppar, uint8_t ul_high_value)
 Set sleepwalking match mode. More...
 
void uart_set_write_protection (Uart *p_uart, bool flag)
 Enables/Disables write protection mode. More...
 
uint32_t uart_write (Uart *p_uart, const uint8_t uc_data)
 Write to UART Transmit Holding Register Before writing user should check if tx is ready (or empty). More...
 

void uart_config_optical_interface ( Uart *  p_uart,
struct uart_config_optical cfg 
)

Enable UART optical interface.

Parameters
p_uartPointer to a UART instance.
cfgPointer to a UART optical interface configuration.

References Assert, uart_config_optical::clk_div, uart_config_optical::duty, uart_config_optical::rx_filter, uart_config_optical::rx_inverted, uart_config_optical::threshold, and uart_config_optical::tx_inverted.

void uart_disable ( Uart *  p_uart)

Disable UART receiver and transmitter.

Parameters
p_uartPointer to a UART instance.
void uart_disable_interrupt ( Uart *  p_uart,
uint32_t  ul_sources 
)

Disable UART interrupts.

Parameters
p_uartPointer to a UART instance.
ul_sourcesInterrupts to be disabled.
void uart_disable_optical_interface ( Uart *  p_uart)

Disable UART optical interface.

Parameters
p_uartPointer to a UART instance.

References Assert.

void uart_disable_rx ( Uart *  p_uart)

Disable UART receiver.

Parameters
p_uartPointer to a UART instance.
void uart_disable_tx ( Uart *  p_uart)

Disable UART transmitter.

Parameters
p_uartPointer to a UART instance.
void uart_enable ( Uart *  p_uart)

Enable UART receiver and transmitter.

Parameters
p_uartPointer to a UART instance.
void uart_enable_interrupt ( Uart *  p_uart,
uint32_t  ul_sources 
)

Enable UART interrupts.

Parameters
p_uartPointer to a UART instance.
ul_sourcesInterrupts to be enabled.
void uart_enable_optical_interface ( Uart *  p_uart)

Enable UART optical interface.

Parameters
p_uartPointer to a UART instance.

References Assert.

void uart_enable_rx ( Uart *  p_uart)

Enable UART receiver.

Parameters
p_uartPointer to a UART instance.
void uart_enable_tx ( Uart *  p_uart)

Enable UART transmitter.

Parameters
p_uartPointer to a UART instance.
uint32_t uart_get_interrupt_mask ( Uart *  p_uart)

Read UART interrupt mask.

Parameters
p_uartPointer to a UART instance.
Returns
The interrupt mask value.
Pdc* uart_get_pdc_base ( Uart *  p_uart)

Get UART PDC base address.

Parameters
p_uartPointer to a UART instance.
Returns
UART PDC registers base for PDC driver to access.
uint32_t uart_get_status ( Uart *  p_uart)

Get current status.

Parameters
p_uartPointer to a UART instance.
Returns
The current UART status.
uint32_t uart_init ( Uart *  p_uart,
const sam_uart_opt_t p_uart_opt 
)

Configure UART with the specified parameters.

Note
The PMC and PIOs must be configured first.
Parameters
p_uartPointer to a UART instance.
p_uart_optPointer to sam_uart_opt_t instance.
Return values
0Success.
1Bad baud rate generator value.

References UART_MCK_DIV, UART_MCK_DIV_MAX_FACTOR, sam_uart_opt::ul_baudrate, sam_uart_opt::ul_mck, and sam_uart_opt::ul_mode.

Referenced by usart_serial_init().

uint32_t uart_is_rx_buf_end ( Uart *  p_uart)

Check if one receive buffer is filled.

Parameters
p_uartPointer to a UART instance.
Return values
1Receive is completed.
0Receive is still pending.
uint32_t uart_is_rx_buf_full ( Uart *  p_uart)

Check if both receive buffers are full.

Parameters
p_uartPointer to a UART instance.
Return values
1Receive buffers are full.
0Receive buffers are not full.
uint32_t uart_is_rx_ready ( Uart *  p_uart)

Check if Received data is ready.

Check if data has been received and loaded in UART_RHR.

Parameters
p_uartPointer to a UART instance.
Return values
1One data has been received.
0No data has been received.

Referenced by usart_serial_is_rx_ready().

uint32_t uart_is_tx_buf_empty ( Uart *  p_uart)

Check if both transmit buffers are sent out.

Parameters
p_uartPointer to a UART instance.
Return values
1Transmit buffer is empty.
0Transmit buffer is not empty.
uint32_t uart_is_tx_buf_end ( Uart *  p_uart)

Check if one transmit buffer is sent out.

Parameters
p_uartPointer to a UART instance.
Return values
1Transmit is completed.
0Transmit is still pending.
uint32_t uart_is_tx_empty ( Uart *  p_uart)

Check if Transmit Hold Register is empty.

Check if the last data written in UART_THR has been loaded in TSR and the last data loaded in TSR has been transmitted.

Parameters
p_uartPointer to a UART instance.
Return values
1Transmitter is empty.
0Transmitter is not empty.
uint32_t uart_is_tx_ready ( Uart *  p_uart)

Check if Transmit is Ready.

Check if data has been loaded in UART_THR and is waiting to be loaded in the Transmit Shift Register (TSR).

Parameters
p_uartPointer to a UART instance.
Return values
1Data has been transmitted.
0Transmit is not ready, data pending.
uint32_t uart_read ( Uart *  p_uart,
uint8_t *  puc_data 
)

Read from UART Receive Holding Register.

Before reading user should check if rx is ready.

Parameters
p_uartPointer to a UART instance.
Return values
0Success.
1I/O Failure, UART is not ready.

Referenced by usart_serial_getchar().

void uart_reset ( Uart *  p_uart)

Reset UART receiver and transmitter.

Parameters
p_uartPointer to a UART instance.
void uart_reset_rx ( Uart *  p_uart)

Reset UART receiver.

Parameters
p_uartPointer to a UART instance.
void uart_reset_status ( Uart *  p_uart)

Reset status bits.

Parameters
p_uartPointer to a UART instance.
void uart_reset_tx ( Uart *  p_uart)

Reset UART transmitter.

Parameters
p_uartPointer to a UART instance.
void uart_set_clock_divisor ( Uart *  p_uart,
uint16_t  us_divisor 
)

Set UART clock divisor value.

Parameters
p_uartPointer to a UART instance.
us_divisorValue to be set.
void uart_set_sleepwalking ( Uart *  p_uart,
uint8_t  ul_low_value,
bool  cmpmode,
bool  cmppar,
uint8_t  ul_high_value 
)

Set sleepwalking match mode.

Parameters
p_uartPointer to a UART instance.
ul_low_valueFirst comparison value for received character.
ul_high_valueSecond comparison value for received character.
cmpmodeture for start condition, false for flag only.
cmpparture for parity check, false for no.

References Assert.

void uart_set_write_protection ( Uart *  p_uart,
bool  flag 
)

Enables/Disables write protection mode.

Parameters
p_uartPointer to a UART instance.
flagture for enable, false for disable.
uint32_t uart_write ( Uart *  p_uart,
const uint8_t  uc_data 
)

Write to UART Transmit Holding Register Before writing user should check if tx is ready (or empty).

Parameters
p_uartPointer to a UART instance.
dataData to be sent.
Return values
0Success.
1I/O Failure, UART is not ready.

Referenced by usart_serial_putchar().