#pragma once
#include <stdint.h>
namespace regmap_accessor
{
template<typename ACCESSOR>
class {{ peripheral.name }}
{
public:
{% for reg in peripheral.regs %}
class {{ reg.name }}
{
public:
{{ reg.name }}(uint32_t raw_value): _value(raw_value)
{}
{% for field in reg.fields %}
uint32_t get_{{ field.name | lower }}()
{
constexpr uint32_t msb_mask = (1 << ({{ field.msb }} + 1)) - 1;
constexpr uint32_t lsb_mask = (1 << {{ field.lsb }}) - 1;
constexpr uint32_t mask = msb_mask & ~lsb_mask;
return (_value & mask) >> {{ field.lsb }};
}
{% endfor %}
private:
uint32_t _value;
};
{% endfor %}
{{ peripheral.name }}(ACCESSOR& accessor): _accessor(accessor)
{}
{% for reg in peripheral.regs %}
uint32_t get_{{ reg.name | lower }}()
{
return _accessor.peek32({{ reg.offset }});
}
{% endfor %}
private:
ACCESSOR& _accessor;
};
}