Program Listing for File dma.h

Program Listing for File dma.h#

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

#pragma once
#ifndef RP2040_STRUCTS_DMA_H
#define RP2040_STRUCTS_DMA_H

#include "../enums/DMA_SNIFF_CTRL_CALC.h"
#include "../ifgen/common.h"
#include "dma_control.h"
#include "dma_debug.h"

namespace RP2040
{

struct dma
{
    /* Constant attributes. */
    static constexpr struct_id_t id = 6;
    static constexpr std::size_t size = 3072;
    /* Fields. */
    static constexpr std::size_t CONTROL_length = 16;
    dma_control CONTROL[CONTROL_length];
    uint32_t INTR;
    uint32_t INTE0;
    uint32_t INTF0;
    uint32_t INTS0;
    const uint32_t reserved_padding0 = {};
    uint32_t INTE1;
    uint32_t INTF1;
    uint32_t INTS1;
    uint32_t TIMER0;
    uint32_t TIMER1;
    uint32_t TIMER2;
    uint32_t TIMER3;
    uint32_t MULTI_CHAN_TRIGGER;
    uint32_t SNIFF_CTRL;
    uint32_t SNIFF_DATA;
    const uint32_t reserved_padding1 = {};
    const uint32_t FIFO_LEVELS =
        {};
    uint32_t CHAN_ABORT;
    const uint32_t N_CHANNELS =
        {};
    static constexpr std::size_t reserved_padding2_length = 237;
    const uint32_t reserved_padding2[reserved_padding2_length] = {};
    static constexpr std::size_t DEBUG_length = 16;
    dma_debug DEBUG[DEBUG_length];

    /* Methods. */

    inline uint16_t get_INTR() volatile
    {
        return INTR & 0xffffu;
    }

    inline void set_INTR(uint16_t value) volatile
    {
        uint32_t curr = INTR;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        INTR = curr;
    }

    inline uint16_t get_INTE0() volatile
    {
        return INTE0 & 0xffffu;
    }

    inline void set_INTE0(uint16_t value) volatile
    {
        uint32_t curr = INTE0;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        INTE0 = curr;
    }

    inline uint16_t get_INTF0() volatile
    {
        return INTF0 & 0xffffu;
    }

    inline void set_INTF0(uint16_t value) volatile
    {
        uint32_t curr = INTF0;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        INTF0 = curr;
    }

    inline uint16_t get_INTS0() volatile
    {
        return INTS0 & 0xffffu;
    }

    inline void set_INTS0(uint16_t value) volatile
    {
        uint32_t curr = INTS0;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        INTS0 = curr;
    }

    inline uint16_t get_INTE1() volatile
    {
        return INTE1 & 0xffffu;
    }

    inline void set_INTE1(uint16_t value) volatile
    {
        uint32_t curr = INTE1;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        INTE1 = curr;
    }

    inline uint16_t get_INTF1() volatile
    {
        return INTF1 & 0xffffu;
    }

    inline void set_INTF1(uint16_t value) volatile
    {
        uint32_t curr = INTF1;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        INTF1 = curr;
    }

    inline uint16_t get_INTS1() volatile
    {
        return INTS1 & 0xffffu;
    }

    inline void set_INTS1(uint16_t value) volatile
    {
        uint32_t curr = INTS1;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        INTS1 = curr;
    }

    inline uint16_t get_TIMER0_Y() volatile
    {
        return TIMER0 & 0xffffu;
    }

    inline void set_TIMER0_Y(uint16_t value) volatile
    {
        uint32_t curr = TIMER0;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        TIMER0 = curr;
    }

    inline uint16_t get_TIMER0_X() volatile
    {
        return (TIMER0 >> 16u) & 0xffffu;
    }

    inline void set_TIMER0_X(uint16_t value) volatile
    {
        uint32_t curr = TIMER0;

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

        TIMER0 = curr;
    }

    inline void get_TIMER0(uint16_t &Y, uint16_t &X) volatile
    {
        uint32_t curr = TIMER0;

        Y = curr & 0xffffu;
        X = (curr >> 16u) & 0xffffu;
    }

    inline void set_TIMER0(uint16_t Y, uint16_t X) volatile
    {
        uint32_t curr = TIMER0;

        curr &= ~(0xffffu);
        curr |= (Y & 0xffffu);
        curr &= ~(0xffffu << 16u);
        curr |= (X & 0xffffu) << 16u;

        TIMER0 = curr;
    }

    inline uint16_t get_TIMER1_Y() volatile
    {
        return TIMER1 & 0xffffu;
    }

    inline void set_TIMER1_Y(uint16_t value) volatile
    {
        uint32_t curr = TIMER1;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        TIMER1 = curr;
    }

    inline uint16_t get_TIMER1_X() volatile
    {
        return (TIMER1 >> 16u) & 0xffffu;
    }

