Program Listing for File adc.h#

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

#pragma once

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

namespace RP2040
{

struct [[gnu::packed]] adc
{
    /* Constant attributes. */
    static constexpr std::size_t size = 36;
    /* Fields. */
    uint32_t CS;
    const uint32_t RESULT =
        {};
    uint32_t FCS;
    const uint32_t FIFO = {};
    uint32_t DIV;
    const uint32_t INTR = {};
    uint32_t INTE;
    uint32_t INTF;
    const uint32_t INTS =
        {};
    /* Methods. */

    inline bool get_CS_EN() volatile
    {
        return CS & (1u << 0u);
    }

    inline void set_CS_EN() volatile
    {
        CS |= 1u << 0u;
    }

    inline void clear_CS_EN() volatile
    {
        CS &= ~(1u << 0u);
    }

    inline void toggle_CS_EN() volatile
    {
        CS ^= 1u << 0u;
    }

    inline bool get_CS_TS_EN() volatile
    {
        return CS & (1u << 1u);
    }

    inline void set_CS_TS_EN() volatile
    {
        CS |= 1u << 1u;
    }

    inline void clear_CS_TS_EN() volatile
    {
        CS &= ~(1u << 1u);
    }

    inline void toggle_CS_TS_EN() volatile
    {
        CS ^= 1u << 1u;
    }

    inline bool get_CS_START_ONCE() volatile
    {
        return CS & (1u << 2u);
    }

    inline void set_CS_START_ONCE() volatile
    {
        CS |= 1u << 2u;
    }

    inline void clear_CS_START_ONCE() volatile
    {
        CS &= ~(1u << 2u);
    }

    inline void toggle_CS_START_ONCE() volatile
    {
        CS ^= 1u << 2u;
    }

    inline bool get_CS_START_MANY() volatile
    {
        return CS & (1u << 3u);
    }

    inline void set_CS_START_MANY() volatile
    {
        CS |= 1u << 3u;
    }

    inline void clear_CS_START_MANY() volatile
    {
        CS &= ~(1u << 3u);
    }

    inline void toggle_CS_START_MANY() volatile
    {
        CS ^= 1u << 3u;
    }

    inline bool get_CS_READY() volatile
    {
        return CS & (1u << 8u);
    }

    inline bool get_CS_ERR() volatile
    {
        return CS & (1u << 9u);
    }

    inline bool get_CS_ERR_STICKY() volatile
    {
        return CS & (1u << 10u);
    }

    inline void set_CS_ERR_STICKY() volatile
    {
        CS |= 1u << 10u;
    }

    inline void clear_CS_ERR_STICKY() volatile
    {
        CS &= ~(1u << 10u);
    }

    inline void toggle_CS_ERR_STICKY() volatile
    {
        CS ^= 1u << 10u;
    }

    inline uint8_t get_CS_AINSEL() volatile
    {
        return (CS >> 12u) & 0b111u;
    }

    inline void set_CS_AINSEL(uint8_t value) volatile
    {
        uint32_t curr = CS;

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

        CS = curr;
    }

    inline uint8_t get_CS_RROBIN() volatile
    {
        return (CS >> 16u) & 0b11111u;
    }

    inline void set_CS_RROBIN(uint8_t value) volatile
    {
        uint32_t curr = CS;

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

        CS = curr;
    }

    inline void get_CS(bool &EN, bool &TS_EN, bool &START_ONCE,
                       bool &START_MANY, bool &READY, bool &ERR,
                       bool &ERR_STICKY, uint8_t &AINSEL,
                       uint8_t &RROBIN) volatile
    {
        uint32_t curr = CS;

        EN = curr & (1u << 0u);
        TS_EN = curr & (1u << 1u);
        START_ONCE = curr & (1u << 2u);
        START_MANY = curr & (1u << 3u);
        READY = curr & (1u << 8u);
        ERR = curr & (1u << 9u);
        ERR_STICKY = curr & (1u << 10u);
        AINSEL = (curr >> 12u) & 0b111u;
        RROBIN = (curr >> 16u) & 0b11111u;
    }

