REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
lucidac.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 <chips/SR74HCT595.h>
10#include <chips/TMP127Q1.h>
11#include <lucidac/lucidac.h>
12#include <utils/mac.h>
13#include <entity/hardware.h>
14
15namespace platform {
16
18
20public:
21 // Module addresses
22 static constexpr uint8_t CARRIER_MADDR = 5;
23 // Function addresses
24 static constexpr uint8_t METADATA_FADDR = bus::METADATA_FUNC_IDX;
25 static constexpr uint8_t TEMPERATURE_FADDR = 1;
26 static constexpr uint8_t ADC_PRG_FADDR = 2;
27 static constexpr uint8_t ADC_RESET_8816_FADDR = 3;
28 static constexpr uint8_t ADC_RESET_SR_FADDR = 4;
29 static constexpr uint8_t ADC_STROBE_FADDR = 5;
30 static constexpr uint8_t ACL_PRG_FADDR = 6;
31 static constexpr uint8_t ACL_UPD_FADDR = 7;
32 static constexpr uint8_t ACL_CRL_FADDR = 8;
33
34protected:
35 // Functions to configure ACL signal muxer
39 // Functions to configure ADC signal switching matrix
40 // TODO: Replace by separate function or abstraction that does not allow connecting two inputs to one output
41 // SPI settings are unfortunately different from IBlock
42 static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS;
47
48public:
50
51 //! Write bits to ACL shift register, from I-block input 24 (first element) to 31 (last element)
52 bool write_acl(std::array<ACL, 8> acl) override;
53
54 void reset_acl() override;
55
58 bool write_adc_bus_mux(const std::array<int8_t, 8> &channels) override;
59
60 void reset_adc_bus_mux() override;
61};
62
63} // namespace platform
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
const functions::TriggerFunction f_adc_switcher_sr_reset
Definition lucidac.h:45
static constexpr uint8_t ACL_UPD_FADDR
Definition lucidac.h:31
static constexpr uint8_t METADATA_FADDR
Definition lucidac.h:24
static constexpr uint8_t TEMPERATURE_FADDR
Definition lucidac.h:25
bool write_adc_bus_mux(const std::array< int8_t, 8 > &channels) override
Write channel selection to ADC bus muxer.
Definition lucidac.cpp:83
const functions::SR74HCT595 f_acl_prg
Definition lucidac.h:36
const functions::TriggerFunction f_adc_switcher_matrix_reset
Definition lucidac.h:46
void reset_acl() override
Definition lucidac.cpp:78
const functions::ICommandRegisterFunction f_adc_switcher_prg
Definition lucidac.h:43
static constexpr uint8_t ADC_STROBE_FADDR
Definition lucidac.h:29
static constexpr uint8_t ACL_CRL_FADDR
Definition lucidac.h:32
static constexpr uint8_t CARRIER_MADDR
Definition lucidac.h:22
static constexpr uint8_t ACL_PRG_FADDR
Definition lucidac.h:30
const functions::TriggerFunction f_acl_upd
Definition lucidac.h:37
static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS
Definition lucidac.h:51
const functions::TriggerFunction f_acl_clr
Definition lucidac.h:38
const functions::TriggerFunction f_adc_switcher_sync
Definition lucidac.h:44
static constexpr uint8_t ADC_RESET_SR_FADDR
Definition lucidac.h:28
bool write_acl(std::array< ACL, 8 > acl) override
Write bits to ACL shift register, from I-block input 24 (first element) to 31 (last element)
Definition lucidac.cpp:65
static constexpr uint8_t ADC_PRG_FADDR
Definition lucidac.h:26
void reset_adc_bus_mux() override
Definition lucidac.cpp:101
static constexpr uint8_t ADC_RESET_8816_FADDR
Definition lucidac.h:27
entities::EntitySharedHardware< LUCIDAC_HAL > LUCIDAC_HAL_Parent
Definition lucidac.h:17