Program Listing for File uart0.h#

Return to documentation for file (src/generated/structs/uart0.h)

#pragma once

#include "../ifgen/common.h"

namespace RP2040
{

struct [[gnu::packed]] uart0
{
    /* Constant attributes. */
    static constexpr std::size_t size = 4096;
    /* Fields. */
    uint32_t UARTDR;
    uint32_t UARTRSR;
    static constexpr std::size_t reserved_padding0_length = 4;
    const uint32_t reserved_padding0[reserved_padding0_length] = {};
    const uint32_t UARTFR = {};
    const uint32_t reserved_padding1 = {};
    uint32_t UARTILPR;
    uint32_t
        UARTIBRD;
    uint32_t
        UARTFBRD;
    uint32_t UARTLCR_H;
    uint32_t UARTCR;
    uint32_t UARTIFLS;
    uint32_t UARTIMSC;
    const uint32_t UARTRIS =
        {};
    const uint32_t UARTMIS =
        {};
    uint32_t UARTICR;
    uint32_t UARTDMACR;
    static constexpr std::size_t reserved_padding2_length = 997;
    const uint32_t reserved_padding2[reserved_padding2_length] = {};
    const uint32_t UARTPERIPHID0 =
        {};
    const uint32_t UARTPERIPHID1 =
        {};
    const uint32_t UARTPERIPHID2 =
        {};
    const uint32_t UARTPERIPHID3 =
        {};
    const uint32_t UARTPCELLID0 = {};
    const uint32_t UARTPCELLID1 = {};
    const uint32_t UARTPCELLID2 = {};
    const uint32_t UARTPCELLID3 = {};
    /* Methods. */

    inline uint8_t get_UARTDR_DATA() volatile
    {
        return (UARTDR >> 0u) & 0b11111111u;
    }

    inline void set_UARTDR_DATA(uint8_t value) volatile
    {
        uint32_t curr = UARTDR;

        curr &= ~(0b11111111u << 0u);
        curr |= (value & 0b11111111u) << 0u;

        UARTDR = curr;
    }

    inline bool get_UARTDR_FE() volatile
    {
        return UARTDR & (1u << 8u);
    }

    inline bool get_UARTDR_PE() volatile
    {
        return UARTDR & (1u << 9u);
    }

    inline bool get_UARTDR_BE() volatile
    {
        return UARTDR & (1u << 10u);
    }

    inline bool get_UARTDR_OE() volatile
    {
        return UARTDR & (1u << 11u);
    }

    inline void get_UARTDR(uint8_t &DATA, bool &FE, bool &PE, bool &BE,
                           bool &OE) volatile
    {
        uint32_t curr = UARTDR;

        DATA = (curr >> 0u) & 0b11111111u;
        FE = curr & (1u << 8u);
        PE = curr & (1u << 9u);
        BE = curr & (1u << 10u);
        OE = curr & (1u << 11u);
    }

    inline bool get_UARTRSR_FE() volatile
    {
        return UARTRSR & (1u << 0u);
    }

    inline void set_UARTRSR_FE() volatile
    {
        UARTRSR |= 1u << 0u;
    }

    inline void clear_UARTRSR_FE() volatile
    {
        UARTRSR &= ~(1u << 0u);
    }

    inline void toggle_UARTRSR_FE() volatile
    {
        UARTRSR ^= 1u << 0u;
    }

    inline bool get_UARTRSR_PE() volatile
    {
        return UARTRSR & (1u << 1u);
    }

    inline void set_UARTRSR_PE() volatile
    {
        UARTRSR |= 1u << 1u;
    }

    inline void clear_UARTRSR_PE() volatile
    {
        UARTRSR &= ~(1u << 1u);
    }

    inline void toggle_UARTRSR_PE() volatile
    {
        UARTRSR ^= 1u << 1u;
    }

    inline bool get_UARTRSR_BE() volatile
    {
        return UARTRSR & (1u << 2u);
    }

    inline void set_UARTRSR_BE() volatile
    {
        UARTRSR |= 1u << 2u;
    }

    inline void clear_UARTRSR_BE() volatile
    {
        UARTRSR &= ~(1u << 2u);
    }

    inline void toggle_UARTRSR_BE() volatile
    {
        UARTRSR ^= 1u << 2u;
    }

    inline bool get_UARTRSR_OE() volatile
    {
        return UARTRSR & (1u << 3u);
    }

    inline void set_UARTRSR_OE() volatile
    {
        UARTRSR |= 1u << 3u;
    }

    inline void clear_UARTRSR_OE() volatile
    {
        UARTRSR &= ~(1u << 3u);
    }

    inline void toggle_UARTRSR_OE() volatile
    {
        UARTRSR ^= 1u << 3u;
    }

    inline void get_UARTRSR(bool &FE, bool &PE, bool &BE, bool &OE) volatile
    {
        uint32_t curr = UARTRSR;

        FE = curr & (1u << 0u);
        PE = curr & (1u << 1u);
        BE = curr & (1u << 2u);
        OE = curr & (1u << 3u);
    }

    inline void set_UARTRSR(bool FE, bool PE, bool BE, bool OE) volatile
    {
        uint32_t curr = UARTRSR;

        curr &= ~(0b1u << 0u);
        curr |= (FE & 0b1u) << 0u;
        curr &= ~(0b1u << 1u);
        curr |= (PE & 0b1u) << 1u;
        curr &= ~(0b1u << 2u);
        curr |= (BE & 0b1u) << 2u;
        curr &= ~(0b1u << 3u);
        curr |= (OE & 0b1u) << 3u;

        UARTRSR = curr;
    }

    inline bool get_UARTFR_CTS() volatile
    {
        return UARTFR & (1u << 0u);
    }

    inline bool get_UARTFR_DSR() volatile
    {
        return UARTFR & (1u << 1u);
    }

    inline bool get_UARTFR_DCD() volatile
    {
        return UARTFR & (1u << 2u);
    }

    inline bool get_UARTFR_BUSY() volatile
    {
        return UARTFR & (1u << 3u);
    }

