Program Listing for File watchdog.h#

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

#pragma once

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

namespace RP2040
{

struct [[gnu::packed]] watchdog
{
    /* Constant attributes. */
    static constexpr std::size_t size = 48;
    /* Fields. */
    uint32_t CTRL;
    uint32_t
        LOAD;
    const uint32_t REASON =
        {};
    uint32_t SCRATCH0;
    uint32_t SCRATCH1;
    uint32_t SCRATCH2;
    uint32_t SCRATCH3;
    uint32_t SCRATCH4;
    uint32_t SCRATCH5;
    uint32_t SCRATCH6;
    uint32_t SCRATCH7;
    uint32_t TICK;
    /* Methods. */

    inline uint32_t get_CTRL_TIME() volatile
    {
        return (CTRL >> 0u) & 0b111111111111111111111111u;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    inline void get_CTRL(uint32_t &TIME, bool &PAUSE_JTAG, bool &PAUSE_DBG0,
                         bool &PAUSE_DBG1, bool &ENABLE,
                         bool &TRIGGER) volatile
    {
        uint32_t curr = CTRL;

        TIME = (curr >> 0u) & 0b111111111111111111111111u;
        PAUSE_JTAG = curr & (1u << 24u);
        PAUSE_DBG0 = curr & (1u << 25u);
        PAUSE_DBG1 = curr & (1u << 26u);
        ENABLE = curr & (1u << 30u);
        TRIGGER = curr & (1u << 31u);
    }

    inline void set_CTRL(bool PAUSE_JTAG, bool PAUSE_DBG0, bool PAUSE_DBG1,
                         bool ENABLE, bool TRIGGER) volatile
    {
        uint32_t curr = CTRL;

        curr &= ~(0b1u << 24u);
        curr |= (PAUSE_JTAG & 0b1u) << 24u;
        curr &= ~(0b1u << 25u);
        curr |= (PAUSE_DBG0 & 0b1u) << 25u;
        curr &= ~(0b1u << 26u);
        curr |= (PAUSE_DBG1 & 0b1u) << 26u;
        curr &= ~(0b1u << 30u);
        curr |= (ENABLE & 0b1u) << 30u;
        curr &= ~(0b1u << 31u);
        curr |= (TRIGGER & 0b1u) << 31u;

        CTRL = curr;
    }

    inline void set_LOAD_LOAD(uint32_t value) volatile
    {
        uint32_t curr = LOAD;

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

        LOAD = curr;
    }

    inline bool get_REASON_TIMER() volatile
    {
        return REASON & (1u << 0u);
    }

    inline bool get_REASON_FORCE() volatile
    {
        return REASON & (1u << 1u);
    }

    inline void get_REASON(bool &TIMER, bool &FORCE) volatile
    {
        uint32_t curr = REASON;

        TIMER = curr & (1u << 0u);
        FORCE = curr & (1u << 1u);
    }

    inline uint16_t get_TICK_CYCLES() volatile
    {
        return (TICK >> 0u) & 0b111111111u;
    }

    inline void set_TICK_CYCLES(uint16_t value) volatile
    {
        uint32_t curr = TICK;

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

        TICK = curr;
    }

    inline bool get_TICK_ENABLE() volatile
    {
        return TICK & (1u << 9u);
    }

    inline void set_TICK_ENABLE() volatile
    {
        TICK |= 1u << 9u;
    }

    inline void clear_TICK_ENABLE() volatile
    {
        TICK &= ~(1u << 9u);
    }

    inline void toggle_TICK_ENABLE() volatile
    {
        TICK ^= 1u << 9u;
    }

    inline bool get_TICK_RUNNING() volatile
    {
        return TICK & (1u << 10u);
    }

    inline uint16_t get_TICK_COUNT() volatile
    {
        return (TICK >> 11u) & 0b111111111u;
    }

    inline void get_TICK(uint16_t &CYCLES, bool &ENABLE, bool &RUNNING,
                         uint16_t &COUNT) volatile
    {
        uint32_t curr = TICK;

        CYCLES = (curr >> 0u) & 0b111111111u;
        ENABLE = curr & (1u << 9u);
        RUNNING = curr & (1u << 10u);
        COUNT = (curr >> 11u) & 0b111111111u;
    }

    inline void set_TICK(uint16_t CYCLES, bool ENABLE) volatile
    {
        uint32_t curr = TICK;

        curr &= ~(0b111111111u << 0u);
        curr |= (CYCLES & 0b111111111u) << 0u;
        curr &= ~(0b1u << 9u);
        curr |= (ENABLE & 0b1u) << 9u;

        TICK = curr;
    }
};

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

static volatile watchdog *const WATCHDOG =
    reinterpret_cast<watchdog *>(0x40058000);

}; // namespace RP2040