Esp32 spi Fixes (#247)

* Initial work

* Update DotStarSpiMethod.h
This commit is contained in:
Michael Miller
2019-01-17 12:54:40 -08:00
committed by GitHub
parent 6c9270f4cd
commit eb405efef5
2 changed files with 31 additions and 10 deletions

View File

@@ -137,6 +137,13 @@ public:
Dirty();
}
// used by DotStartSpiMethod if pins can be configured
void Begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss)
{
_method.Initialize(sck, miso, mosi, ss);
Dirty();
}
void Show()
{
if (!IsDirty())

View File

@@ -51,19 +51,18 @@ public:
return true; // dot stars don't have a required delay
}
#if defined(ARDUINO_ARCH_ESP32)
void Initialize(int8_t sck, int8_t miso, int8_t mosi, int8_t ss)
{
SPI.begin(sck, miso, mosi, ss);
init();
}
#endif
void Initialize()
{
SPI.begin();
#if defined(ARDUINO_ARCH_ESP8266)
SPI.setFrequency(20000000L);
#elif defined(ARDUINO_ARCH_AVR)
SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz (6 MHz on Pro Trinket 3V)
#else
SPI.setClockDivider((F_CPU + 4000000L) / 8000000L); // 8-ish MHz on Due
#endif
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
init();
}
void Update()
@@ -93,6 +92,21 @@ private:
uint8_t* _sendBuffer; // Holds SPI send Buffer, including LED color values
void init()
{
#if defined(ARDUINO_ARCH_ESP8266)
SPI.setFrequency(4000000L); // more than 4mhz causes CLK pulse malformation
#elif defined(ARDUINO_ARCH_ESP32)
SPI.setFrequency(4000000L); // more than 4mhz causes CLK pulse malformation
#elif defined(ARDUINO_ARCH_AVR)
SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz (6 MHz on Pro Trinket 3V)
#else
SPI.setClockDivider((F_CPU + 4000000L) / 8000000L); // 8-ish MHz on Due
#endif
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
}
size_t calcBufferSize(size_t sizePixels) const
{
const size_t countEndFrameBytes = calcEndFrameSize(sizePixels);