    inline bool get_UARTFR_RXFE() volatile
    {
        return UARTFR & (1u << 4u);
    }

    inline bool get_UARTFR_TXFF() volatile
    {
        return UARTFR & (1u << 5u);
    }

    inline bool get_UARTFR_RXFF() volatile
    {
        return UARTFR & (1u << 6u);
    }

    inline bool get_UARTFR_TXFE() volatile
    {
        return UARTFR & (1u << 7u);
    }

    inline bool get_UARTFR_RI() volatile
    {
        return UARTFR & (1u << 8u);
    }

    inline void get_UARTFR(bool &CTS, bool &DSR, bool &DCD, bool &BUSY,
                           bool &RXFE, bool &TXFF, bool &RXFF, bool &TXFE,
                           bool &RI) volatile
    {
        uint32_t curr = UARTFR;

        CTS = curr & (1u << 0u);
        DSR = curr & (1u << 1u);
        DCD = curr & (1u << 2u);
        BUSY = curr & (1u << 3u);
        RXFE = curr & (1u << 4u);
        TXFF = curr & (1u << 5u);
        RXFF = curr & (1u << 6u);
        TXFE = curr & (1u << 7u);
        RI = curr & (1u << 8u);
    }

    inline uint8_t get_UARTILPR_ILPDVSR() volatile
    {
        return (UARTILPR >> 0u) & 0b11111111u;
    }

    inline void set_UARTILPR_ILPDVSR(uint8_t value) volatile
    {
        uint32_t curr = UARTILPR;

        curr &= ~(0b11111111u << 0u);
        curr |= (value & 0b11111111u) << 0u;

        UARTILPR = curr;
    }

    inline uint16_t get_UARTIBRD_BAUD_DIVINT() volatile
    {
        return (UARTIBRD >> 0u) & 0b1111111111111111u;
    }

    inline void set_UARTIBRD_BAUD_DIVINT(uint16_t value) volatile
    {
        uint32_t curr = UARTIBRD;

        curr &= ~(0b1111111111111111u << 0u);
        curr |= (value & 0b1111111111111111u) << 0u;

        UARTIBRD = curr;
    }

    inline uint8_t get_UARTFBRD_BAUD_DIVFRAC() volatile
    {
        return (UARTFBRD >> 0u) & 0b111111u;
    }

    inline void set_UARTFBRD_BAUD_DIVFRAC(uint8_t value) volatile
    {
        uint32_t curr = UARTFBRD;

        curr &= ~(0b111111u << 0u);
        curr |= (value & 0b111111u) << 0u;

        UARTFBRD = curr;
    }

    inline bool get_UARTLCR_H_BRK() volatile
    {
        return UARTLCR_H & (1u << 0u);
    }

    inline void set_UARTLCR_H_BRK() volatile
    {
        UARTLCR_H |= 1u << 0u;
    }

    inline void clear_UARTLCR_H_BRK() volatile
    {
        UARTLCR_H &= ~(1u << 0u);
    }

    inline void toggle_UARTLCR_H_BRK() volatile
    {
        UARTLCR_H ^= 1u << 0u;
    }

    inline bool get_UARTLCR_H_PEN() volatile
    {
        return UARTLCR_H & (1u << 1u);
    }

    inline void set_UARTLCR_H_PEN() volatile
    {
        UARTLCR_H |= 1u << 1u;
    }

    inline void clear_UARTLCR_H_PEN() volatile
    {
        UARTLCR_H &= ~(1u << 1u);
    }

    inline void toggle_UARTLCR_H_PEN() volatile
    {
        UARTLCR_H ^= 1u << 1u;
    }

    inline bool get_UARTLCR_H_EPS() volatile
    {
        return UARTLCR_H & (1u << 2u);
    }

    inline void set_UARTLCR_H_EPS() volatile
    {
        UARTLCR_H |= 1u << 2u;
    }

    inline void clear_UARTLCR_H_EPS() volatile
    {
        UARTLCR_H &= ~(1u << 2u);
    }

    inline void toggle_UARTLCR_H_EPS() volatile
    {
        UARTLCR_H ^= 1u << 2u;
    }

    inline bool get_UARTLCR_H_STP2() volatile
    {
        return UARTLCR_H & (1u << 3u);
    }

    inline void set_UARTLCR_H_STP2() volatile
    {
        UARTLCR_H |= 1u << 3u;
    }

    inline void clear_UARTLCR_H_STP2() volatile
    {
        UARTLCR_H &= ~(1u << 3u);
    }

    inline void toggle_UARTLCR_H_STP2() volatile
    {
        UARTLCR_H ^= 1u << 3u;
    }

    inline bool get_UARTLCR_H_FEN() volatile
    {
        return UARTLCR_H & (1u << 4u);
    }

    inline void set_UARTLCR_H_FEN() volatile
    {
        UARTLCR_H |= 1u << 4u;
    }

    inline void clear_UARTLCR_H_FEN() volatile
    {
        UARTLCR_H &= ~(1u << 4u);
    }

    inline void toggle_UARTLCR_H_FEN() volatile
    {
        UARTLCR_H ^= 1u << 4u;
    }

    inline uint8_t get_UARTLCR_H_WLEN() volatile
    {
        return (UARTLCR_H >> 5u) & 0b11u;
    }

    inline void set_UARTLCR_H_WLEN(uint8_t value) volatile
    {
        uint32_t curr = UARTLCR_H;

        curr &= ~(0b11u << 5u);
        curr |= (value & 0b11u) << 5u;

        UARTLCR_H = curr;
    }

    inline bool get_UARTLCR_H_SPS() volatile
    {
        return UARTLCR_H & (1u << 7u);
    }

    inline void set_UARTLCR_H_SPS() volatile
    {
        UARTLCR_H |= 1u << 7u;
    }

    inline void clear_UARTLCR_H_SPS() volatile
    {
        UARTLCR_H &= ~(1u << 7u);
    }

    inline void toggle_UARTLCR_H_SPS() volatile
    {
        UARTLCR_H ^= 1u << 7u;
    }