    inline void set_TIMER1_X(uint16_t value) volatile
    {
        uint32_t curr = TIMER1;

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

        TIMER1 = curr;
    }

    inline void get_TIMER1(uint16_t &Y, uint16_t &X) volatile
    {
        uint32_t curr = TIMER1;

        Y = curr & 0xffffu;
        X = (curr >> 16u) & 0xffffu;
    }

    inline void set_TIMER1(uint16_t Y, uint16_t X) volatile
    {
        uint32_t curr = TIMER1;

        curr &= ~(0xffffu);
        curr |= (Y & 0xffffu);
        curr &= ~(0xffffu << 16u);
        curr |= (X & 0xffffu) << 16u;

        TIMER1 = curr;
    }

    inline uint16_t get_TIMER2_Y() volatile
    {
        return TIMER2 & 0xffffu;
    }

    inline void set_TIMER2_Y(uint16_t value) volatile
    {
        uint32_t curr = TIMER2;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        TIMER2 = curr;
    }

    inline uint16_t get_TIMER2_X() volatile
    {
        return (TIMER2 >> 16u) & 0xffffu;
    }

    inline void set_TIMER2_X(uint16_t value) volatile
    {
        uint32_t curr = TIMER2;

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

        TIMER2 = curr;
    }

    inline void get_TIMER2(uint16_t &Y, uint16_t &X) volatile
    {
        uint32_t curr = TIMER2;

        Y = curr & 0xffffu;
        X = (curr >> 16u) & 0xffffu;
    }

    inline void set_TIMER2(uint16_t Y, uint16_t X) volatile
    {
        uint32_t curr = TIMER2;

        curr &= ~(0xffffu);
        curr |= (Y & 0xffffu);
        curr &= ~(0xffffu << 16u);
        curr |= (X & 0xffffu) << 16u;

        TIMER2 = curr;
    }

    inline uint16_t get_TIMER3_Y() volatile
    {
        return TIMER3 & 0xffffu;
    }

    inline void set_TIMER3_Y(uint16_t value) volatile
    {
        uint32_t curr = TIMER3;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        TIMER3 = curr;
    }

    inline uint16_t get_TIMER3_X() volatile
    {
        return (TIMER3 >> 16u) & 0xffffu;
    }

    inline void set_TIMER3_X(uint16_t value) volatile
    {
        uint32_t curr = TIMER3;

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

        TIMER3 = curr;
    }

    inline void get_TIMER3(uint16_t &Y, uint16_t &X) volatile
    {
        uint32_t curr = TIMER3;

        Y = curr & 0xffffu;
        X = (curr >> 16u) & 0xffffu;
    }

    inline void set_TIMER3(uint16_t Y, uint16_t X) volatile
    {
        uint32_t curr = TIMER3;

        curr &= ~(0xffffu);
        curr |= (Y & 0xffffu);
        curr &= ~(0xffffu << 16u);
        curr |= (X & 0xffffu) << 16u;

        TIMER3 = curr;
    }

    inline uint16_t get_MULTI_CHAN_TRIGGER() volatile
    {
        return MULTI_CHAN_TRIGGER & 0xffffu;
    }

    inline void set_MULTI_CHAN_TRIGGER(uint16_t value) volatile
    {
        uint32_t curr = MULTI_CHAN_TRIGGER;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        MULTI_CHAN_TRIGGER = curr;
    }

    inline bool get_SNIFF_CTRL_EN() volatile
    {
        return SNIFF_CTRL & 1u;
    }

    inline void set_SNIFF_CTRL_EN() volatile
    {
        SNIFF_CTRL |= 1u;
    }

    inline void clear_SNIFF_CTRL_EN() volatile
    {
        SNIFF_CTRL &= ~(1u);
    }

    inline void toggle_SNIFF_CTRL_EN() volatile
    {
        SNIFF_CTRL ^= 1u;
    }

    inline uint8_t get_SNIFF_CTRL_DMACH() volatile
    {
        return (SNIFF_CTRL >> 1u) & 0xfu;
    }

    inline void set_SNIFF_CTRL_DMACH(uint8_t value) volatile
    {
        uint32_t curr = SNIFF_CTRL;

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

        SNIFF_CTRL = curr;
    }

    inline DMA_SNIFF_CTRL_CALC get_SNIFF_CTRL_CALC() volatile
    {
        return DMA_SNIFF_CTRL_CALC((SNIFF_CTRL >> 5u) & 0xfu);
    }

    inline void set_SNIFF_CTRL_CALC(DMA_SNIFF_CTRL_CALC value) volatile
    {
        uint32_t curr = SNIFF_CTRL;

        curr &= ~(0xfu << 5u);
        curr |= (std::to_underlying(value) & 0xfu) << 5u;

        SNIFF_CTRL = curr;
    }

    inline bool get_SNIFF_CTRL_BSWAP() volatile
    {
        return SNIFF_CTRL & (1u << 9u);
    }

