Program Listing for File xip_ctrl.h#

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

#pragma once

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

namespace RP2040
{

struct [[gnu::packed]] xip_ctrl
{
    /* Constant attributes. */
    static constexpr std::size_t size = 32;
    /* Fields. */
    uint32_t CTRL;
    uint32_t FLUSH;
    const uint32_t STAT = {};
    uint32_t CTR_HIT;
    uint32_t CTR_ACC;
    uint32_t STREAM_ADDR;
    uint32_t STREAM_CTR;
    uint32_t
        STREAM_FIFO;
    /* Methods. */

    inline bool get_CTRL_EN() volatile
    {
        return CTRL & (1u << 0u);
    }

    inline void set_CTRL_EN() volatile
    {
        CTRL |= 1u << 0u;
    }

    inline void clear_CTRL_EN() volatile
    {
        CTRL &= ~(1u << 0u);
    }

    inline void toggle_CTRL_EN() volatile
    {
        CTRL ^= 1u << 0u;
    }

    inline bool get_CTRL_ERR_BADWRITE() volatile
    {
        return CTRL & (1u << 1u);
    }

    inline void set_CTRL_ERR_BADWRITE() volatile
    {
        CTRL |= 1u << 1u;
    }

    inline void clear_CTRL_ERR_BADWRITE() volatile
    {
        CTRL &= ~(1u << 1u);
    }

    inline void toggle_CTRL_ERR_BADWRITE() volatile
    {
        CTRL ^= 1u << 1u;
    }

    inline bool get_CTRL_POWER_DOWN() volatile
    {
        return CTRL & (1u << 3u);
    }

    inline void set_CTRL_POWER_DOWN() volatile
    {
        CTRL |= 1u << 3u;
    }

    inline void clear_CTRL_POWER_DOWN() volatile
    {
        CTRL &= ~(1u << 3u);
    }

    inline void toggle_CTRL_POWER_DOWN() volatile
    {
        CTRL ^= 1u << 3u;
    }

    inline void get_CTRL(bool &EN, bool &ERR_BADWRITE,
                         bool &POWER_DOWN) volatile
    {
        uint32_t curr = CTRL;

        EN = curr & (1u << 0u);
        ERR_BADWRITE = curr & (1u << 1u);
        POWER_DOWN = curr & (1u << 3u);
    }

    inline void set_CTRL(bool EN, bool ERR_BADWRITE, bool POWER_DOWN) volatile
    {
        uint32_t curr = CTRL;

        curr &= ~(0b1u << 0u);
        curr |= (EN & 0b1u) << 0u;
        curr &= ~(0b1u << 1u);
        curr |= (ERR_BADWRITE & 0b1u) << 1u;
        curr &= ~(0b1u << 3u);
        curr |= (POWER_DOWN & 0b1u) << 3u;

        CTRL = curr;
    }

    inline bool get_FLUSH_FLUSH() volatile
    {
        return FLUSH & (1u << 0u);
    }

    inline void set_FLUSH_FLUSH() volatile
    {
        FLUSH |= 1u << 0u;
    }

    inline void clear_FLUSH_FLUSH() volatile
    {
        FLUSH &= ~(1u << 0u);
    }

    inline void toggle_FLUSH_FLUSH() volatile
    {
        FLUSH ^= 1u << 0u;
    }

    inline bool get_STAT_FLUSH_READY() volatile
    {
        return STAT & (1u << 0u);
    }

    inline bool get_STAT_FIFO_EMPTY() volatile
    {
        return STAT & (1u << 1u);
    }

    inline bool get_STAT_FIFO_FULL() volatile
    {
        return STAT & (1u << 2u);
    }

    inline void get_STAT(bool &FLUSH_READY, bool &FIFO_EMPTY,
                         bool &FIFO_FULL) volatile
    {
        uint32_t curr = STAT;

        FLUSH_READY = curr & (1u << 0u);
        FIFO_EMPTY = curr & (1u << 1u);
        FIFO_FULL = curr & (1u << 2u);
    }

    inline uint32_t get_STREAM_ADDR_STREAM_ADDR() volatile
    {
        return (STREAM_ADDR >> 2u) & 0b111111111111111111111111111111u;
    }

    inline void set_STREAM_ADDR_STREAM_ADDR(uint32_t value) volatile
    {
        uint32_t curr = STREAM_ADDR;

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

        STREAM_ADDR = curr;
    }

    inline uint32_t get_STREAM_CTR_STREAM_CTR() volatile
    {
        return (STREAM_CTR >> 0u) & 0b1111111111111111111111u;
    }

    inline void set_STREAM_CTR_STREAM_CTR(uint32_t value) volatile
    {
        uint32_t curr = STREAM_CTR;

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

        STREAM_CTR = curr;
    }
};

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

static volatile xip_ctrl *const XIP_CTRL =
    reinterpret_cast<xip_ctrl *>(0x14000000);

}; // namespace RP2040