25 #ifndef ACE_SEGMENT_HARD_SPI_INTERFACE_H
26 #define ACE_SEGMENT_HARD_SPI_INTERFACE_H
32 namespace ace_segment {
53 template <
typename T_SPI>
61 static const uint32_t kClockSpeed = 8000000;
64 #if defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_SAMD)
65 static const BitOrder kBitOrder = MSBFIRST;
67 static const uint8_t kBitOrder = MSBFIRST;
71 static const uint8_t kSpiMode = SPI_MODE0;
95 pinMode(mLatchPin, OUTPUT);
99 pinMode(mLatchPin, INPUT);
104 mSpi.beginTransaction(SPISettings(kClockSpeed, kBitOrder, kSpiMode));
105 digitalWrite(mLatchPin, LOW);
106 mSpi.transfer(value);
107 digitalWrite(mLatchPin, HIGH);
108 mSpi.endTransaction();
113 mSpi.beginTransaction(SPISettings(kClockSpeed, kBitOrder, kSpiMode));
114 digitalWrite(mLatchPin, LOW);
115 mSpi.transfer16(value);
116 digitalWrite(mLatchPin, HIGH);
117 mSpi.endTransaction();
124 void send16(uint8_t msb, uint8_t lsb)
const {
125 uint16_t value = ((uint16_t) msb) << 8 | (uint16_t) lsb;
131 uint8_t
const mLatchPin;