25 #ifndef ACE_SEGMENT_SOFT_SPI_FAST_INTERFACE_H
26 #define ACE_SEGMENT_SOFT_SPI_FAST_INTERFACE_H
30 #if defined(ARDUINO_ARCH_AVR) || defined(EPOXY_DUINO)
35 namespace ace_segment {
45 template <u
int8_t T_LATCH_PIN, u
int8_t T_DATA_PIN, u
int8_t T_CLOCK_PIN>
46 class SoftSpiFastInterface {
48 SoftSpiFastInterface() =
default;
51 pinModeFast(T_LATCH_PIN, OUTPUT);
52 pinModeFast(T_DATA_PIN, OUTPUT);
53 pinModeFast(T_CLOCK_PIN, OUTPUT);
57 pinModeFast(T_LATCH_PIN, INPUT);
58 pinModeFast(T_DATA_PIN, INPUT);
59 pinModeFast(T_CLOCK_PIN, INPUT);
63 void send8(uint8_t value)
const {
64 digitalWriteFast(T_LATCH_PIN, LOW);
66 digitalWriteFast(T_LATCH_PIN, HIGH);
70 void send16(uint16_t value)
const {
71 uint8_t msb = (value & 0xff00) >> 8;
72 uint8_t lsb = (value & 0xff);
77 void send16(uint8_t msb, uint8_t lsb)
const {
78 digitalWriteFast(T_LATCH_PIN, LOW);
81 digitalWriteFast(T_LATCH_PIN, HIGH);
85 static void shiftOutFast(uint8_t output) {
87 for (uint8_t i = 0; i < 8; i++) {
88 digitalWriteFast(T_CLOCK_PIN, LOW);
90 digitalWriteFast(T_DATA_PIN, HIGH);
92 digitalWriteFast(T_DATA_PIN, LOW);
94 digitalWriteFast(T_CLOCK_PIN, HIGH);
102 #endif // defined(ARDUINO_ARCH_AVR)