6#include <lucidac/front_panel_signaling.h>
8#include <utils/logging.h>
13 LOG(ANABRID_DEBUG_INIT, __PRETTY_FUNCTION__);
15 pinMode(PIN_CSEL, OUTPUT);
16 digitalWriteFast(PIN_CSEL, HIGH);
17 pinMode(PIN_ADDR_CS, OUTPUT);
18 digitalWriteFast(PIN_ADDR_CS, HIGH);
19 pinMode(PIN_ADDR_LATCH, OUTPUT);
20 digitalWriteFast(PIN_ADDR_LATCH, LOW);
21 pinMode(PIN_ADDR_RESET, OUTPUT);
22 digitalWriteFast(PIN_ADDR_RESET, HIGH);
26 bus::deactivate_address();
29 LOG_ERROR(
"Error initializing FlexIO mode control.");
34void bus::address_function(uint8_t cluster_idx, uint8_t block_idx, uint8_t func_idx) {
35 address_function(idx_to_addr(cluster_idx, block_idx, func_idx));
38void bus::address_function(uint8_t maddr, uint8_t faddr) {
39 address_function(address_from_tuple(maddr, faddr));
42void bus::address_function(bus::addr_t address) {
43 bus::spi.beginTransaction(SPISettings(4'000'000, MSBFIRST, SPI_MODE2));
44 delayNanoseconds(200);
45 digitalWriteFast(PIN_ADDR_CS, LOW);
46 delayNanoseconds(200);
48 delayNanoseconds(200);
49 digitalWriteFast(PIN_ADDR_CS, HIGH);
50 delayNanoseconds(200);
54void bus::deactivate_address() {
55 digitalWriteFast(PIN_ADDR_RESET, LOW);
56 delayNanoseconds(200);
58 delayNanoseconds(200);
59 digitalWriteFast(PIN_ADDR_RESET, HIGH);
62void bus::activate_address() {
63 digitalWriteFast(PIN_ADDR_LATCH, HIGH);
64 delayNanoseconds(200);
65 digitalWriteFast(PIN_ADDR_LATCH, LOW);
#define BUS_SPI_INTERFACE
static bool init(unsigned long long ic_time_ns, unsigned long long op_time_ns, mode::OnOverload on_overload=mode::OnOverload::HALT, mode::OnExtHalt on_ext_halt=mode::OnExtHalt::IGNORE, SyncConfig sync_config={})