    inline void set_CS(bool EN, bool TS_EN, bool START_ONCE, bool START_MANY,
                       bool ERR_STICKY, uint8_t AINSEL,
                       uint8_t RROBIN) volatile
    {
        uint32_t curr = CS;

        curr &= ~(0b1u << 0u);
        curr |= (EN & 0b1u) << 0u;
        curr &= ~(0b1u << 1u);
        curr |= (TS_EN & 0b1u) << 1u;
        curr &= ~(0b1u << 2u);
        curr |= (START_ONCE & 0b1u) << 2u;
        curr &= ~(0b1u << 3u);
        curr |= (START_MANY & 0b1u) << 3u;
        curr &= ~(0b1u << 10u);
        curr |= (ERR_STICKY & 0b1u) << 10u;
        curr &= ~(0b111u << 12u);
        curr |= (AINSEL & 0b111u) << 12u;
        curr &= ~(0b11111u << 16u);
        curr |= (RROBIN & 0b11111u) << 16u;

        CS = curr;
    }

    inline uint16_t get_RESULT_RESULT() volatile
    {
        return (RESULT >> 0u) & 0b111111111111u;
    }

    inline bool get_FCS_EN() volatile
    {
        return FCS & (1u << 0u);
    }

    inline void set_FCS_EN() volatile
    {
        FCS |= 1u << 0u;
    }

    inline void clear_FCS_EN() volatile
    {
        FCS &= ~(1u << 0u);
    }

    inline void toggle_FCS_EN() volatile
    {
        FCS ^= 1u << 0u;
    }

    inline bool get_FCS_SHIFT() volatile
    {
        return FCS & (1u << 1u);
    }

    inline void set_FCS_SHIFT() volatile
    {
        FCS |= 1u << 1u;
    }

    inline void clear_FCS_SHIFT() volatile
    {
        FCS &= ~(1u << 1u);
    }

    inline void toggle_FCS_SHIFT() volatile
    {
        FCS ^= 1u << 1u;
    }

    inline bool get_FCS_ERR() volatile
    {
        return FCS & (1u << 2u);
    }

    inline void set_FCS_ERR() volatile
    {
        FCS |= 1u << 2u;
    }

    inline void clear_FCS_ERR() volatile
    {
        FCS &= ~(1u << 2u);
    }

    inline void toggle_FCS_ERR() volatile
    {
        FCS ^= 1u << 2u;
    }

    inline bool get_FCS_DREQ_EN() volatile
    {
        return FCS & (1u << 3u);
    }

    inline void set_FCS_DREQ_EN() volatile
    {
        FCS |= 1u << 3u;
    }

    inline void clear_FCS_DREQ_EN() volatile
    {
        FCS &= ~(1u << 3u);
    }

    inline void toggle_FCS_DREQ_EN() volatile
    {
        FCS ^= 1u << 3u;
    }

    inline bool get_FCS_EMPTY() volatile
    {
        return FCS & (1u << 8u);
    }

    inline bool get_FCS_FULL() volatile
    {
        return FCS & (1u << 9u);
    }

    inline bool get_FCS_UNDER() volatile
    {
        return FCS & (1u << 10u);
    }

    inline void set_FCS_UNDER() volatile
    {
        FCS |= 1u << 10u;
    }

    inline void clear_FCS_UNDER() volatile
    {
        FCS &= ~(1u << 10u);
    }

    inline void toggle_FCS_UNDER() volatile
    {
        FCS ^= 1u << 10u;
    }

    inline bool get_FCS_OVER() volatile
    {
        return FCS & (1u << 11u);
    }

    inline void set_FCS_OVER() volatile
    {
        FCS |= 1u << 11u;
    }

    inline void clear_FCS_OVER() volatile
    {
        FCS &= ~(1u << 11u);
    }

    inline void toggle_FCS_OVER() volatile
    {
        FCS ^= 1u << 11u;
    }

    inline uint8_t get_FCS_LEVEL() volatile
    {
        return (FCS >> 16u) & 0b1111u;
    }

    inline uint8_t get_FCS_THRESH() volatile
    {
        return (FCS >> 24u) & 0b1111u;
    }

    inline void set_FCS_THRESH(uint8_t value) volatile
    {
        uint32_t curr = FCS;

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

        FCS = curr;
    }

