REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
bus.cpp
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
4
5#include <bus/teensy/bus.h>
6#include <lucidac/front_panel_signaling.h>
7#include <mode/teensy/mode.h>
8#include <utils/logging.h>
9
11
12void bus::init() {
13 LOG(ANABRID_DEBUG_INIT, __PRETTY_FUNCTION__);
14
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);
23
24 bus::spi.begin();
25 bus::spi.setMISO(39);
26 bus::deactivate_address();
27
28 if (!mode::FlexIOControl::init(mode::DEFAULT_IC_TIME, mode::DEFAULT_OP_TIME)) {
29 LOG_ERROR("Error initializing FlexIO mode control.");
30 // leds::indicate_error(); //Singleton currently doesnt exist
31 }
32}
33
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));
36}
37
38void bus::address_function(uint8_t maddr, uint8_t faddr) {
39 address_function(address_from_tuple(maddr, faddr));
40}
41
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);
47 bus::spi.transfer16(address);
48 delayNanoseconds(200);
49 digitalWriteFast(PIN_ADDR_CS, HIGH);
50 delayNanoseconds(200);
51 bus::spi.endTransaction();
52}
53
54void bus::deactivate_address() {
55 digitalWriteFast(PIN_ADDR_RESET, LOW);
56 delayNanoseconds(200);
57 activate_address();
58 delayNanoseconds(200);
59 digitalWriteFast(PIN_ADDR_RESET, HIGH);
60}
61
62void bus::activate_address() {
63 digitalWriteFast(PIN_ADDR_LATCH, HIGH);
64 delayNanoseconds(200);
65 digitalWriteFast(PIN_ADDR_LATCH, LOW);
66}
#define BUS_SPI_INTERFACE
Definition bus.h:15
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={})
Definition mode.cpp:95
SPIClass & spi
Definition bus.cpp:10