Program Listing for File xosc.h#
↰ Return to documentation for file (src/generated/structs/xosc.h
)
#pragma once
#include "../enums/XOSC_CTRL_ENABLE.h"
#include "../enums/XOSC_CTRL_FREQ_RANGE.h"
#include "../enums/XOSC_STATUS_FREQ_RANGE.h"
#include "../ifgen/common.h"
namespace RP2040
{
struct [[gnu::packed]] xosc
{
/* Constant attributes. */
static constexpr std::size_t size = 32;
/* Fields. */
uint32_t CTRL;
uint32_t STATUS;
uint32_t DORMANT;
uint32_t STARTUP;
static constexpr std::size_t reserved_padding0_length = 3;
const uint32_t reserved_padding0[reserved_padding0_length] = {};
uint32_t COUNT;
/* Methods. */
inline XOSC_CTRL_FREQ_RANGE get_CTRL_FREQ_RANGE() volatile
{
return XOSC_CTRL_FREQ_RANGE((CTRL >> 0u) & 0b111111111111u);
}
inline void set_CTRL_FREQ_RANGE(XOSC_CTRL_FREQ_RANGE value) volatile
{
uint32_t curr = CTRL;
curr &= ~(0b111111111111u << 0u);
curr |= (std::to_underlying(value) & 0b111111111111u) << 0u;
CTRL = curr;
}
inline XOSC_CTRL_ENABLE get_CTRL_ENABLE() volatile
{
return XOSC_CTRL_ENABLE((CTRL >> 12u) & 0b111111111111u);
}
inline void set_CTRL_ENABLE(XOSC_CTRL_ENABLE value) volatile
{
uint32_t curr = CTRL;
curr &= ~(0b111111111111u << 12u);
curr |= (std::to_underlying(value) & 0b111111111111u) << 12u;
CTRL = curr;
}
inline void get_CTRL(XOSC_CTRL_FREQ_RANGE &FREQ_RANGE,
XOSC_CTRL_ENABLE &ENABLE) volatile
{
uint32_t curr = CTRL;
FREQ_RANGE = XOSC_CTRL_FREQ_RANGE((curr >> 0u) & 0b111111111111u);
ENABLE = XOSC_CTRL_ENABLE((curr >> 12u) & 0b111111111111u);
}
inline void set_CTRL(XOSC_CTRL_FREQ_RANGE FREQ_RANGE,
XOSC_CTRL_ENABLE ENABLE) volatile
{
uint32_t curr = CTRL;
curr &= ~(0b111111111111u << 0u);
curr |= (std::to_underlying(FREQ_RANGE) & 0b111111111111u) << 0u;
curr &= ~(0b111111111111u << 12u);
curr |= (std::to_underlying(ENABLE) & 0b111111111111u) << 12u;
CTRL = curr;
}
inline XOSC_STATUS_FREQ_RANGE get_STATUS_FREQ_RANGE() volatile
{
return XOSC_STATUS_FREQ_RANGE((STATUS >> 0u) & 0b11u);
}
inline bool get_STATUS_ENABLED() volatile
{
return STATUS & (1u << 12u);
}
inline bool get_STATUS_BADWRITE() volatile
{
return STATUS & (1u << 24u);
}
inline void set_STATUS_BADWRITE() volatile
{
STATUS |= 1u << 24u;
}
inline void clear_STATUS_BADWRITE() volatile
{
STATUS &= ~(1u << 24u);
}
inline void toggle_STATUS_BADWRITE() volatile
{
STATUS ^= 1u << 24u;
}
inline bool get_STATUS_STABLE() volatile
{
return STATUS & (1u << 31u);
}
inline void get_STATUS(XOSC_STATUS_FREQ_RANGE &FREQ_RANGE, bool &ENABLED,
bool &BADWRITE, bool &STABLE) volatile
{
uint32_t curr = STATUS;
FREQ_RANGE = XOSC_STATUS_FREQ_RANGE((curr >> 0u) & 0b11u);
ENABLED = curr & (1u << 12u);
BADWRITE = curr & (1u << 24u);
STABLE = curr & (1u << 31u);
}
inline uint16_t get_STARTUP_DELAY() volatile
{
return (STARTUP >> 0u) & 0b11111111111111u;
}
inline void set_STARTUP_DELAY(uint16_t value) volatile
{
uint32_t curr = STARTUP;
curr &= ~(0b11111111111111u << 0u);
curr |= (value & 0b11111111111111u) << 0u;
STARTUP = curr;
}
inline bool get_STARTUP_X4() volatile
{
return STARTUP & (1u << 20u);
}
inline void set_STARTUP_X4() volatile
{
STARTUP |= 1u << 20u;
}
inline void clear_STARTUP_X4() volatile
{
STARTUP &= ~(1u << 20u);
}
inline void toggle_STARTUP_X4() volatile
{
STARTUP ^= 1u << 20u;
}
inline void get_STARTUP(uint16_t &DELAY, bool &X4) volatile
{
uint32_t curr = STARTUP;
DELAY = (curr >> 0u) & 0b11111111111111u;
X4 = curr & (1u << 20u);
}
inline void set_STARTUP(uint16_t DELAY, bool X4) volatile
{
uint32_t curr = STARTUP;
curr &= ~(0b11111111111111u << 0u);
curr |= (DELAY & 0b11111111111111u) << 0u;
curr &= ~(0b1u << 20u);
curr |= (X4 & 0b1u) << 20u;
STARTUP = curr;
}
inline uint8_t get_COUNT_COUNT() volatile
{
return (COUNT >> 0u) & 0b11111111u;
}
inline void set_COUNT_COUNT(uint8_t value) volatile
{
uint32_t curr = COUNT;
curr &= ~(0b11111111u << 0u);
curr |= (value & 0b11111111u) << 0u;
COUNT = curr;
}
};
static_assert(sizeof(xosc) == xosc::size);
static volatile xosc *const XOSC = reinterpret_cast<xosc *>(0x40024000);
}; // namespace RP2040