REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
mblock_int.h
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
4
5#include <algorithm>
6#include <bitset>
7
8#include <block/mblock_int.h>
9
10#include <chips/AD840X.h>
11#include <chips/DAC60508.h>
12#include <chips/SR74HC16X.h>
13#include <chips/SR74HCT595.h>
14#include <entity/hardware.h>
15#include <entity/visitor.h>
16
17namespace blocks {
18
20
22protected:
29
30public:
31 explicit MIntBlockHAL_V_1_0_X(bus::addr_t block_address);
32
33 UnitResult init() override;
34
35 bool write_ic(uint8_t idx, float ic) override;
36 bool write_time_factor_switches(std::bitset<8> switches) override;
37
38 std::bitset<8> read_overload_flags() override;
39 void reset_overload_flags() override;
40};
41
43protected:
46
47public:
48 explicit MIntBlockHAL_V_1_1_X(bus::addr_t block_address);
49
50 bool write_ic(uint8_t idx, float ic) override;
51
52 // Do not use this function on Version V1.1.0
53 bool write_time_factor_switches(std::bitset<8> switches) override { return false; }
54
55 virtual bool write_time_factor_switches_and_limiters_enable(std::bitset<8> switches,
56 std::bitset<8> limiters);
57
58 virtual bool write_time_factor_gain(uint8_t idx, uint8_t gain);
59};
60
61class MIntBlock_V_1_1_X : public MIntBlock {
62public:
64
65 [[nodiscard]] bool write_to_hardware() override;
66 void reset(entities::ResetAction action) override;
67
68 [[nodiscard]] const std::array<IntegratorCalibration, NUM_INTEGRATORS> &get_calibration() const;
69 [[nodiscard]] blocks::IntegratorCalibration get_calibration(uint8_t int_idx) const;
71
72 UnitResult calibrate(platform::Cluster *cluster, carrier::Carrier *carrier) override;
73
74 ConfigResult config(const pb_Item &item) override;
75 void extract(entities::ExtractVisitor &collector) override;
76
77protected:
79
80 std::array<IntegratorCalibration, NUM_INTEGRATORS> calibration{};
81 std::bitset<NUM_INTEGRATORS> _limiters_enabled{};
82
83 UnitResult _gain_calibration(bool use_slow_integration);
84};
85
86} // namespace blocks
MIntBlockHAL_V_1_0_X(bus::addr_t block_address)
const functions::TriggerFunction f_overload_flags_reset
Definition mblock_int.h:28
std::bitset< 8 > read_overload_flags() override
UnitResult init() override
const functions::SR74HCT595 f_time_factor
Definition mblock_int.h:24
const functions::DAC60508 f_ic_dac
Definition mblock_int.h:23
const functions::SR74HC16X f_overload_flags
Definition mblock_int.h:27
void reset_overload_flags() override
const functions::TriggerFunction f_time_factor_sync
Definition mblock_int.h:25
bool write_time_factor_switches(std::bitset< 8 > switches) override
const functions::TriggerFunction f_time_factor_reset
Definition mblock_int.h:26
bool write_ic(uint8_t idx, float ic) override
virtual bool write_time_factor_gain(uint8_t idx, uint8_t gain)
virtual bool write_time_factor_switches_and_limiters_enable(std::bitset< 8 > switches, std::bitset< 8 > limiters)
functions::AD8403 f_time_factor_gain_4_7
Definition mblock_int.h:45
bool write_time_factor_switches(std::bitset< 8 > switches) override
Definition mblock_int.h:53
functions::AD8403 f_time_factor_gain_0_3
Definition mblock_int.h:44
MIntBlockHAL_V_1_1_X(bus::addr_t block_address)
bool write_ic(uint8_t idx, float ic) override
void reset(entities::ResetAction action) override
bool write_to_hardware() override
std::array< IntegratorCalibration, NUM_INTEGRATORS > calibration
Definition mblock_int.h:80
ConfigResult config(const pb_Item &item) override
UnitResult write_calibration_to_hardware()
MIntBlockHAL_V_1_1_X * hardware
Definition mblock_int.h:78
MIntBlock_V_1_1_X(SLOT slot, MIntBlockHAL_V_1_1_X *hardware)
const std::array< IntegratorCalibration, NUM_INTEGRATORS > & get_calibration() const
UnitResult calibrate(platform::Cluster *cluster, carrier::Carrier *carrier) override
std::bitset< NUM_INTEGRATORS > _limiters_enabled
Definition mblock_int.h:81
void extract(entities::ExtractVisitor &collector) override
UnitResult _gain_calibration(bool use_slow_integration)
The AD8403 is a four channel, 8 bit digital potentiometer.
Definition AD840X.h:35
The DAC60508 is the 12-Bit 8-channel DAC, used in the MInt-Block for the initial conditions and for c...
Definition DAC60508.h:17
The SR74HCT595 is an 8-Bit Shift Register with 3-State Output Registers.
Definition SR74HCT595.h:15
A trigger function exploits the fact that setting an address on the bus triggers an action.
Definition functions.h:33
entities::EntitySharedHardware< MIntBlockHAL > MIntBlockHAL_Parent
Definition mblock_int.h:19
Definition daq.h:14