    inline void get_FCS(bool &EN, bool &SHIFT, bool &ERR, bool &DREQ_EN,
                        bool &EMPTY, bool &FULL, bool &UNDER, bool &OVER,
                        uint8_t &LEVEL, uint8_t &THRESH) volatile
    {
        uint32_t curr = FCS;

        EN = curr & (1u << 0u);
        SHIFT = curr & (1u << 1u);
        ERR = curr & (1u << 2u);
        DREQ_EN = curr & (1u << 3u);
        EMPTY = curr & (1u << 8u);
        FULL = curr & (1u << 9u);
        UNDER = curr & (1u << 10u);
        OVER = curr & (1u << 11u);
        LEVEL = (curr >> 16u) & 0b1111u;
        THRESH = (curr >> 24u) & 0b1111u;
    }

    inline void set_FCS(bool EN, bool SHIFT, bool ERR, bool DREQ_EN,
                        bool UNDER, bool OVER, uint8_t THRESH) volatile
    {
        uint32_t curr = FCS;

        curr &= ~(0b1u << 0u);
        curr |= (EN & 0b1u) << 0u;
        curr &= ~(0b1u << 1u);
        curr |= (SHIFT & 0b1u) << 1u;
        curr &= ~(0b1u << 2u);
        curr |= (ERR & 0b1u) << 2u;
        curr &= ~(0b1u << 3u);
        curr |= (DREQ_EN & 0b1u) << 3u;
        curr &= ~(0b1u << 10u);
        curr |= (UNDER & 0b1u) << 10u;
        curr &= ~(0b1u << 11u);
        curr |= (OVER & 0b1u) << 11u;
        curr &= ~(0b1111u << 24u);
        curr |= (THRESH & 0b1111u) << 24u;

        FCS = curr;
    }

    inline uint16_t get_FIFO_VAL() volatile
    {
        return (FIFO >> 0u) & 0b111111111111u;
    }

    inline bool get_FIFO_ERR() volatile
    {
        return FIFO & (1u << 15u);
    }

    inline void get_FIFO(uint16_t &VAL, bool &ERR) volatile
    {
        uint32_t curr = FIFO;

        VAL = (curr >> 0u) & 0b111111111111u;
        ERR = curr & (1u << 15u);
    }

    inline uint8_t get_DIV_FRAC() volatile
    {
        return (DIV >> 0u) & 0b11111111u;
    }

    inline void set_DIV_FRAC(uint8_t value) volatile
    {
        uint32_t curr = DIV;

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

        DIV = curr;
    }

    inline uint16_t get_DIV_INT() volatile
    {
        return (DIV >> 8u) & 0b1111111111111111u;
    }

    inline void set_DIV_INT(uint16_t value) volatile
    {
        uint32_t curr = DIV;

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

        DIV = curr;
    }

    inline void get_DIV(uint8_t &FRAC, uint16_t &INT) volatile
    {
        uint32_t curr = DIV;

        FRAC = (curr >> 0u) & 0b11111111u;
        INT = (curr >> 8u) & 0b1111111111111111u;
    }

    inline void set_DIV(uint8_t FRAC, uint16_t INT) volatile
    {
        uint32_t curr = DIV;

        curr &= ~(0b11111111u << 0u);
        curr |= (FRAC & 0b11111111u) << 0u;
        curr &= ~(0b1111111111111111u << 8u);
        curr |= (INT & 0b1111111111111111u) << 8u;

        DIV = curr;
    }

    inline bool get_INTR_FIFO() volatile
    {
        return INTR & (1u << 0u);
    }

    inline bool get_INTE_FIFO() volatile
    {
        return INTE & (1u << 0u);
    }

    inline void set_INTE_FIFO() volatile
    {
        INTE |= 1u << 0u;
    }

    inline void clear_INTE_FIFO() volatile
    {
        INTE &= ~(1u << 0u);
    }

    inline void toggle_INTE_FIFO() volatile
    {
        INTE ^= 1u << 0u;
    }

    inline bool get_INTF_FIFO() volatile
    {
        return INTF & (1u << 0u);
    }

    inline void set_INTF_FIFO() volatile
    {
        INTF |= 1u << 0u;
    }

    inline void clear_INTF_FIFO() volatile
    {
        INTF &= ~(1u << 0u);
    }

    inline void toggle_INTF_FIFO() volatile
    {
        INTF ^= 1u << 0u;
    }

    inline bool get_INTS_FIFO() volatile
    {
        return INTS & (1u << 0u);
    }
};

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

static volatile adc *const ADC = reinterpret_cast<adc *>(0x4004c000);

}; // namespace RP2040