25 #ifndef ACE_SEGMENT_SW_SPI_ADAPTER_FAST_H
26 #define ACE_SEGMENT_SW_SPI_ADAPTER_FAST_H
28 #if defined(ARDUINO_ARCH_AVR)
32 #include <digitalWriteFast.h>
34 namespace ace_segment {
44 template <u
int8_t latchPin, u
int8_t dataPin, u
int8_t clockPin>
45 class SwSpiAdapterFast {
47 SwSpiAdapterFast() =
default;
50 pinModeFast(latchPin, OUTPUT);
51 pinModeFast(dataPin, OUTPUT);
52 pinModeFast(clockPin, OUTPUT);
56 pinModeFast(latchPin, INPUT);
57 pinModeFast(dataPin, INPUT);
58 pinModeFast(clockPin, INPUT);
61 void transfer(uint8_t value)
const {
62 digitalWriteFast(latchPin, LOW);
64 digitalWriteFast(latchPin, HIGH);
67 void transfer16(uint16_t value)
const {
68 uint8_t msb = (value & 0xff00) >> 8;
69 uint8_t lsb = (value & 0xff);
70 digitalWriteFast(latchPin, LOW);
73 digitalWriteFast(latchPin, HIGH);
76 static void shiftOutFast(uint8_t output) {
78 for (uint8_t i = 0; i < 8; i++) {
79 digitalWriteFast(clockPin, LOW);
81 digitalWriteFast(dataPin, HIGH);
83 digitalWriteFast(dataPin, LOW);
85 digitalWriteFast(clockPin, HIGH);
94 #endif // defined(ARDUINO_ARCH_AVR)