    inline void get_UARTLCR_H(bool &BRK, bool &PEN, bool &EPS, bool &STP2,
                              bool &FEN, uint8_t &WLEN, bool &SPS) volatile
    {
        uint32_t curr = UARTLCR_H;

        BRK = curr & (1u << 0u);
        PEN = curr & (1u << 1u);
        EPS = curr & (1u << 2u);
        STP2 = curr & (1u << 3u);
        FEN = curr & (1u << 4u);
        WLEN = (curr >> 5u) & 0b11u;
        SPS = curr & (1u << 7u);
    }

    inline void set_UARTLCR_H(bool BRK, bool PEN, bool EPS, bool STP2,
                              bool FEN, uint8_t WLEN, bool SPS) volatile
    {
        uint32_t curr = UARTLCR_H;

        curr &= ~(0b1u << 0u);
        curr |= (BRK & 0b1u) << 0u;
        curr &= ~(0b1u << 1u);
        curr |= (PEN & 0b1u) << 1u;
        curr &= ~(0b1u << 2u);
        curr |= (EPS & 0b1u) << 2u;
        curr &= ~(0b1u << 3u);
        curr |= (STP2 & 0b1u) << 3u;
        curr &= ~(0b1u << 4u);
        curr |= (FEN & 0b1u) << 4u;
        curr &= ~(0b11u << 5u);
        curr |= (WLEN & 0b11u) << 5u;
        curr &= ~(0b1u << 7u);
        curr |= (SPS & 0b1u) << 7u;

        UARTLCR_H = curr;
    }

    inline bool get_UARTCR_UARTEN() volatile
    {
        return UARTCR & (1u << 0u);
    }

    inline void set_UARTCR_UARTEN() volatile
    {
        UARTCR |= 1u << 0u;
    }

    inline void clear_UARTCR_UARTEN() volatile
    {
        UARTCR &= ~(1u << 0u);
    }

    inline void toggle_UARTCR_UARTEN() volatile
    {
        UARTCR ^= 1u << 0u;
    }

    inline bool get_UARTCR_SIREN() volatile
    {
        return UARTCR & (1u << 1u);
    }

    inline void set_UARTCR_SIREN() volatile
    {
        UARTCR |= 1u << 1u;
    }

    inline void clear_UARTCR_SIREN() volatile
    {
        UARTCR &= ~(1u << 1u);
    }

    inline void toggle_UARTCR_SIREN() volatile
    {
        UARTCR ^= 1u << 1u;
    }

    inline bool get_UARTCR_SIRLP() volatile
    {
        return UARTCR & (1u << 2u);
    }

    inline void set_UARTCR_SIRLP() volatile
    {
        UARTCR |= 1u << 2u;
    }

    inline void clear_UARTCR_SIRLP() volatile
    {
        UARTCR &= ~(1u << 2u);
    }

    inline void toggle_UARTCR_SIRLP() volatile
    {
        UARTCR ^= 1u << 2u;
    }

    inline bool get_UARTCR_LBE() volatile
    {
        return UARTCR & (1u << 7u);
    }

    inline void set_UARTCR_LBE() volatile
    {
        UARTCR |= 1u << 7u;
    }

    inline void clear_UARTCR_LBE() volatile
    {
        UARTCR &= ~(1u << 7u);
    }

    inline void toggle_UARTCR_LBE() volatile
    {
        UARTCR ^= 1u << 7u;
    }

    inline bool get_UARTCR_TXE() volatile
    {
        return UARTCR & (1u << 8u);
    }

    inline void set_UARTCR_TXE() volatile
    {
        UARTCR |= 1u << 8u;
    }

    inline void clear_UARTCR_TXE() volatile
    {
        UARTCR &= ~(1u << 8u);
    }

    inline void toggle_UARTCR_TXE() volatile
    {
        UARTCR ^= 1u << 8u;
    }

    inline bool get_UARTCR_RXE() volatile
    {
        return UARTCR & (1u << 9u);
    }

    inline void set_UARTCR_RXE() volatile
    {
        UARTCR |= 1u << 9u;
    }

    inline void clear_UARTCR_RXE() volatile
    {
        UARTCR &= ~(1u << 9u);
    }

    inline void toggle_UARTCR_RXE() volatile
    {
        UARTCR ^= 1u << 9u;
    }

    inline bool get_UARTCR_DTR() volatile
    {
        return UARTCR & (1u << 10u);
    }

    inline void set_UARTCR_DTR() volatile
    {
        UARTCR |= 1u << 10u;
    }

    inline void clear_UARTCR_DTR() volatile
    {
        UARTCR &= ~(1u << 10u);
    }

    inline void toggle_UARTCR_DTR() volatile
    {
        UARTCR ^= 1u << 10u;
    }

    inline bool get_UARTCR_RTS() volatile
    {
        return UARTCR & (1u << 11u);
    }

    inline void set_UARTCR_RTS() volatile
    {
        UARTCR |= 1u << 11u;
    }

    inline void clear_UARTCR_RTS() volatile
    {
        UARTCR &= ~(1u << 11u);
    }

    inline void toggle_UARTCR_RTS() volatile
    {
        UARTCR ^= 1u << 11u;
    }

    inline bool get_UARTCR_OUT1() volatile
    {
        return UARTCR & (1u << 12u);
    }

    inline void set_UARTCR_OUT1() volatile
    {
        UARTCR |= 1u << 12u;
    }

    inline void clear_UARTCR_OUT1() volatile
    {
        UARTCR &= ~(1u << 12u);
    }

    inline void toggle_UARTCR_OUT1() volatile
    {
        UARTCR ^= 1u << 12u;
    }

    inline bool get_UARTCR_OUT2() volatile
    {
        return UARTCR & (1u << 13u);
    }

    inline void set_UARTCR_OUT2() volatile
    {
        UARTCR |= 1u << 13u;
    }

    inline void clear_UARTCR_OUT2() volatile
    {
        UARTCR &= ~(1u << 13u);
    }

