ao_uart.h
UART

Include

stdint.h

Constants

AO_UART_BRG_BITS

#define AO_UART_BRG_BITS (20)

The size of the UxBRG.BRG field, in bits.

AO_UART_BRG_MAX

AO_UART_BRG_MIN

#define AO_UART_BRG_MAX ((1 << (AO_UART_BRG_BITS)) - 1)
#define AO_UART_BRG_MIN (0)

The maximum and minimum value, respectively, of the UxBRG.BRG field.

AO_UART_DATA_BITS_8_PARITY_NONE

AO_UART_DATA_BITS_8_PARITY_EVEN

AO_UART_DATA_BITS_8_PARITY_ODD

AO_UART_DATA_BITS_9_PARITY_NONE

#define AO_UART_DATA_BITS_8_PARITY_NONE (0b00)
#define AO_UART_DATA_BITS_8_PARITY_EVEN (0b01)
#define AO_UART_DATA_BITS_8_PARITY_ODD  (0b10)
#define AO_UART_DATA_BITS_9_PARITY_NONE (0b11)

The options for the UxMODE.PDSEL field specifying both the number of data bits and the parity.

AO_UART_FIFO_CAPACITY

#define AO_UART_FIFO_CAPACITY (8)

The capacity of the receive FIFO, in bytes.

AO_UART_STOP_BITS_ONE

AO_UART_STOP_BITS_TWO

#define AO_UART_STOP_BITS_ONE (0)
#define AO_UART_STOP_BITS_TWO (1)

The options for the UxMODE.STSEL field specifying the number of stop bits.

Types

ao_uart_error_t

typedef enum ao_uart_error_t ao_uart_error_t;

Represents the possible error conditions.

ao_uart_reg_t

typedef struct ao_uart_reg_t ao_uart_reg_t;

Represents the control register set.

ao_uart_reg_*_t

typedef struct ao_uart_reg_brg_t  ao_uart_reg_brg_t;
typedef struct ao_uart_reg_mode_t ao_uart_reg_mode_t;
typedef struct ao_uart_reg_rx_t   ao_uart_reg_rx_t;
typedef struct ao_uart_reg_sta_t  ao_uart_reg_sta_t;
typedef struct ao_uart_reg_tx_t   ao_uart_reg_tx_t;

These types represent individual control registers.

Enums

ao_uart_error_t

enum ao_uart_error_t
{
    AO_UART_ERROR_NONE    = 0,
    AO_UART_ERROR_OVERRUN = 0x02,
    AO_UART_ERROR_FRAMING = 0x04,
    AO_UART_ERROR_PARITY  = 0x08,
    AO_UART_ERROR_ALL     = 0x0E
};
AO_UART_ERROR_ALL All.
AO_UART_ERROR_FRAMING A framing error has been detected for the current byte.
AO_UART_ERROR_NONE None.
AO_UART_ERROR_OVERRUN The receive buffer has overrun.
AO_UART_ERROR_PARITY A parity error has been detected for the current byte.

Structs

ao_uart_reg_t

struct ao_uart_reg_t
{
    ao_uart_reg_mode_t mode;
    ao_uart_reg_sta_t  sta;
    ao_uart_reg_tx_t   tx;
    ao_uart_reg_rx_t   rx;
    ao_uart_reg_brg_t  brg;
};

ao_uart_reg_brg_t

struct ao_uart_reg_brg_t
{
    union
    {
        uint32_t     volatile reg;
        struct
        {
            uint32_t volatile brg : 20;
        }                     bits;
    };
    uint32_t         volatile clr;
    uint32_t         volatile set;
    uint32_t         volatile inv;
};

ao_uart_reg_mode_t

struct ao_uart_reg_mode_t
{
    union
    {
        uint32_t     volatile reg;
        struct
        {
            uint32_t volatile stsel  : 1;
            uint32_t volatile pdsel  : 2;
            uint32_t volatile brgh   : 1;
            uint32_t volatile rxinv  : 1;
            uint32_t volatile abaud  : 1;
            uint32_t volatile lpback : 1;
            uint32_t volatile wake   : 1;
            uint32_t volatile uen    : 2;
            uint32_t volatile        : 1;
            uint32_t volatile rtsmd  : 1;
            uint32_t volatile iren   : 1;
            uint32_t volatile sidl   : 1;
            uint32_t volatile        : 1;
            uint32_t volatile on     : 1;
            uint32_t volatile runovf : 1;
            uint32_t volatile clksel : 2;
            uint32_t volatile        : 3;
            uint32_t volatile active : 1;
            uint32_t volatile slpen  : 1;
        }                     bits;
    };
    uint32_t         volatile clr;
    uint32_t         volatile set;
    uint32_t         volatile inv;
};

