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
12FLASHMEM void bus::init() {
13 LOG(ANABRID_DEBUG_INIT, __PRETTY_FUNCTION__);
14
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);
21
22 bus::spi.begin();
23 bus::spi.setMISO(39);
24 bus::deactivate_address();
25
26 if (!mode::FlexIOControl::init(mode::DEFAULT_IC_TIME, mode::DEFAULT_OP_TIME)) {
27 LOG_ERROR("Error initializing FlexIO mode control.");
28 leds::indicate_error();
29 }
30}
31
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));
34}
35
36void bus::address_function(uint8_t maddr, uint8_t faddr) {
37 address_function(address_from_tuple(maddr, faddr));
38}
39
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);
45 bus::spi.transfer16(address);
46 delayNanoseconds(200);
47 digitalWriteFast(PIN_ADDR_CS, HIGH);
48 delayNanoseconds(200);
49 bus::spi.endTransaction();
50}
51
52void bus::deactivate_address() {
53 digitalWriteFast(PIN_ADDR_RESET, LOW);
54 delayNanoseconds(200);
55 activate_address();
56 delayNanoseconds(200);
57 digitalWriteFast(PIN_ADDR_RESET, HIGH);
58}
59
60void bus::activate_address() {
61 digitalWriteFast(PIN_ADDR_LATCH, HIGH);
62 delayNanoseconds(200);
63 digitalWriteFast(PIN_ADDR_LATCH, LOW);
64}
#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, mode::Sync sync=mode::Sync::NONE)
Definition mode.cpp:95
SPIClass & spi
Definition bus.cpp:10