    inline void toggle_UARTCR_OUT2() volatile
    {
        UARTCR ^= 1u << 13u;
    }

    inline bool get_UARTCR_RTSEN() volatile
    {
        return UARTCR & (1u << 14u);
    }

    inline void set_UARTCR_RTSEN() volatile
    {
        UARTCR |= 1u << 14u;
    }

    inline void clear_UARTCR_RTSEN() volatile
    {
        UARTCR &= ~(1u << 14u);
    }

    inline void toggle_UARTCR_RTSEN() volatile
    {
        UARTCR ^= 1u << 14u;
    }

    inline bool get_UARTCR_CTSEN() volatile
    {
        return UARTCR & (1u << 15u);
    }

    inline void set_UARTCR_CTSEN() volatile
    {
        UARTCR |= 1u << 15u;
    }

    inline void clear_UARTCR_CTSEN() volatile
    {
        UARTCR &= ~(1u << 15u);
    }

    inline void toggle_UARTCR_CTSEN() volatile
    {
        UARTCR ^= 1u << 15u;
    }

    inline void get_UARTCR(bool &UARTEN, bool &SIREN, bool &SIRLP, bool &LBE,
                           bool &TXE, bool &RXE, bool &DTR, bool &RTS,
                           bool &OUT1, bool &OUT2, bool &RTSEN,
                           bool &CTSEN) volatile
    {
        uint32_t curr = UARTCR;

        UARTEN = curr & (1u << 0u);
        SIREN = curr & (1u << 1u);
        SIRLP = curr & (1u << 2u);
        LBE = curr & (1u << 7u);
        TXE = curr & (1u << 8u);
        RXE = curr & (1u << 9u);
        DTR = curr & (1u << 10u);
        RTS = curr & (1u << 11u);
        OUT1 = curr & (1u << 12u);
        OUT2 = curr & (1u << 13u);
        RTSEN = curr & (1u << 14u);
        CTSEN = curr & (1u << 15u);
    }

    inline void set_UARTCR(bool UARTEN, bool SIREN, bool SIRLP, bool LBE,
                           bool TXE, bool RXE, bool DTR, bool RTS, bool OUT1,
                           bool OUT2, bool RTSEN, bool CTSEN) volatile
    {
        uint32_t curr = UARTCR;

        curr &= ~(0b1u << 0u);
        curr |= (UARTEN & 0b1u) << 0u;
        curr &= ~(0b1u << 1u);
        curr |= (SIREN & 0b1u) << 1u;
        curr &= ~(0b1u << 2u);
        curr |= (SIRLP & 0b1u) << 2u;
        curr &= ~(0b1u << 7u);
        curr |= (LBE & 0b1u) << 7u;
        curr &= ~(0b1u << 8u);
        curr |= (TXE & 0b1u) << 8u;
        curr &= ~(0b1u << 9u);
        curr |= (RXE & 0b1u) << 9u;
        curr &= ~(0b1u << 10u);
        curr |= (DTR & 0b1u) << 10u;
        curr &= ~(0b1u << 11u);
        curr |= (RTS & 0b1u) << 11u;
        curr &= ~(0b1u << 12u);
        curr |= (OUT1 & 0b1u) << 12u;
        curr &= ~(0b1u << 13u);
        curr |= (OUT2 & 0b1u) << 13u;
        curr &= ~(0b1u << 14u);
        curr |= (RTSEN & 0b1u) << 14u;
        curr &= ~(0b1u << 15u);
        curr |= (CTSEN & 0b1u) << 15u;

        UARTCR = curr;
    }

    inline uint8_t get_UARTIFLS_TXIFLSEL() volatile
    {
        return (UARTIFLS >> 0u) & 0b111u;
    }

    inline void set_UARTIFLS_TXIFLSEL(uint8_t value) volatile
    {
        uint32_t curr = UARTIFLS;

        curr &= ~(0b111u << 0u);
        curr |= (value & 0b111u) << 0u;

        UARTIFLS = curr;
    }

    inline uint8_t get_UARTIFLS_RXIFLSEL() volatile
    {
        return (UARTIFLS >> 3u) & 0b111u;
    }

    inline void set_UARTIFLS_RXIFLSEL(uint8_t value) volatile
    {
        uint32_t curr = UARTIFLS;

        curr &= ~(0b111u << 3u);
        curr |= (value & 0b111u) << 3u;

        UARTIFLS = curr;
    }

    inline void get_UARTIFLS(uint8_t &TXIFLSEL, uint8_t &RXIFLSEL) volatile
    {
        uint32_t curr = UARTIFLS;

        TXIFLSEL = (curr >> 0u) & 0b111u;
        RXIFLSEL = (curr >> 3u) & 0b111u;
    }

    inline void set_UARTIFLS(uint8_t TXIFLSEL, uint8_t RXIFLSEL) volatile
    {
        uint32_t curr = UARTIFLS;

        curr &= ~(0b111u << 0u);
        curr |= (TXIFLSEL & 0b111u) << 0u;
        curr &= ~(0b111u << 3u);
        curr |= (RXIFLSEL & 0b111u) << 3u;

        UARTIFLS = curr;
    }

    inline bool get_UARTIMSC_RIMIM() volatile
    {
        return UARTIMSC & (1u << 0u);
    }

    inline void set_UARTIMSC_RIMIM() volatile
    {
        UARTIMSC |= 1u << 0u;
    }

    inline void clear_UARTIMSC_RIMIM() volatile
    {
        UARTIMSC &= ~(1u << 0u);
    }

    inline void toggle_UARTIMSC_RIMIM() volatile
    {
        UARTIMSC ^= 1u << 0u;
    }

    inline bool get_UARTIMSC_CTSMIM() volatile
    {
        return UARTIMSC & (1u << 1u);
    }

    inline void set_UARTIMSC_CTSMIM() volatile
    {
        UARTIMSC |= 1u << 1u;
    }

    inline void clear_UARTIMSC_CTSMIM() volatile
    {
        UARTIMSC &= ~(1u << 1u);
    }

