From 8596d46bcebb15f47669c3b39ef2f71c3e9d37f6 Mon Sep 17 00:00:00 2001 From: ladyada Date: Thu, 17 Oct 2019 15:05:39 -0400 Subject: [PATCH] since now we have SPI DMA for nrf, we need to add some more #define's --- Adafruit_SPITFT.cpp | 12 ++++++------ Adafruit_SPITFT.h | 14 ++++++-------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Adafruit_SPITFT.cpp b/Adafruit_SPITFT.cpp index c9a93fa..6cf59f4 100644 --- a/Adafruit_SPITFT.cpp +++ b/Adafruit_SPITFT.cpp @@ -50,8 +50,8 @@ #define digitalPinToPort(P) (&(PORT_IOBUS->Group[g_APinDescription[P].ulPort])) #endif // end PORT_IOBUS -#if defined(USE_SPI_DMA) - #pragma message ("GFX DMA IS ENABLED. HIGHLY EXPERIMENTAL.") +#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(__SAMD21__)) +// #pragma message ("GFX DMA IS ENABLED. HIGHLY EXPERIMENTAL.") #include #include "wiring_private.h" // pinPeripheral() function #include // memalign() function @@ -648,7 +648,7 @@ void Adafruit_SPITFT::initSPI(uint32_t freq, uint8_t spiMode) { delay(200); } -#if defined(USE_SPI_DMA) +#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(__SAMD21__)) if(((connection == TFT_HARD_SPI) || (connection == TFT_PARALLEL)) && (dma.allocate() == DMA_STATUS_OK)) { // Allocate channel // The DMA library needs to alloc at least one valid descriptor, @@ -1003,7 +1003,7 @@ void Adafruit_SPITFT::writePixels(uint16_t *colors, uint32_t len, } return; -#elif defined(USE_SPI_DMA) +#elif defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(__SAMD21__)) if((connection == TFT_HARD_SPI) || (connection == TFT_PARALLEL)) { int maxSpan = maxFillLen / 2; // One scanline max uint8_t pixelBufIdx = 0; // Active pixel buffer number @@ -1103,7 +1103,7 @@ void Adafruit_SPITFT::writePixels(uint16_t *colors, uint32_t len, was used (as is the default case). */ void Adafruit_SPITFT::dmaWait(void) { -#if defined(USE_SPI_DMA) +#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(__SAMD21__)) while(dma_busy); #if defined(__SAMD51__) || defined(_SAMD21_) if(connection == TFT_HARD_SPI) { @@ -1175,7 +1175,7 @@ void Adafruit_SPITFT::writeColor(uint16_t color, uint32_t len) { return; } #else // !ESP32 - #if defined(USE_SPI_DMA) + #if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(__SAMD21__)) if(((connection == TFT_HARD_SPI) || (connection == TFT_PARALLEL)) && (len >= 16)) { // Don't bother with DMA on short pixel runs int i, d, numDescriptors; diff --git a/Adafruit_SPITFT.h b/Adafruit_SPITFT.h index da2507b..0c38624 100644 --- a/Adafruit_SPITFT.h +++ b/Adafruit_SPITFT.h @@ -71,8 +71,10 @@ typedef volatile ADAGFX_PORT_t* PORTreg_t; ///< PORT register type #define DEFAULT_SPI_FREQ 16000000L ///< Hardware SPI default speed #endif -#if defined(ADAFRUIT_PYPORTAL) || defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || defined(ADAFRUIT_PYGAMER_M4_EXPRESS)|| defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) - #define USE_SPI_DMA ///< Auto DMA if using PyPortal +#if defined(ADAFRUIT_PYPORTAL) || defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || \ + defined(ADAFRUIT_PYGAMER_M4_EXPRESS)|| defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) \ + defined(NRF52) + #define USE_SPI_DMA ///< Auto DMA #else //#define USE_SPI_DMA ///< If set, use DMA if available #endif @@ -82,11 +84,7 @@ typedef volatile ADAGFX_PORT_t* PORTreg_t; ///< PORT register type // 4 bytes/pixel on display major axis + 8 bytes/pixel on minor axis, // e.g. 320x240 pixels = 320 * 4 + 240 * 8 = 3,200 bytes. -#if !defined(ARDUINO_ARCH_SAMD) - #undef USE_SPI_DMA ///< DMA currently for SAMD chips only -#endif - -#if defined(USE_SPI_DMA) +#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(__SAMD21__)) #include #endif @@ -479,7 +477,7 @@ class Adafruit_SPITFT : public Adafruit_GFX { #if defined(__cplusplus) && (__cplusplus >= 201100) }; ///< Only one interface is active #endif -#if defined(USE_SPI_DMA) // Used by hardware SPI and tft8 +#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(__SAMD21__)) // Used by hardware SPI and tft8 Adafruit_ZeroDMA dma; ///< DMA instance DmacDescriptor *dptr = NULL; ///< 1st descriptor DmacDescriptor *descriptor = NULL; ///< Allocated descriptor list