6#include <lucidac/front_panel_signaling.h>
8#include <utils/logging.h>
12FLASHMEM
void bus::init() {
13 LOG(ANABRID_DEBUG_INIT, __PRETTY_FUNCTION__);
15 pinMode(PIN_ADDR_CS, OUTPUT);
16 digitalWriteFast(PIN_ADDR_CS, HIGH);
17 pinMode(PIN_ADDR_LATCH, OUTPUT);
18 digitalWriteFast(PIN_ADDR_LATCH, LOW);
19 pinMode(PIN_ADDR_RESET, OUTPUT);
20 digitalWriteFast(PIN_ADDR_RESET, HIGH);
24 bus::deactivate_address();
27 LOG_ERROR(
"Error initializing FlexIO mode control.");
28 leds::indicate_error();
32void bus::address_function(uint8_t cluster_idx, uint8_t block_idx, uint8_t func_idx) {
33 address_function(idx_to_addr(cluster_idx, block_idx, func_idx));
36void bus::address_function(uint8_t maddr, uint8_t faddr) {
37 address_function(address_from_tuple(maddr, faddr));
40void bus::address_function(bus::addr_t address) {
41 bus::spi.beginTransaction(SPISettings(4'000'000, MSBFIRST, SPI_MODE2));
42 delayNanoseconds(200);
43 digitalWriteFast(PIN_ADDR_CS, LOW);
44 delayNanoseconds(200);
46 delayNanoseconds(200);
47 digitalWriteFast(PIN_ADDR_CS, HIGH);
48 delayNanoseconds(200);
52void bus::deactivate_address() {
53 digitalWriteFast(PIN_ADDR_RESET, LOW);
54 delayNanoseconds(200);
56 delayNanoseconds(200);
57 digitalWriteFast(PIN_ADDR_RESET, HIGH);
60void bus::activate_address() {
61 digitalWriteFast(PIN_ADDR_LATCH, HIGH);
62 delayNanoseconds(200);
63 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, mode::Sync sync=mode::Sync::NONE)