    inline void toggle_UARTIMSC_CTSMIM() volatile
    {
        UARTIMSC ^= 1u << 1u;
    }

    inline bool get_UARTIMSC_DCDMIM() volatile
    {
        return UARTIMSC & (1u << 2u);
    }

    inline void set_UARTIMSC_DCDMIM() volatile
    {
        UARTIMSC |= 1u << 2u;
    }

    inline void clear_UARTIMSC_DCDMIM() volatile
    {
        UARTIMSC &= ~(1u << 2u);
    }

    inline void toggle_UARTIMSC_DCDMIM() volatile
    {
        UARTIMSC ^= 1u << 2u;
    }

    inline bool get_UARTIMSC_DSRMIM() volatile
    {
        return UARTIMSC & (1u << 3u);
    }

    inline void set_UARTIMSC_DSRMIM() volatile
    {
        UARTIMSC |= 1u << 3u;
    }

    inline void clear_UARTIMSC_DSRMIM() volatile
    {
        UARTIMSC &= ~(1u << 3u);
    }

    inline void toggle_UARTIMSC_DSRMIM() volatile
    {
        UARTIMSC ^= 1u << 3u;
    }

    inline bool get_UARTIMSC_RXIM() volatile
    {
        return UARTIMSC & (1u << 4u);
    }

    inline void set_UARTIMSC_RXIM() volatile
    {
        UARTIMSC |= 1u << 4u;
    }

    inline void clear_UARTIMSC_RXIM() volatile
    {
        UARTIMSC &= ~(1u << 4u);
    }

    inline void toggle_UARTIMSC_RXIM() volatile
    {
        UARTIMSC ^= 1u << 4u;
    }

    inline bool get_UARTIMSC_TXIM() volatile
    {
        return UARTIMSC & (1u << 5u);
    }

    inline void set_UARTIMSC_TXIM() volatile
    {
        UARTIMSC |= 1u << 5u;
    }

    inline void clear_UARTIMSC_TXIM() volatile
    {
        UARTIMSC &= ~(1u << 5u);
    }

    inline void toggle_UARTIMSC_TXIM() volatile
    {
        UARTIMSC ^= 1u << 5u;
    }

    inline bool get_UARTIMSC_RTIM() volatile
    {
        return UARTIMSC & (1u << 6u);
    }

    inline void set_UARTIMSC_RTIM() volatile
    {
        UARTIMSC |= 1u << 6u;
    }

    inline void clear_UARTIMSC_RTIM() volatile
    {
        UARTIMSC &= ~(1u << 6u);
    }

    inline void toggle_UARTIMSC_RTIM() volatile
    {
        UARTIMSC ^= 1u << 6u;
    }

    inline bool get_UARTIMSC_FEIM() volatile
    {
        return UARTIMSC & (1u << 7u);
    }

    inline void set_UARTIMSC_FEIM() volatile
    {
        UARTIMSC |= 1u << 7u;
    }

    inline void clear_UARTIMSC_FEIM() volatile
    {
        UARTIMSC &= ~(1u << 7u);
    }

    inline void toggle_UARTIMSC_FEIM() volatile
    {
        UARTIMSC ^= 1u << 7u;
    }

    inline bool get_UARTIMSC_PEIM() volatile
    {
        return UARTIMSC & (1u << 8u);
    }

    inline void set_UARTIMSC_PEIM() volatile
    {
        UARTIMSC |= 1u << 8u;
    }

    inline void clear_UARTIMSC_PEIM() volatile
    {
        UARTIMSC &= ~(1u << 8u);
    }

    inline void toggle_UARTIMSC_PEIM() volatile
    {
        UARTIMSC ^= 1u << 8u;
    }

    inline bool get_UARTIMSC_BEIM() volatile
    {
        return UARTIMSC & (1u << 9u);
    }

    inline void set_UARTIMSC_BEIM() volatile
    {
        UARTIMSC |= 1u << 9u;
    }

    inline void clear_UARTIMSC_BEIM() volatile
    {
        UARTIMSC &= ~(1u << 9u);
    }

    inline void toggle_UARTIMSC_BEIM() volatile
    {
        UARTIMSC ^= 1u << 9u;
    }

    inline bool get_UARTIMSC_OEIM() volatile
    {
        return UARTIMSC & (1u << 10u);
    }

    inline void set_UARTIMSC_OEIM() volatile
    {
        UARTIMSC |= 1u << 10u;
    }

    inline void clear_UARTIMSC_OEIM() volatile
    {
        UARTIMSC &= ~(1u << 10u);
    }

    inline void toggle_UARTIMSC_OEIM() volatile
    {
        UARTIMSC ^= 1u << 10u;
    }

    inline void get_UARTIMSC(bool &RIMIM, bool &CTSMIM, bool &DCDMIM,
                             bool &DSRMIM, bool &RXIM, bool &TXIM, bool &RTIM,
                             bool &FEIM, bool &PEIM, bool &BEIM,
                             bool &OEIM) volatile
    {
        uint32_t curr = UARTIMSC;

        RIMIM = curr & (1u << 0u);
        CTSMIM = curr & (1u << 1u);
        DCDMIM = curr & (1u << 2u);
        DSRMIM = curr & (1u << 3u);
        RXIM = curr & (1u << 4u);
        TXIM = curr & (1u << 5u);
        RTIM = curr & (1u << 6u);
        FEIM = curr & (1u << 7u);
        PEIM = curr & (1u << 8u);
        BEIM = curr & (1u << 9u);
        OEIM = curr & (1u << 10u);
    }