    inline void set_SNIFF_CTRL_BSWAP() volatile
    {
        SNIFF_CTRL |= 1u << 9u;
    }

    inline void clear_SNIFF_CTRL_BSWAP() volatile
    {
        SNIFF_CTRL &= ~(1u << 9u);
    }

    inline void toggle_SNIFF_CTRL_BSWAP() volatile
    {
        SNIFF_CTRL ^= 1u << 9u;
    }

    inline bool get_SNIFF_CTRL_OUT_REV() volatile
    {
        return SNIFF_CTRL & (1u << 10u);
    }

    inline void set_SNIFF_CTRL_OUT_REV() volatile
    {
        SNIFF_CTRL |= 1u << 10u;
    }

    inline void clear_SNIFF_CTRL_OUT_REV() volatile
    {
        SNIFF_CTRL &= ~(1u << 10u);
    }

    inline void toggle_SNIFF_CTRL_OUT_REV() volatile
    {
        SNIFF_CTRL ^= 1u << 10u;
    }

    inline bool get_SNIFF_CTRL_OUT_INV() volatile
    {
        return SNIFF_CTRL & (1u << 11u);
    }

    inline void set_SNIFF_CTRL_OUT_INV() volatile
    {
        SNIFF_CTRL |= 1u << 11u;
    }

    inline void clear_SNIFF_CTRL_OUT_INV() volatile
    {
        SNIFF_CTRL &= ~(1u << 11u);
    }

    inline void toggle_SNIFF_CTRL_OUT_INV() volatile
    {
        SNIFF_CTRL ^= 1u << 11u;
    }

    inline void get_SNIFF_CTRL(bool &EN, uint8_t &DMACH,
                               DMA_SNIFF_CTRL_CALC &CALC, bool &BSWAP,
                               bool &OUT_REV, bool &OUT_INV) volatile
    {
        uint32_t curr = SNIFF_CTRL;

        EN = curr & 1u;
        DMACH = (curr >> 1u) & 0xfu;
        CALC = DMA_SNIFF_CTRL_CALC((curr >> 5u) & 0xfu);
        BSWAP = curr & (1u << 9u);
        OUT_REV = curr & (1u << 10u);
        OUT_INV = curr & (1u << 11u);
    }

    inline void set_SNIFF_CTRL(bool EN, uint8_t DMACH,
                               DMA_SNIFF_CTRL_CALC CALC, bool BSWAP,
                               bool OUT_REV, bool OUT_INV) volatile
    {
        uint32_t curr = SNIFF_CTRL;

        curr &= ~(0b1u);
        curr |= (EN & 0b1u);
        curr &= ~(0xfu << 1u);
        curr |= (DMACH & 0xfu) << 1u;
        curr &= ~(0xfu << 5u);
        curr |= (std::to_underlying(CALC) & 0xfu) << 5u;
        curr &= ~(0b1u << 9u);
        curr |= (BSWAP & 0b1u) << 9u;
        curr &= ~(0b1u << 10u);
        curr |= (OUT_REV & 0b1u) << 10u;
        curr &= ~(0b1u << 11u);
        curr |= (OUT_INV & 0b1u) << 11u;

        SNIFF_CTRL = curr;
    }

    inline uint8_t get_FIFO_LEVELS_TDF_LVL() volatile
    {
        return FIFO_LEVELS & 0xffu;
    }

    inline uint8_t get_FIFO_LEVELS_WAF_LVL() volatile
    {
        return (FIFO_LEVELS >> 8u) & 0xffu;
    }

    inline uint8_t get_FIFO_LEVELS_RAF_LVL() volatile
    {
        return (FIFO_LEVELS >> 16u) & 0xffu;
    }

    inline void get_FIFO_LEVELS(uint8_t &TDF_LVL, uint8_t &WAF_LVL,
                                uint8_t &RAF_LVL) volatile
    {
        uint32_t curr = FIFO_LEVELS;

        TDF_LVL = curr & 0xffu;
        WAF_LVL = (curr >> 8u) & 0xffu;
        RAF_LVL = (curr >> 16u) & 0xffu;
    }

    inline uint16_t get_CHAN_ABORT() volatile
    {
        return CHAN_ABORT & 0xffffu;
    }

    inline void set_CHAN_ABORT(uint16_t value) volatile
    {
        uint32_t curr = CHAN_ABORT;

        curr &= ~(0xffffu);
        curr |= (value & 0xffffu);

        CHAN_ABORT = curr;
    }

    inline uint8_t get_N_CHANNELS() volatile
    {
        return N_CHANNELS & 0b11111u;
    }
};

static_assert(sizeof(dma) == dma::size);
static_assert(ifgen_struct<dma>);

static volatile dma *const DMA = reinterpret_cast<dma *>(0x50000000);

}; // namespace RP2040

#endif