REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
redac.h
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3//
4// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
5
6#pragma once
7
8#include "block/teensy/icmd.h"
9#include "redac/redac.h"
10#include "tblock.h"
11
12namespace platform {
13
15
17public:
19
20 uint16_t read_backplane_and_slot_id() const override;
21
22 bool write_adc_bus_mux(const std::array<int8_t, 8> &channels) override;
23 void reset_adc_bus_mux() override;
24
25private:
26 void set_standby(bool enabled) override;
27
28public:
29 // Function addresses
30 static constexpr uint8_t METADATA_FADDR = bus::METADATA_FUNC_IDX;
31 static constexpr uint8_t TEMPERATURE_FADDR = 1;
32 static constexpr uint8_t ADC_PRG_FADDR = 0;
33 static constexpr uint8_t ADC_RESET_FADDR = 1;
34 static constexpr uint8_t ADC_STROBE_FADDR = 2;
35 static constexpr uint8_t STANDBY_SET_FADDR = 3;
36 static constexpr uint8_t STANDBY_UNSET_FADDR = 2;
37
38 static const SPISettings BP_REDAC_ID_SPI_SETTINGS;
39 static constexpr uint8_t BP_REDAC_ID_FADDR = 2;
40
41protected:
43
44 // Functions to configure ADC signal switching matrices
45 static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS;
48
52
56
60};
61
63public:
65
66 static constexpr uint8_t FP_SR_CLR = 4;
67 static constexpr uint8_t FP_SR_STO = 5;
68 static constexpr uint8_t FP_SR = 6;
69
70 bool write_fp_control_register(uint16_t state);
71
72protected:
73 const functions::SR74HCT595 fp_control; // Shift register for controlling mRedac front panel I/Os
76};
77
78class REDAC_V_1_1_X : public REDAC {
79public:
81
82 enum FrontPanelIOMode : uint8_t { ANALOG_OUT = 0b00000, ANALOG_IN = 0b00001, DIGITAL_OUT = 0b10000, DIGITAL_IN = 0b10001 };
83
84 // Sets to mode of the four I/O connections on the mREDAC front.
85 // Be aware that only IO0 can be configured as digital in and only IO1-IO3 can be configured as digital out.
86 //
87 // Available mapping:
88 // Analog signals:
89 // IO0: Analog in/out cluster 0, lane 28
90 // IO1: Analog in/out cluster 0, lane 29
91 // IO2: Analog in/out cluster 0, lane 30
92 // IO3: Analog in/out cluster 0, lane 31
93 //
94 // Digital signals:
95 // IO0: Digital in, EXTHALT
96 // IO1: Digital out PIN_DIO_6 (custom)
97 // IO2: Digital out ModeIC
98 // IO3: Digital out ModeOP
99 bool set_io_mode(uint8_t io_number, FrontPanelIOMode mode);
100 FrontPanelIOMode get_io_mode(uint8_t io_number) const;
101
102 // Sets the direction of the bidirectional DIO lines available on this board.
103 // Possible dio lines are 12, 13, 28 and 7.
104 // This feature doesn't get used right now.
105 bool set_DIO_direction(uint8_t dio_number, bool input_from_ctrl_block);
106 // Returns true if the designated line is an input viewed from the ctrl block side.
107 // Possible dio lines are 12, 13, 28 and 7.
108 bool get_DIO_direction(uint8_t dio_number) const;
109
110 status write_to_hardware() override;
111
112protected:
114
116};
117
118} // namespace platform
A DataFunction class wraps SPI communication over the digital bus.
Definition functions.h:47
DataFunction to transfer 32bit of data to the I-Block matrix command registry.
Definition icmd.h:19
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
void reset_adc_bus_mux() override
Definition redac.cpp:98
static const SPISettings BP_REDAC_ID_SPI_SETTINGS
Definition redac.h:28
static constexpr uint8_t ADC_STROBE_FADDR
Definition redac.h:34
static constexpr uint8_t BP_REDAC_ID_FADDR
Definition redac.h:39
bool write_adc_bus_mux(const std::array< int8_t, 8 > &channels) override
Definition redac.cpp:53
const functions::TriggerFunction f_adc2_switcher_reset
Definition redac.h:58
static constexpr uint8_t TEMPERATURE_FADDR
Definition redac.h:31
const functions::TriggerFunction f_adc2_switcher_sync
Definition redac.h:59
const functions::ICommandRegisterFunction f_adc2_switcher_prg
Definition redac.h:57
const functions::TriggerFunction f_adc1_switcher_reset
Definition redac.h:54
const functions::TriggerFunction f_adc0_switcher_reset
Definition redac.h:50
static constexpr uint8_t METADATA_FADDR
Definition redac.h:30
const functions::TriggerFunction f_unset_standby
Definition redac.h:47
const functions::TriggerFunction f_adc0_switcher_sync
Definition redac.h:51
static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS
Definition redac.h:31
uint16_t read_backplane_and_slot_id() const override
Definition redac.cpp:51
const functions::ICommandRegisterFunction f_adc0_switcher_prg
Definition redac.h:49
static constexpr uint8_t ADC_RESET_FADDR
Definition redac.h:33
static constexpr uint8_t STANDBY_UNSET_FADDR
Definition redac.h:36
static constexpr uint8_t STANDBY_SET_FADDR
Definition redac.h:35
const functions::TriggerFunction f_adc1_switcher_sync
Definition redac.h:55
const functions::TriggerFunction f_set_standby
Definition redac.h:46
const functions::ICommandRegisterFunction f_adc1_switcher_prg
Definition redac.h:53
static constexpr uint8_t ADC_PRG_FADDR
Definition redac.h:32
const functions::DataFunction bp_redac_id
Definition redac.h:42
const functions::TriggerFunction fp_control_reset
Definition redac.h:74
static constexpr uint8_t FP_SR
Definition redac.h:68
bool write_fp_control_register(uint16_t state)
Definition redac.cpp:116
static constexpr uint8_t FP_SR_CLR
Definition redac.h:66
const functions::SR74HCT595 fp_control
Definition redac.h:73
const functions::TriggerFunction fp_control_sync
Definition redac.h:75
static constexpr uint8_t FP_SR_STO
Definition redac.h:67
bool get_DIO_direction(uint8_t dio_number) const
Definition redac.cpp:166
uint16_t fp_control_sr_state
Definition redac.h:113
FrontPanelIOMode get_io_mode(uint8_t io_number) const
Definition redac.cpp:143
status write_to_hardware() override
Definition redac.cpp:122
bool set_io_mode(uint8_t io_number, FrontPanelIOMode mode)
Definition redac.cpp:130
bool set_DIO_direction(uint8_t dio_number, bool input_from_ctrl_block)
Definition redac.cpp:147
REDAC_HAL_V_1_1_X * hardware
Definition redac.h:115
REDAC_V_1_1_X(REDAC_HAL_V_1_1_X *hardware)
Definition redac.cpp:128
utils::status status
Definition daq.h:21
Definition mode.h:14
entities::EntitySharedHardware< REDAC_HAL > REDAC_HAL_Parent
Definition redac.h:14