    inline void set_UARTIMSC(bool RIMIM, bool CTSMIM, bool DCDMIM, bool DSRMIM,
                             bool RXIM, bool TXIM, bool RTIM, bool FEIM,
                             bool PEIM, bool BEIM, bool OEIM) volatile
    {
        uint32_t curr = UARTIMSC;

        curr &= ~(0b1u << 0u);
        curr |= (RIMIM & 0b1u) << 0u;
        curr &= ~(0b1u << 1u);
        curr |= (CTSMIM & 0b1u) << 1u;
        curr &= ~(0b1u << 2u);
        curr |= (DCDMIM & 0b1u) << 2u;
        curr &= ~(0b1u << 3u);
        curr |= (DSRMIM & 0b1u) << 3u;
        curr &= ~(0b1u << 4u);
        curr |= (RXIM & 0b1u) << 4u;
        curr &= ~(0b1u << 5u);
        curr |= (TXIM & 0b1u) << 5u;
        curr &= ~(0b1u << 6u);
        curr |= (RTIM & 0b1u) << 6u;
        curr &= ~(0b1u << 7u);
        curr |= (FEIM & 0b1u) << 7u;
        curr &= ~(0b1u << 8u);
        curr |= (PEIM & 0b1u) << 8u;
        curr &= ~(0b1u << 9u);
        curr |= (BEIM & 0b1u) << 9u;
        curr &= ~(0b1u << 10u);
        curr |= (OEIM & 0b1u) << 10u;

        UARTIMSC = curr;
    }

    inline bool get_UARTRIS_RIRMIS() volatile
    {
        return UARTRIS & (1u << 0u);
    }

    inline bool get_UARTRIS_CTSRMIS() volatile
    {
        return UARTRIS & (1u << 1u);
    }

    inline bool get_UARTRIS_DCDRMIS() volatile
    {
        return UARTRIS & (1u << 2u);
    }

    inline bool get_UARTRIS_DSRRMIS() volatile
    {
        return UARTRIS & (1u << 3u);
    }

    inline bool get_UARTRIS_RXRIS() volatile
    {
        return UARTRIS & (1u << 4u);
    }

    inline bool get_UARTRIS_TXRIS() volatile
    {
        return UARTRIS & (1u << 5u);
    }

    inline bool get_UARTRIS_RTRIS() volatile
    {
        return UARTRIS & (1u << 6u);
    }

    inline bool get_UARTRIS_FERIS() volatile
    {
        return UARTRIS & (1u << 7u);
    }

    inline bool get_UARTRIS_PERIS() volatile
    {
        return UARTRIS & (1u << 8u);
    }

    inline bool get_UARTRIS_BERIS() volatile
    {
        return UARTRIS & (1u << 9u);
    }

    inline bool get_UARTRIS_OERIS() volatile
    {
        return UARTRIS & (1u << 10u);
    }

    inline void get_UARTRIS(bool &RIRMIS, bool &CTSRMIS, bool &DCDRMIS,
                            bool &DSRRMIS, bool &RXRIS, bool &TXRIS,
                            bool &RTRIS, bool &FERIS, bool &PERIS, bool &BERIS,
                            bool &OERIS) volatile
    {
        uint32_t curr = UARTRIS;

        RIRMIS = curr & (1u << 0u);
        CTSRMIS = curr & (1u << 1u);
        DCDRMIS = curr & (1u << 2u);
        DSRRMIS = curr & (1u << 3u);
        RXRIS = curr & (1u << 4u);
        TXRIS = curr & (1u << 5u);
        RTRIS = curr & (1u << 6u);
        FERIS = curr & (1u << 7u);
        PERIS = curr & (1u << 8u);
        BERIS = curr & (1u << 9u);
        OERIS = curr & (1u << 10u);
    }

    inline bool get_UARTMIS_RIMMIS() volatile
    {
        return UARTMIS & (1u << 0u);
    }

    inline bool get_UARTMIS_CTSMMIS() volatile
    {
        return UARTMIS & (1u << 1u);
    }

    inline bool get_UARTMIS_DCDMMIS() volatile
    {
        return UARTMIS & (1u << 2u);
    }

    inline bool get_UARTMIS_DSRMMIS() volatile
    {
        return UARTMIS & (1u << 3u);
    }

    inline bool get_UARTMIS_RXMIS() volatile
    {
        return UARTMIS & (1u << 4u);
    }

    inline bool get_UARTMIS_TXMIS() volatile
    {
        return UARTMIS & (1u << 5u);
    }

    inline bool get_UARTMIS_RTMIS() volatile
    {
        return UARTMIS & (1u << 6u);
    }

    inline bool get_UARTMIS_FEMIS() volatile
    {
        return UARTMIS & (1u << 7u);
    }

    inline bool get_UARTMIS_PEMIS() volatile
    {
        return UARTMIS & (1u << 8u);
    }

    inline bool get_UARTMIS_BEMIS() volatile
    {
        return UARTMIS & (1u << 9u);
    }

    inline bool get_UARTMIS_OEMIS() volatile
    {
        return UARTMIS & (1u << 10u);
    }

    inline void get_UARTMIS(bool &RIMMIS, bool &CTSMMIS, bool &DCDMMIS,
                            bool &DSRMMIS, bool &RXMIS, bool &TXMIS,
                            bool &RTMIS, bool &FEMIS, bool &PEMIS, bool &BEMIS,
                            bool &OEMIS) volatile
    {
        uint32_t curr = UARTMIS;

        RIMMIS = curr & (1u << 0u);
        CTSMMIS = curr & (1u << 1u);
        DCDMMIS = curr & (1u << 2u);
        DSRMMIS = curr & (1u << 3u);
        RXMIS = curr & (1u << 4u);
        TXMIS = curr & (1u << 5u);
        RTMIS = curr & (1u << 6u);
        FEMIS = curr & (1u << 7u);
        PEMIS = curr & (1u << 8u);
        BEMIS = curr & (1u << 9u);
        OEMIS = curr & (1u << 10u);
    }

    inline bool get_UARTICR_RIMIC() volatile
    {
        return UARTICR & (1u << 0u);
    }

    inline void set_UARTICR_RIMIC() volatile
    {
        UARTICR |= 1u << 0u;
    }

    inline void clear_UARTICR_RIMIC() volatile
    {
        UARTICR &= ~(1u << 0u);
    }

    inline void toggle_UARTICR_RIMIC() volatile
    {
        UARTICR ^= 1u << 0u;
    }

