Program Listing for File pll_sys.h#

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

#pragma once

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

namespace RP2040
{

struct [[gnu::packed]] pll_sys
{
    /* Constant attributes. */
    static constexpr std::size_t size = 16;
    /* Fields. */
    uint32_t CS;
    uint32_t PWR;
    uint32_t FBDIV_INT;
    uint32_t PRIM;
    /* Methods. */

    inline uint8_t get_CS_REFDIV() volatile
    {
        return (CS >> 0u) & 0b111111u;
    }

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

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

        CS = curr;
    }

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

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

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

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

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

    inline void get_CS(uint8_t &REFDIV, bool &BYPASS, bool &LOCK) volatile
    {
        uint32_t curr = CS;

        REFDIV = (curr >> 0u) & 0b111111u;
        BYPASS = curr & (1u << 8u);
        LOCK = curr & (1u << 31u);
    }

    inline void set_CS(uint8_t REFDIV, bool BYPASS) volatile
    {
        uint32_t curr = CS;

        curr &= ~(0b111111u << 0u);
        curr |= (REFDIV & 0b111111u) << 0u;
        curr &= ~(0b1u << 8u);
        curr |= (BYPASS & 0b1u) << 8u;

        CS = curr;
    }

    inline bool get_PWR_PD() volatile
    {
        return PWR & (1u << 0u);
    }

    inline void set_PWR_PD() volatile
    {
        PWR |= 1u << 0u;
    }

    inline void clear_PWR_PD() volatile
    {
        PWR &= ~(1u << 0u);
    }

    inline void toggle_PWR_PD() volatile
    {
        PWR ^= 1u << 0u;
    }

    inline bool get_PWR_DSMPD() volatile
    {
        return PWR & (1u << 2u);
    }

    inline void set_PWR_DSMPD() volatile
    {
        PWR |= 1u << 2u;
    }

    inline void clear_PWR_DSMPD() volatile
    {
        PWR &= ~(1u << 2u);
    }

    inline void toggle_PWR_DSMPD() volatile
    {
        PWR ^= 1u << 2u;
    }

    inline bool get_PWR_POSTDIVPD() volatile
    {
        return PWR & (1u << 3u);
    }

    inline void set_PWR_POSTDIVPD() volatile
    {
        PWR |= 1u << 3u;
    }

    inline void clear_PWR_POSTDIVPD() volatile
    {
        PWR &= ~(1u << 3u);
    }

    inline void toggle_PWR_POSTDIVPD() volatile
    {
        PWR ^= 1u << 3u;
    }

    inline bool get_PWR_VCOPD() volatile
    {
        return PWR & (1u << 5u);
    }

    inline void set_PWR_VCOPD() volatile
    {
        PWR |= 1u << 5u;
    }

    inline void clear_PWR_VCOPD() volatile
    {
        PWR &= ~(1u << 5u);
    }

    inline void toggle_PWR_VCOPD() volatile
    {
        PWR ^= 1u << 5u;
    }

    inline void get_PWR(bool &PD, bool &DSMPD, bool &POSTDIVPD,
                        bool &VCOPD) volatile
    {
        uint32_t curr = PWR;

        PD = curr & (1u << 0u);
        DSMPD = curr & (1u << 2u);
        POSTDIVPD = curr & (1u << 3u);
        VCOPD = curr & (1u << 5u);
    }

    inline void set_PWR(bool PD, bool DSMPD, bool POSTDIVPD,
                        bool VCOPD) volatile
    {
        uint32_t curr = PWR;

        curr &= ~(0b1u << 0u);
        curr |= (PD & 0b1u) << 0u;
        curr &= ~(0b1u << 2u);
        curr |= (DSMPD & 0b1u) << 2u;
        curr &= ~(0b1u << 3u);
        curr |= (POSTDIVPD & 0b1u) << 3u;
        curr &= ~(0b1u << 5u);
        curr |= (VCOPD & 0b1u) << 5u;

        PWR = curr;
    }

    inline uint16_t get_FBDIV_INT_FBDIV_INT() volatile
    {
        return (FBDIV_INT >> 0u) & 0b111111111111u;
    }

    inline void set_FBDIV_INT_FBDIV_INT(uint16_t value) volatile
    {
        uint32_t curr = FBDIV_INT;

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

        FBDIV_INT = curr;
    }

    inline uint8_t get_PRIM_POSTDIV2() volatile
    {
        return (PRIM >> 12u) & 0b111u;
    }

    inline void set_PRIM_POSTDIV2(uint8_t value) volatile
    {
        uint32_t curr = PRIM;

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

        PRIM = curr;
    }

    inline uint8_t get_PRIM_POSTDIV1() volatile
    {
        return (PRIM >> 16u) & 0b111u;
    }

    inline void set_PRIM_POSTDIV1(uint8_t value) volatile
    {
        uint32_t curr = PRIM;

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

        PRIM = curr;
    }

    inline void get_PRIM(uint8_t &POSTDIV2, uint8_t &POSTDIV1) volatile
    {
        uint32_t curr = PRIM;

        POSTDIV2 = (curr >> 12u) & 0b111u;
        POSTDIV1 = (curr >> 16u) & 0b111u;
    }

    inline void set_PRIM(uint8_t POSTDIV2, uint8_t POSTDIV1) volatile
    {
        uint32_t curr = PRIM;

        curr &= ~(0b111u << 12u);
        curr |= (POSTDIV2 & 0b111u) << 12u;
        curr &= ~(0b111u << 16u);
        curr |= (POSTDIV1 & 0b111u) << 16u;

        PRIM = curr;
    }
};

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

static volatile pll_sys *const PLL_SYS =
    reinterpret_cast<pll_sys *>(0x40028000);

static volatile pll_sys *const PLL_USB =
    reinterpret_cast<pll_sys *>(0x4002c000);

}; // namespace RP2040