REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
SR74HCT595.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 "SR74HCT595.h"
6
8 4'000'000, MSBFIRST, SPI_MODE3 /* Chip expects MODE0, CLK is inverted on the way */};
9
11 4'000'000, MSBFIRST,
12 SPI_MODE2 /* Chip expects MODE0, CLK is inverted on the way, but MOSI is not, thus CLK must be shifted */};
13
14functions::SR74HCT595::SR74HCT595(bus::addr_t address, bool shift_clock)
15 : functions::DataFunction(address,
16 shift_clock ? DEFAULT_SPI_SETTINGS_SHIFTED_CLOCK : DEFAULT_SPI_SETTINGS) {}
17
18bool functions::SR74HCT595::transfer(const void *mosi_buf, void *miso_buf, size_t count) const {
19 DataFunction::transfer(mosi_buf, miso_buf, count);
20#ifdef ANABRID_PEDANTIC
21 uint8_t miso_check[count];
22 DataFunction::transfer(mosi_buf, miso_check, count);
23 return memcmp(mosi_buf, miso_check, count) == 0;
24#else
25 return true;
26#endif
27}
28
29bool functions::SR74HCT595::transfer8(uint8_t data_in, uint8_t *data_out) const {
30 auto ret = DataFunction::transfer8(data_in);
31 if (data_out)
32 *data_out = ret;
33#ifdef ANABRID_PEDANTIC
34 auto written_data = DataFunction::transfer8(data_in);
35 return written_data == data_in;
36#else
37 return true;
38#endif
39}
40
41bool functions::SR74HCT595::transfer16(uint16_t data_in, uint16_t *data_out) const {
42 auto ret = DataFunction::transfer16(data_in);
43 if (data_out)
44 *data_out = ret;
45#ifdef ANABRID_PEDANTIC
46 auto written_data = DataFunction::transfer16(data_in);
47 return written_data == data_in;
48#else
49 return true;
50#endif
51}
52
53bool functions::SR74HCT595::transfer32(uint32_t data_in, uint32_t *data_out) const {
54 auto ret = DataFunction::transfer32(data_in);
55 if (data_out)
56 *data_out = ret;
57#ifdef ANABRID_PEDANTIC
58 auto written_data = DataFunction::transfer32(data_in);
59 return written_data == data_in;
60#else
61 return true;
62#endif
63}
A DataFunction class wraps SPI communication over the digital bus.
Definition functions.h:47
uint16_t transfer16(uint16_t data_in) const
uint8_t transfer8(uint8_t data_in) const
void transfer(const void *mosi_buf, void *miso_buf, size_t count) const
uint32_t transfer32(uint32_t data_in) const
bool transfer(const void *mosi_buf, void *miso_buf, size_t count) const
SR74HCT595(bus::addr_t address, bool shift_clock=false)
static const SPISettings DEFAULT_SPI_SETTINGS
Definition SR74HCT595.h:7
bool transfer8(uint8_t data_in, uint8_t *data_out=nullptr) const
bool transfer32(uint32_t data_in, uint32_t *data_out=nullptr) const
bool transfer16(uint16_t data_in, uint16_t *data_out=nullptr) const
static const SPISettings DEFAULT_SPI_SETTINGS_SHIFTED_CLOCK
Definition SR74HCT595.h:10
uint32_t
Definition flasher.cpp:195
namespace for internal helpers
Definition icmd.h:6