    inline bool get_UARTICR_CTSMIC() volatile
    {
        return UARTICR & (1u << 1u);
    }

    inline void set_UARTICR_CTSMIC() volatile
    {
        UARTICR |= 1u << 1u;
    }

    inline void clear_UARTICR_CTSMIC() volatile
    {
        UARTICR &= ~(1u << 1u);
    }

    inline void toggle_UARTICR_CTSMIC() volatile
    {
        UARTICR ^= 1u << 1u;
    }

    inline bool get_UARTICR_DCDMIC() volatile
    {
        return UARTICR & (1u << 2u);
    }

    inline void set_UARTICR_DCDMIC() volatile
    {
        UARTICR |= 1u << 2u;
    }

    inline void clear_UARTICR_DCDMIC() volatile
    {
        UARTICR &= ~(1u << 2u);
    }

    inline void toggle_UARTICR_DCDMIC() volatile
    {
        UARTICR ^= 1u << 2u;
    }

    inline bool get_UARTICR_DSRMIC() volatile
    {
        return UARTICR & (1u << 3u);
    }

    inline void set_UARTICR_DSRMIC() volatile
    {
        UARTICR |= 1u << 3u;
    }

    inline void clear_UARTICR_DSRMIC() volatile
    {
        UARTICR &= ~(1u << 3u);
    }

    inline void toggle_UARTICR_DSRMIC() volatile
    {
        UARTICR ^= 1u << 3u;
    }

    inline bool get_UARTICR_RXIC() volatile
    {
        return UARTICR & (1u << 4u);
    }

    inline void set_UARTICR_RXIC() volatile
    {
        UARTICR |= 1u << 4u;
    }

    inline void clear_UARTICR_RXIC() volatile
    {
        UARTICR &= ~(1u << 4u);
    }

    inline void toggle_UARTICR_RXIC() volatile
    {
        UARTICR ^= 1u << 4u;
    }

    inline bool get_UARTICR_TXIC() volatile
    {
        return UARTICR & (1u << 5u);
    }

    inline void set_UARTICR_TXIC() volatile
    {
        UARTICR |= 1u << 5u;
    }

    inline void clear_UARTICR_TXIC() volatile
    {
        UARTICR &= ~(1u << 5u);
    }

    inline void toggle_UARTICR_TXIC() volatile
    {
        UARTICR ^= 1u << 5u;
    }

    inline bool get_UARTICR_RTIC() volatile
    {
        return UARTICR & (1u << 6u);
    }

    inline void set_UARTICR_RTIC() volatile
    {
        UARTICR |= 1u << 6u;
    }

    inline void clear_UARTICR_RTIC() volatile
    {
        UARTICR &= ~(1u << 6u);
    }

    inline void toggle_UARTICR_RTIC() volatile
    {
        UARTICR ^= 1u << 6u;
    }

    inline bool get_UARTICR_FEIC() volatile
    {
        return UARTICR & (1u << 7u);
    }

    inline void set_UARTICR_FEIC() volatile
    {
        UARTICR |= 1u << 7u;
    }

    inline void clear_UARTICR_FEIC() volatile
    {
        UARTICR &= ~(1u << 7u);
    }

    inline void toggle_UARTICR_FEIC() volatile
    {
        UARTICR ^= 1u << 7u;
    }

    inline bool get_UARTICR_PEIC() volatile
    {
        return UARTICR & (1u << 8u);
    }

    inline void set_UARTICR_PEIC() volatile
    {
        UARTICR |= 1u << 8u;
    }

    inline void clear_UARTICR_PEIC() volatile
    {
        UARTICR &= ~(1u << 8u);
    }

    inline void toggle_UARTICR_PEIC() volatile
    {
        UARTICR ^= 1u << 8u;
    }

    inline bool get_UARTICR_BEIC() volatile
    {
        return UARTICR & (1u << 9u);
    }

    inline void set_UARTICR_BEIC() volatile
    {
        UARTICR |= 1u << 9u;
    }

    inline void clear_UARTICR_BEIC() volatile
    {
        UARTICR &= ~(1u << 9u);
    }

    inline void toggle_UARTICR_BEIC() volatile
    {
        UARTICR ^= 1u << 9u;
    }

    inline bool get_UARTICR_OEIC() volatile
    {
        return UARTICR & (1u << 10u);
    }

    inline void set_UARTICR_OEIC() volatile
    {
        UARTICR |= 1u << 10u;
    }

    inline void clear_UARTICR_OEIC() volatile
    {
        UARTICR &= ~(1u << 10u);
    }

    inline void toggle_UARTICR_OEIC() volatile
    {
        UARTICR ^= 1u << 10u;
    }

    inline void get_UARTICR(bool &RIMIC, bool &CTSMIC, bool &DCDMIC,
                            bool &DSRMIC, bool &RXIC, bool &TXIC, bool &RTIC,
                            bool &FEIC, bool &PEIC, bool &BEIC,
                            bool &OEIC) volatile
    {
        uint32_t curr = UARTICR;

        RIMIC = curr & (1u << 0u);
        CTSMIC = curr & (1u << 1u);
        DCDMIC = curr & (1u << 2u);
        DSRMIC = curr & (1u << 3u);
        RXIC = curr & (1u << 4u);
        TXIC = curr & (1u << 5u);
        RTIC = curr & (1u << 6u);
        FEIC = curr & (1u << 7u);
        PEIC = curr & (1u << 8u);
        BEIC = curr & (1u << 9u);
        OEIC = curr & (1u << 10u);
    }

