Parcourir la source

fix RP2040 SPI peripheral mapping

caternuson il y a 9 mois
Parent
commit
9709959658
2 fichiers modifiés avec 15 ajouts et 5 suppressions
  1. 5 5
      Adafruit_SPITFT.cpp
  2. 10 0
      Adafruit_SPITFT.h

+ 5 - 5
Adafruit_SPITFT.cpp

@@ -1032,7 +1032,7 @@ void Adafruit_SPITFT::writePixels(uint16_t *colors, uint32_t len, bool block,
 
 
   return;
   return;
 #elif defined(ARDUINO_ARCH_RP2040)
 #elif defined(ARDUINO_ARCH_RP2040)
-  spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
+  spi_inst_t *pi_spi = hwspi._spi == &SPI ? __SPI0_DEVICE : __SPI1_DEVICE;
 
 
   if (!bigEndian) {
   if (!bigEndian) {
     // switch to 16-bit writes
     // switch to 16-bit writes
@@ -1410,7 +1410,7 @@ void Adafruit_SPITFT::writeColor(uint16_t color, uint32_t len) {
       }
       }
     } while (len);
     } while (len);
 #elif defined(ARDUINO_ARCH_RP2040)
 #elif defined(ARDUINO_ARCH_RP2040)
-    spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
+    spi_inst_t *pi_spi = hwspi._spi == &SPI ? __SPI0_DEVICE : __SPI1_DEVICE;
     color = __builtin_bswap16(color);
     color = __builtin_bswap16(color);
 
 
     while (len--)
     while (len--)
@@ -2169,7 +2169,7 @@ void Adafruit_SPITFT::spiWrite(uint8_t b) {
 #elif defined(ESP8266) || defined(ESP32)
 #elif defined(ESP8266) || defined(ESP32)
     hwspi._spi->write(b);
     hwspi._spi->write(b);
 #elif defined(ARDUINO_ARCH_RP2040)
 #elif defined(ARDUINO_ARCH_RP2040)
-    spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
+    spi_inst_t *pi_spi = hwspi._spi == &SPI ? __SPI0_DEVICE : __SPI1_DEVICE;
     spi_write_blocking(pi_spi, &b, 1);
     spi_write_blocking(pi_spi, &b, 1);
 #else
 #else
     hwspi._spi->transfer(b);
     hwspi._spi->transfer(b);
@@ -2454,7 +2454,7 @@ void Adafruit_SPITFT::SPI_WRITE16(uint16_t w) {
 #elif defined(ESP8266) || defined(ESP32)
 #elif defined(ESP8266) || defined(ESP32)
     hwspi._spi->write16(w);
     hwspi._spi->write16(w);
 #elif defined(ARDUINO_ARCH_RP2040)
 #elif defined(ARDUINO_ARCH_RP2040)
-    spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
+    spi_inst_t *pi_spi = hwspi._spi == &SPI ? __SPI0_DEVICE : __SPI1_DEVICE;
     w = __builtin_bswap16(w);
     w = __builtin_bswap16(w);
     spi_write_blocking(pi_spi, (uint8_t *)&w, 2);
     spi_write_blocking(pi_spi, (uint8_t *)&w, 2);
 #elif defined(ARDUINO_ARCH_RTTHREAD)
 #elif defined(ARDUINO_ARCH_RTTHREAD)
@@ -2512,7 +2512,7 @@ void Adafruit_SPITFT::SPI_WRITE32(uint32_t l) {
 #elif defined(ESP8266) || defined(ESP32)
 #elif defined(ESP8266) || defined(ESP32)
     hwspi._spi->write32(l);
     hwspi._spi->write32(l);
 #elif defined(ARDUINO_ARCH_RP2040)
 #elif defined(ARDUINO_ARCH_RP2040)
-    spi_inst_t *pi_spi = hwspi._spi == &SPI ? spi0 : spi1;
+    spi_inst_t *pi_spi = hwspi._spi == &SPI ? __SPI0_DEVICE : __SPI1_DEVICE;
     l = __builtin_bswap32(l);
     l = __builtin_bswap32(l);
     spi_write_blocking(pi_spi, (uint8_t *)&l, 4);
     spi_write_blocking(pi_spi, (uint8_t *)&l, 4);
 #elif defined(ARDUINO_ARCH_RTTHREAD)
 #elif defined(ARDUINO_ARCH_RTTHREAD)

+ 10 - 0
Adafruit_SPITFT.h

@@ -103,6 +103,16 @@ typedef volatile ADAGFX_PORT_t *PORTreg_t; ///< PORT register type
 /*! For first arg to parallel constructor */
 /*! For first arg to parallel constructor */
 enum tftBusWidth { tft8bitbus, tft16bitbus };
 enum tftBusWidth { tft8bitbus, tft16bitbus };
 
 
+// SPI defaults for RP2040
+#if defined(ARDUINO_ARCH_RP2040)
+#ifndef __SPI0_DEVICE
+#define __SPI0_DEVICE spi0
+#endif
+#ifndef __SPI1_DEVICE
+#define __SPI1_DEVICE spi1
+#endif
+#endif
+
 // CLASS DEFINITION --------------------------------------------------------
 // CLASS DEFINITION --------------------------------------------------------
 
 
 /*!
 /*!