ao_uart_reg_rx_t

struct ao_uart_reg_rx_t
{
    union
    {
        uint32_t     volatile reg;
        struct
        {
            uint32_t volatile rx :  9;
        }                     bits;
    };
    uint32_t         volatile    : 32;
    uint32_t         volatile    : 32;
    uint32_t         volatile    : 32;
};

ao_uart_reg_sta_t

struct ao_uart_reg_sta_t
{
    union
    {
        uint32_t     volatile reg;
        struct
        {
            uint32_t volatile urxda   : 1;
            uint32_t volatile oerr    : 1;
            uint32_t volatile ferr    : 1;
            uint32_t volatile perr    : 1;
            uint32_t volatile ridle   : 1;
            uint32_t volatile adden   : 1;
            uint32_t volatile urxisel : 2;
            uint32_t volatile trmt    : 1;
            uint32_t volatile utxbf   : 1;
            uint32_t volatile utxen   : 1;
            uint32_t volatile utxbrk  : 1;
            uint32_t volatile urxen   : 1;
            uint32_t volatile utxinv  : 1;
            uint32_t volatile utxisel : 2;
            uint32_t volatile addr    : 8;
            uint32_t volatile adm_en  : 1;
        }                     bits;
    };
    uint32_t         volatile clr;
    uint32_t         volatile set;
    uint32_t         volatile inv;
};

ao_uart_reg_tx_t

struct ao_uart_reg_tx_t
{
    union
    {
        uint32_t     volatile reg;
        struct
        {
            uint32_t volatile tx :  9;
        }                     bits;
    };
    uint32_t         volatile    : 32;
    uint32_t         volatile    : 32;
    uint32_t         volatile    : 32;
};

Functions

AO_UART_BAUD_MAX

#define AO_UART_BAUD_MAX(f_pbclk) \
(                                 \
    AO_UART_BAUD_MAX_HI(f_pbclk)  \
)
f_pbclk The frequency of the peripheral bus clock, in Hertz.

Calculates the maximum possible baud rate, in bits per second.

AO_UART_BAUD_MAX_HI

#define AO_UART_BAUD_MAX_HI(f_pbclk) \
(                                    \
    (f_pbclk) /                      \
    (                                \
        4 * ((AO_UART_BRG_MIN) + 1)  \
    )                                \
)
f_pbclk The frequency of the peripheral bus clock, in Hertz.

Calculates the maximum possible baud rate in high-speed mode, in bits per second.

AO_UART_BAUD_MAX_LO

#define AO_UART_BAUD_MAX_LO(f_pbclk) \
(                                    \
    (f_pbclk) /                      \
    (                                \
        16 * ((AO_UART_BRG_MIN) + 1) \
    )                                \
)
f_pbclk The frequency of the peripheral bus clock, in Hertz.

Calculates the maximum possible baud rate in standard-speed mode, in bits per second.

AO_UART_BAUD_MIN

#define AO_UART_BAUD_MIN(f_pbclk) \
(                                 \
    AO_UART_BAUD_MIN_LO(f_pbclk)  \
)
f_pbclk The frequency of the peripheral bus clock, in Hertz.

Calculates the minimum possible baud rate, in bits per second.

AO_UART_BAUD_MIN_HI

#define AO_UART_BAUD_MIN_HI(f_pbclk)    \
(                                       \
    1 +                                 \
    (                                   \
        ((f_pbclk) - 1) /               \
        (                               \
            4 * ((AO_UART_BRG_MAX) + 1) \
        )                               \
    )                                   \
)
f_pbclk The frequency of the peripheral bus clock, in Hertz.

Calculates the minimum possible baud rate in high-speed mode, in bits per second.

AO_UART_BAUD_MIN_LO

#define AO_UART_BAUD_MIN_LO(f_pbclk)     \
(                                        \
    1 +                                  \
    (                                    \
        ((f_pbclk) - 1) /                \
        (                                \
            16 * ((AO_UART_BRG_MAX) + 1) \
        )                                \
    )                                    \
)
f_pbclk The frequency of the peripheral bus clock, in Hertz.

Calculates the minimum possible baud rate in standard-speed mode, in bits per second.