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
14namespace platform {
15
16class Teensy_LUCIDAC_HAL : public LUCIDAC_HAL {
17public:
18 // Module addresses
19 static constexpr uint8_t CARRIER_MADDR = 5;
20 // Function addresses
21 static constexpr uint8_t METADATA_FADDR = bus::METADATA_FUNC_IDX;
22 static constexpr uint8_t TEMPERATURE_FADDR = 1;
23 static constexpr uint8_t ADC_PRG_FADDR = 2;
24 static constexpr uint8_t ADC_RESET_8816_FADDR = 3;
25 static constexpr uint8_t ADC_RESET_SR_FADDR = 4;
26 static constexpr uint8_t ADC_STROBE_FADDR = 5;
27 static constexpr uint8_t ACL_PRG_FADDR = 6;
28 static constexpr uint8_t ACL_UPD_FADDR = 7;
29 static constexpr uint8_t ACL_CRL_FADDR = 8;
30
31protected:
32 // Functions to configure ACL signal muxer
36 // Functions to configure ADC signal switching matrix
37 // TODO: Replace by separate function or abstraction that does not allow connecting two inputs to one output
38 // SPI settings are unfortunately different from IBlock
39 static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS;
44 // Temperature function
46
47public:
49
51 bool write_acl(std::array<ACL, 8> acl) override;
52
53 void reset_acl() override;
54
57 bool write_adc_bus_mux(std::array<int8_t, 8> channels) override;
58
59 void reset_adc_bus_mux() override;
60};
61
62} // 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 (TODO: Is ...
Definition functions.h:33
const functions::TriggerFunction f_adc_switcher_sr_reset
Definition lucidac.h:42
static constexpr uint8_t ACL_UPD_FADDR
Definition lucidac.h:28
static constexpr uint8_t METADATA_FADDR
Definition lucidac.h:21
void reset_adc_bus_mux() override
Definition lucidac.cpp:66
static constexpr uint8_t TEMPERATURE_FADDR
Definition lucidac.h:22
void reset_acl() override
Definition lucidac.cpp:43
const functions::SR74HCT595 f_acl_prg
Definition lucidac.h:33
const functions::TriggerFunction f_adc_switcher_matrix_reset
Definition lucidac.h:43
const functions::TMP127Q1 f_temperature
Definition lucidac.h:45
const functions::ICommandRegisterFunction f_adc_switcher_prg
Definition lucidac.h:40
static constexpr uint8_t ADC_STROBE_FADDR
Definition lucidac.h:26
static constexpr uint8_t ACL_CRL_FADDR
Definition lucidac.h:29
static constexpr uint8_t CARRIER_MADDR
Definition lucidac.h:19
static constexpr uint8_t ACL_PRG_FADDR
Definition lucidac.h:27
const functions::TriggerFunction f_acl_upd
Definition lucidac.h:34
static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS
Definition lucidac.h:16
const functions::TriggerFunction f_acl_clr
Definition lucidac.h:35
const functions::TriggerFunction f_adc_switcher_sync
Definition lucidac.h:41
static constexpr uint8_t ADC_RESET_SR_FADDR
Definition lucidac.h:25
static constexpr uint8_t ADC_PRG_FADDR
Definition lucidac.h:23
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:30
static constexpr uint8_t ADC_RESET_8816_FADDR
Definition lucidac.h:24
bool write_adc_bus_mux(std::array< int8_t, 8 > channels) override
Write channel selection to ADC bus muxer.
Definition lucidac.cpp:48
Definition leds.h:6