    inline void set_UARTICR(bool RIMIC, bool CTSMIC, bool DCDMIC, bool DSRMIC,
                            bool RXIC, bool TXIC, bool RTIC, bool FEIC,
                            bool PEIC, bool BEIC, bool OEIC) volatile
    {
        uint32_t curr = UARTICR;

        curr &= ~(0b1u << 0u);
        curr |= (RIMIC & 0b1u) << 0u;
        curr &= ~(0b1u << 1u);
        curr |= (CTSMIC & 0b1u) << 1u;
        curr &= ~(0b1u << 2u);
        curr |= (DCDMIC & 0b1u) << 2u;
        curr &= ~(0b1u << 3u);
        curr |= (DSRMIC & 0b1u) << 3u;
        curr &= ~(0b1u << 4u);
        curr |= (RXIC & 0b1u) << 4u;
        curr &= ~(0b1u << 5u);
        curr |= (TXIC & 0b1u) << 5u;
        curr &= ~(0b1u << 6u);
        curr |= (RTIC & 0b1u) << 6u;
        curr &= ~(0b1u << 7u);
        curr |= (FEIC & 0b1u) << 7u;
        curr &= ~(0b1u << 8u);
        curr |= (PEIC & 0b1u) << 8u;
        curr &= ~(0b1u << 9u);
        curr |= (BEIC & 0b1u) << 9u;
        curr &= ~(0b1u << 10u);
        curr |= (OEIC & 0b1u) << 10u;

        UARTICR = curr;
    }

    inline bool get_UARTDMACR_RXDMAE() volatile
    {
        return UARTDMACR & (1u << 0u);
    }

    inline void set_UARTDMACR_RXDMAE() volatile
    {
        UARTDMACR |= 1u << 0u;
    }

    inline void clear_UARTDMACR_RXDMAE() volatile
    {
        UARTDMACR &= ~(1u << 0u);
    }

    inline void toggle_UARTDMACR_RXDMAE() volatile
    {
        UARTDMACR ^= 1u << 0u;
    }

    inline bool get_UARTDMACR_TXDMAE() volatile
    {
        return UARTDMACR & (1u << 1u);
    }

    inline void set_UARTDMACR_TXDMAE() volatile
    {
        UARTDMACR |= 1u << 1u;
    }

    inline void clear_UARTDMACR_TXDMAE() volatile
    {
        UARTDMACR &= ~(1u << 1u);
    }

    inline void toggle_UARTDMACR_TXDMAE() volatile
    {
        UARTDMACR ^= 1u << 1u;
    }

    inline bool get_UARTDMACR_DMAONERR() volatile
    {
        return UARTDMACR & (1u << 2u);
    }

    inline void set_UARTDMACR_DMAONERR() volatile
    {
        UARTDMACR |= 1u << 2u;
    }

    inline void clear_UARTDMACR_DMAONERR() volatile
    {
        UARTDMACR &= ~(1u << 2u);
    }

    inline void toggle_UARTDMACR_DMAONERR() volatile
    {
        UARTDMACR ^= 1u << 2u;
    }

    inline void get_UARTDMACR(bool &RXDMAE, bool &TXDMAE,
                              bool &DMAONERR) volatile
    {
        uint32_t curr = UARTDMACR;

        RXDMAE = curr & (1u << 0u);
        TXDMAE = curr & (1u << 1u);
        DMAONERR = curr & (1u << 2u);
    }

    inline void set_UARTDMACR(bool RXDMAE, bool TXDMAE, bool DMAONERR) volatile
    {
        uint32_t curr = UARTDMACR;

        curr &= ~(0b1u << 0u);
        curr |= (RXDMAE & 0b1u) << 0u;
        curr &= ~(0b1u << 1u);
        curr |= (TXDMAE & 0b1u) << 1u;
        curr &= ~(0b1u << 2u);
        curr |= (DMAONERR & 0b1u) << 2u;

        UARTDMACR = curr;
    }

    inline uint8_t get_UARTPERIPHID0_PARTNUMBER0() volatile
    {
        return (UARTPERIPHID0 >> 0u) & 0b11111111u;
    }

    inline uint8_t get_UARTPERIPHID1_PARTNUMBER1() volatile
    {
        return (UARTPERIPHID1 >> 0u) & 0b1111u;
    }

    inline uint8_t get_UARTPERIPHID1_DESIGNER0() volatile
    {
        return (UARTPERIPHID1 >> 4u) & 0b1111u;
    }

    inline void get_UARTPERIPHID1(uint8_t &PARTNUMBER1,
                                  uint8_t &DESIGNER0) volatile
    {
        uint32_t curr = UARTPERIPHID1;

        PARTNUMBER1 = (curr >> 0u) & 0b1111u;
        DESIGNER0 = (curr >> 4u) & 0b1111u;
    }

    inline uint8_t get_UARTPERIPHID2_DESIGNER1() volatile
    {
        return (UARTPERIPHID2 >> 0u) & 0b1111u;
    }

    inline uint8_t get_UARTPERIPHID2_REVISION() volatile
    {
        return (UARTPERIPHID2 >> 4u) & 0b1111u;
    }

    inline void get_UARTPERIPHID2(uint8_t &DESIGNER1,
                                  uint8_t &REVISION) volatile
    {
        uint32_t curr = UARTPERIPHID2;

        DESIGNER1 = (curr >> 0u) & 0b1111u;
        REVISION = (curr >> 4u) & 0b1111u;
    }

    inline uint8_t get_UARTPERIPHID3_CONFIGURATION() volatile
    {
        return (UARTPERIPHID3 >> 0u) & 0b11111111u;
    }

    inline uint8_t get_UARTPCELLID0_UARTPCELLID0() volatile
    {
        return (UARTPCELLID0 >> 0u) & 0b11111111u;
    }

    inline uint8_t get_UARTPCELLID1_UARTPCELLID1() volatile
    {
        return (UARTPCELLID1 >> 0u) & 0b11111111u;
    }

    inline uint8_t get_UARTPCELLID2_UARTPCELLID2() volatile
    {
        return (UARTPCELLID2 >> 0u) & 0b11111111u;
    }

    inline uint8_t get_UARTPCELLID3_UARTPCELLID3() volatile
    {
        return (UARTPCELLID3 >> 0u) & 0b11111111u;
    }
};

static_assert(sizeof(uart0) == uart0::size);

static volatile uart0 *const UART0 = reinterpret_cast<uart0 *>(0x40034000);

static volatile uart0 *const UART1 = reinterpret_cast<uart0 *>(0x40038000);

}; // namespace RP2040