REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
ctrlblock.cpp
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#include "teensy/ctrlblock.h"
7#include <block/ctrlblock.h>
8#include <chips/SR74HCT595.h>
9
10const SPISettings blocks::CTRLBlockHAL_V_1_0_2::F_SYNC_SPI_SETTINGS{1'000'000, MSBFIRST, SPI_MODE0};
11
12FLASHMEM blocks::CTRLBlockHAL_V_1_0_2::CTRLBlockHAL_V_1_0_2(bus::addr_t block_address)
13 : f_meta(block_address), f_adc_mux(bus::address_from_tuple(1, 2), true),
14 f_adc_mux_latch(bus::address_from_tuple(1, 3)),
15 f_sync(bus::address_from_tuple(1, 4), F_SYNC_SPI_SETTINGS) {}
16
18 if (!f_adc_mux.transfer8(static_cast<uint8_t>(adc_bus)))
19 return false;
20 f_adc_mux_latch.trigger();
21 return true;
22}
23
24// float blocks::CTRLBlockHAL_V_1_0_2::read_temperature() { return 0; }
25
27 // The very naive encoding proposed in
28 // https://lab.analogparadigm.com/lucidac/firmware/hybrid-controller/-/issues/2
29 // uses only 6 bits of the 16 bits to ensure a "unique stream".
30 // IDs is thus limited to 0-63 currently
31 if (id > 0b00'111111)
32 return false;
33 f_sync.transfer16((id << 1) | 0b1000'0001);
34 return true;
35}
bool write_adc_bus_muxers(ADCBus adc_bus) override
Definition ctrlblock.cpp:17
static const SPISettings F_SYNC_SPI_SETTINGS
Definition ctrlblock.h:10
CTRLBlockHAL_V_1_0_2(bus::addr_t block_address)
Definition ctrlblock.cpp:12
bool write_sync_id(uint8_t id) override
Definition ctrlblock.cpp:26
Definition bus.h:21