20 #ifndef _ADAFRUIT_SPITFT_H_ 21 #define _ADAFRUIT_SPITFT_H_ 24 #if !defined(__AVR_ATtiny85__) && !defined(__AVR_ATtiny84__) 26 #include "Adafruit_GFX.h" 31 #include "arch/arch.h" 35 #if defined(__AVR__) && !defined(__LGT8F__) 36 #define DEFAULT_SPI_FREQ 8000000L 38 #define DEFAULT_SPI_FREQ 16000000L 41 #if defined(ADAFRUIT_PYPORTAL) || defined(ADAFRUIT_PYPORTAL_M4_TITANO) || \ 42 defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || \ 43 defined(ADAFRUIT_PYGAMER_M4_EXPRESS) || \ 44 defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) || defined(NRF52_SERIES) || \ 45 defined(ADAFRUIT_CIRCUITPLAYGROUND_M0) 57 #if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO)) 58 #include <Adafruit_ZeroDMA.h> 73 #if defined(ARDUINO_ARCH_RP2040) 75 #define __SPI0_DEVICE spi0 78 #define __SPI1_DEVICE spi1 107 Adafruit_SPITFT(uint16_t w, uint16_t h, int16_t cs, int16_t dc, int16_t mosi,
108 int16_t sck, int16_t rst = -1, int16_t miso = -1);
118 #if !defined(ESP8266) // See notes in .cpp 122 Adafruit_SPITFT(uint16_t w, uint16_t h, SPIClass *spiClass, int16_t cs,
123 int16_t dc, int16_t rst = -1);
124 #endif // end !ESP8266 132 int16_t wr, int16_t dc, int16_t cs = -1, int16_t rst = -1,
147 virtual void begin(uint32_t freq) = 0;
161 virtual void setAddrWindow(uint16_t x, uint16_t y, uint16_t w,
173 void initSPI(uint32_t freq = 0, uint8_t spiMode = SPI_MODE0);
179 void sendCommand(uint8_t commandByte, uint8_t *dataBytes,
180 uint8_t numDataBytes);
181 void sendCommand(uint8_t commandByte,
const uint8_t *dataBytes = NULL,
182 uint8_t numDataBytes = 0);
183 void sendCommand16(uint16_t commandWord,
const uint8_t *dataBytes = NULL,
184 uint8_t numDataBytes = 0);
185 uint8_t
readcommand8(uint8_t commandByte, uint8_t index = 0);
194 void writePixel(int16_t x, int16_t y, uint16_t color);
195 void writeLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
197 void writePixels(uint16_t *colors, uint32_t len,
bool block =
true,
198 bool bigEndian =
false);
199 void writeColor(uint16_t color, uint32_t len);
200 void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h,
202 void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
203 void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
210 int16_t h, uint16_t color);
217 void swapBytes(uint16_t *src, uint32_t len, uint16_t *dest = NULL);
223 void drawPixel(int16_t x, int16_t y, uint16_t color);
224 void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
225 void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
226 void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
233 void drawRGBBitmap(int16_t x, int16_t y, uint16_t *pcolors, int16_t w,
237 uint16_t
color565(uint8_t r, uint8_t g, uint8_t b);
271 #if defined(USE_FAST_PINIO) 272 #if defined(HAS_PORT_SET_CLR) 273 #if defined(KINETISK) 276 *csPortSet = csPinMask;
277 #endif // end !KINETISK 278 #else // !HAS_PORT_SET_CLR 279 *csPort |= csPinMaskSet;
280 #endif // end !HAS_PORT_SET_CLR 281 #else // !USE_FAST_PINIO 282 digitalWrite(
_cs, HIGH);
283 #endif // end !USE_FAST_PINIO 293 #if defined(USE_FAST_PINIO) 294 #if defined(HAS_PORT_SET_CLR) 295 #if defined(KINETISK) 298 *csPortClr = csPinMask;
299 #endif // end !KINETISK 300 #else // !HAS_PORT_SET_CLR 301 *csPort &= csPinMaskClr;
302 #endif // end !HAS_PORT_SET_CLR 303 #else // !USE_FAST_PINIO 304 digitalWrite(
_cs, LOW);
305 #endif // end !USE_FAST_PINIO 312 #if defined(USE_FAST_PINIO) 313 #if defined(HAS_PORT_SET_CLR) 314 #if defined(KINETISK) 317 *dcPortSet = dcPinMask;
318 #endif // end !KINETISK 319 #else // !HAS_PORT_SET_CLR 320 *dcPort |= dcPinMaskSet;
321 #endif // end !HAS_PORT_SET_CLR 322 #else // !USE_FAST_PINIO 323 digitalWrite(
_dc, HIGH);
324 #endif // end !USE_FAST_PINIO 331 #if defined(USE_FAST_PINIO) 332 #if defined(HAS_PORT_SET_CLR) 333 #if defined(KINETISK) 336 *dcPortClr = dcPinMask;
337 #endif // end !KINETISK 338 #else // !HAS_PORT_SET_CLR 339 *dcPort &= dcPinMaskClr;
340 #endif // end !HAS_PORT_SET_CLR 341 #else // !USE_FAST_PINIO 342 digitalWrite(
_dc, LOW);
343 #endif // end !USE_FAST_PINIO 377 #if defined(USE_FAST_PINIO) 378 #if defined(HAS_PORT_SET_CLR) 383 #else // !HAS_PORT_SET_CLR 386 #endif // end HAS_PORT_SET_CLR 387 #endif // end USE_FAST_PINIO 388 #if defined(__cplusplus) && (__cplusplus >= 201100) 393 #if defined(SPI_HAS_TRANSACTION) 394 SPISettings settings;
401 #if defined(USE_FAST_PINIO) 403 #if defined(HAS_PORT_SET_CLR) 408 #if !defined(KINETISK) 409 ADAGFX_PORT_t mosiPinMask;
410 ADAGFX_PORT_t sckPinMask;
411 #endif // end !KINETISK 412 #else // !HAS_PORT_SET_CLR 415 ADAGFX_PORT_t mosiPinMaskSet;
416 ADAGFX_PORT_t mosiPinMaskClr;
417 ADAGFX_PORT_t sckPinMaskSet;
418 ADAGFX_PORT_t sckPinMaskClr;
419 #endif // end HAS_PORT_SET_CLR 420 #if !defined(KINETISK) 421 ADAGFX_PORT_t misoPinMask;
422 #endif // end !KINETISK 423 #endif // end USE_FAST_PINIO 429 #if defined(USE_FAST_PINIO) 431 #if defined(__IMXRT1052__) || defined(__IMXRT1062__) // Teensy 4.x 432 volatile uint32_t *writePort;
433 volatile uint32_t *readPort;
435 volatile uint8_t *writePort;
436 volatile uint8_t *readPort;
438 #if defined(HAS_PORT_SET_CLR) 441 #if defined(__IMXRT1052__) || defined(__IMXRT1062__) // Teensy 4.x 442 volatile uint32_t *dirSet;
443 volatile uint32_t *dirClr;
445 volatile uint8_t *dirSet;
446 volatile uint8_t *dirClr;
452 #if !defined(KINETISK) 453 ADAGFX_PORT_t wrPinMask;
454 #endif // end !KINETISK 455 ADAGFX_PORT_t rdPinMask;
456 #else // !HAS_PORT_SET_CLR 459 volatile uint8_t *portDir;
462 ADAGFX_PORT_t wrPinMaskSet;
463 ADAGFX_PORT_t wrPinMaskClr;
464 ADAGFX_PORT_t rdPinMaskSet;
465 ADAGFX_PORT_t rdPinMaskClr;
466 #endif // end HAS_PORT_SET_CLR 467 #endif // end USE_FAST_PINIO 473 #if defined(__cplusplus) && (__cplusplus >= 201100) 476 #if defined(USE_SPI_DMA) && \ 477 (defined(__SAMD51__) || \ 478 defined(ARDUINO_SAMD_ZERO)) // Used by hardware SPI and tft8 479 Adafruit_ZeroDMA dma;
480 DmacDescriptor *dptr = NULL;
481 DmacDescriptor *descriptor = NULL;
482 uint16_t *pixelBuf[2];
484 uint16_t lastFillColor = 0;
485 uint32_t lastFillLen = 0;
488 #if defined(USE_FAST_PINIO) 489 #if defined(HAS_PORT_SET_CLR) 490 #if !defined(KINETISK) 491 ADAGFX_PORT_t csPinMask;
492 ADAGFX_PORT_t dcPinMask;
493 #endif // end !KINETISK 494 #else // !HAS_PORT_SET_CLR 495 ADAGFX_PORT_t csPinMaskSet;
496 ADAGFX_PORT_t csPinMaskClr;
497 ADAGFX_PORT_t dcPinMaskSet;
498 ADAGFX_PORT_t dcPinMaskClr;
499 #endif // end HAS_PORT_SET_CLR 500 #endif // end USE_FAST_PINIO 514 #endif // end __AVR_ATtiny85__ __AVR_ATtiny84__ 515 #endif // end _ADAFRUIT_SPITFT_H_ void sendCommand(uint8_t commandByte, uint8_t *dataBytes, uint8_t numDataBytes)
Adafruit_SPITFT Send Command handles complete sending of commands and data.
Definition: Adafruit_SPITFT.cpp:2038
void write16(uint16_t w)
Issue a single 16-bit value to the display. Chip-select, transaction and data/command selection must ...
Definition: Adafruit_SPITFT.cpp:2369
uint32_t _freq
SPI bitrate (if no SPI transactions)
Definition: Adafruit_SPITFT.h:396
void writePixels(uint16_t *colors, uint32_t len, bool block=true, bool bigEndian=false)
Issue a series of pixels from memory to the display. Not self- contained; should follow startWrite() ...
Definition: Adafruit_SPITFT.cpp:1074
uint8_t invertOffCommand
Command to disable invert mode.
Definition: Adafruit_SPITFT.h:509
void writePixel(int16_t x, int16_t y, uint16_t color)
Draw a single pixel to the display at requested coordinates. Not self-contained; should follow a star...
Definition: Adafruit_SPITFT.cpp:949
struct Adafruit_SPITFT::@2 tft8
Parallel interface settings.
virtual void setAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h)=0
Set up the specific display hardware's "address window" for subsequent pixel-pushing operations...
void SPI_WRITE16(uint16_t w)
Issue a single 16-bit value to the display. Chip-select, transaction and data/command selection must ...
Definition: Adafruit_SPITFT.cpp:2531
Definition: Adafruit_GFX.h:18
uint16_t readcommand16(uint16_t addr)
Read 16 bits of data from display register. For 16-bit parallel displays only.
Definition: Adafruit_SPITFT.cpp:2160
int16_t _rd
Read strobe pin # (or -1)
Definition: Adafruit_SPITFT.h:470
void writeColorHardSPI(uint16_t color, uint32_t len)
Family-specific hardware SPI solid fill.
void SPI_BEGIN_TRANSACTION(void)
Start an SPI transaction if using the hardware SPI interface to the display. If using an earlier vers...
Definition: Adafruit_SPITFT.cpp:2202
void drawRGBBitmap(int16_t x, int16_t y, uint16_t *pcolors, int16_t w, int16_t h)
Draw a 16-bit image (565 RGB) at the specified (x,y) position. For 16-bit display devices; no color r...
Definition: Adafruit_SPITFT.cpp:1965
Adafruit_SPITFT(uint16_t w, uint16_t h, int16_t cs, int16_t dc, int16_t mosi, int16_t sck, int16_t rst=-1, int16_t miso=-1)
Adafruit_SPITFT constructor for software (bitbang) SPI.
Definition: Adafruit_SPITFT.cpp:121
void TFT_RD_LOW(void)
Set the RD line LOW. Used for parallel-connected interfaces when reading data.
Definition: Adafruit_SPITFT.cpp:2691
void writeColor(uint16_t color, uint32_t len)
Issue a series of pixels, all the same color. Not self- contained; should follow startWrite() and set...
Definition: Adafruit_SPITFT.cpp:1306
void writeCommand16(uint16_t cmd)
Write a single command word to the display. Chip-select and transaction must have been previously set...
Definition: Adafruit_SPITFT.cpp:2389
void SPI_SCK_HIGH(void)
Set the software (bitbang) SPI SCK line HIGH.
Definition: Adafruit_SPITFT.cpp:2470
uint8_t connection
TFT_HARD_SPI, TFT_SOFT_SPI, etc.
Definition: Adafruit_SPITFT.h:501
bool SPI_MISO_READ(void)
Read the state of the software (bitbang) SPI MISO line.
Definition: Adafruit_SPITFT.cpp:2509
void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color)
Draw a horizontal line on the display. Self-contained and provides its own transaction as needed (see...
Definition: Adafruit_SPITFT.cpp:1869
void writeFillRectPreclipped(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
A lower-level version of writeFillRect(). This version requires all inputs are in-bounds, that width and height are positive, and no part extends offscreen. NO EDGE CLIPPING OR REJECTION IS PERFORMED. If higher-level graphics primitives are written to handle their own clipping earlier in the drawing process, this can avoid unnecessary function calls and repeated clipping operations in the lower-level functions.
Definition: Adafruit_SPITFT.cpp:1757
int16_t _cs
Chip select pin # (or -1)
Definition: Adafruit_SPITFT.h:503
void invertDisplay(bool i)
Invert the colors of the display (if supported by hardware). Self-contained, no transaction setup req...
Definition: Adafruit_SPITFT.cpp:2011
tftBusWidth
Definition: Adafruit_SPITFT.h:70
void dmaWait(void)
Wait for the last DMA transfer in a prior non-blocking writePixels() call to complete. This does nothing if DMA is not enabled, and is not needed if blocking writePixels() was used (as is the default case).
Definition: Adafruit_SPITFT.cpp:1272
void setSPISpeed(uint32_t freq)
Allow changing the SPI clock speed after initialization.
Definition: Adafruit_SPITFT.cpp:902
void drawRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], int16_t w, int16_t h)
Draw a PROGMEM-resident 16-bit image (RGB 5/6/5) at the specified (x,y) position. For 16-bit display ...
Definition: Adafruit_GFX.cpp:1381
void SPI_CS_LOW(void)
Set the chip-select line LOW. Does NOT check whether CS pin is set (>=0), that should be handled in c...
Definition: Adafruit_SPITFT.h:292
struct Adafruit_SPITFT::@0 hwspi
Hardware SPI values.
void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)
Draw a vertical line on the display. Self-contained and provides its own transaction as needed (see w...
Definition: Adafruit_SPITFT.cpp:1910
void writeLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)
Write a line using horizontal or vertical runs where possible. Not self-contained; should follow a st...
Definition: Adafruit_SPITFT.cpp:965
void pushColor(uint16_t color)
Essentially writePixel() with a transaction around it. I don't think this is in use by any of our cod...
Definition: Adafruit_SPITFT.cpp:1943
int16_t _ystart
Internal framebuffer Y offset.
Definition: Adafruit_SPITFT.h:507
void SPI_SCK_LOW(void)
Set the software (bitbang) SPI SCK line LOW.
Definition: Adafruit_SPITFT.cpp:2489
int16_t _rst
Reset pin # (or -1)
Definition: Adafruit_SPITFT.h:502
void SPI_MOSI_HIGH(void)
Set the software (bitbang) SPI MOSI line HIGH.
Definition: Adafruit_SPITFT.cpp:2432
void sendCommand16(uint16_t commandWord, const uint8_t *dataBytes=NULL, uint8_t numDataBytes=0)
Adafruit_SPITFT sendCommand16 handles complete sending of commands and data for 16-bit parallel displ...
Definition: Adafruit_SPITFT.cpp:2105
void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
Draw a filled rectangle to the display. Self-contained and provides its own transaction as needed (se...
Definition: Adafruit_SPITFT.cpp:1811
uint32_t _mode
SPI data mode (transactions or no)
Definition: Adafruit_SPITFT.h:398
void writeCommand(uint8_t cmd)
Write a single command byte to the display. Chip-select and transaction must have been previously set...
Definition: Adafruit_SPITFT.cpp:2290
void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
Draw a filled rectangle to the display. Not self-contained; should follow startWrite(). Typically used by higher-level graphics primitives; user code shouldn't need to call this and is likely to use the self-contained fillRect() instead. writeFillRect() performs its own edge clipping and rejection; see writeFillRectPreclipped() for a more 'raw' implementation.
Definition: Adafruit_SPITFT.cpp:1625
bool dmaBusy(void) const
Check if DMA transfer is active. Always returts false if DMA is not enabled.
Definition: Adafruit_SPITFT.cpp:1292
void SPI_DC_HIGH(void)
Set the data/command line HIGH (data mode).
Definition: Adafruit_SPITFT.h:311
int16_t _miso
MISO pin #.
Definition: Adafruit_SPITFT.h:425
void SPI_CS_HIGH(void)
Set the chip-select line HIGH. Does NOT check whether CS pin is set (>=0), that should be handled in ...
Definition: Adafruit_SPITFT.h:270
uint16_t read16(void)
Read a single 16-bit value from the display. Chip-select and transaction must have been previously se...
Definition: Adafruit_SPITFT.cpp:2403
volatile ADAGFX_PORT_t * PORTreg_t
PORT register type.
Definition: Adafruit_SPITFT.h:33
SPIClass * _spi
SPI class pointer.
Definition: Adafruit_SPITFT.h:392
struct Adafruit_SPITFT::@1 swspi
Software SPI values.
void SPI_MOSI_LOW(void)
Set the software (bitbang) SPI MOSI line LOW.
Definition: Adafruit_SPITFT.cpp:2451
Adafruit_SPITFT is an intermediary class between Adafruit_GFX and various hardware-specific subclasse...
Definition: Adafruit_SPITFT.h:97
void drawPixel(int16_t x, int16_t y, uint16_t color)
Draw a single pixel to the display at requested coordinates. Self-contained and provides its own tran...
Definition: Adafruit_SPITFT.cpp:1781
void spiWrite(uint8_t b)
Issue a single 8-bit value to the display. Chip-select, transaction and data/command selection must h...
Definition: Adafruit_SPITFT.cpp:2247
uint16_t color565(uint8_t r, uint8_t g, uint8_t b)
Given 8-bit red, green and blue values, return a 'packed' 16-bit color value in '565' RGB format (5 b...
Definition: Adafruit_SPITFT.cpp:2027
void SPI_DC_LOW(void)
Set the data/command line LOW (command mode).
Definition: Adafruit_SPITFT.h:330
void endWrite(void)
Call after issuing command(s) or data to display. Performs chip-deselect (if required) and ends an SP...
Definition: Adafruit_SPITFT.cpp:928
uint8_t invertOnCommand
Command to enable invert mode.
Definition: Adafruit_SPITFT.h:508
int16_t _dc
Data/command pin #.
Definition: Adafruit_SPITFT.h:504
void startWrite(void)
Call before issuing command(s) or data to display. Performs chip-select (if required) and starts an S...
Definition: Adafruit_SPITFT.cpp:916
void TFT_WR_STROBE(void)
Set the WR line LOW, then HIGH. Used for parallel-connected interfaces when writing data...
Definition: Adafruit_SPITFT.cpp:2651
bool wide
If true, is 16-bit interface.
Definition: Adafruit_SPITFT.h:471
int16_t _d0
Data pin 0 #.
Definition: Adafruit_SPITFT.h:468
void SPI_END_TRANSACTION(void)
End an SPI transaction if using the hardware SPI interface to the display. No action is taken if the ...
Definition: Adafruit_SPITFT.cpp:2230
int16_t _xstart
Internal framebuffer X offset.
Definition: Adafruit_SPITFT.h:506
int16_t _mosi
MOSI pin #.
Definition: Adafruit_SPITFT.h:424
int16_t _wr
Write strobe pin #.
Definition: Adafruit_SPITFT.h:469
void initSPI(uint32_t freq=0, uint8_t spiMode=SPI_MODE0)
Configure microcontroller pins for TFT interfacing. Typically called by a subclass' begin() function...
Definition: Adafruit_SPITFT.cpp:531
virtual void begin(uint32_t freq)=0
Display-specific initialization function.
void TFT_RD_HIGH(void)
Set the RD line HIGH. Used for parallel-connected interfaces when reading data.
Definition: Adafruit_SPITFT.cpp:2675
void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color)
Draw a horizontal line on the display. Performs edge clipping and rejection. Not self-contained; shou...
Definition: Adafruit_SPITFT.cpp:1677
void SPI_WRITE32(uint32_t l)
Issue a single 32-bit value to the display. Chip-select, transaction and data/command selection must ...
Definition: Adafruit_SPITFT.cpp:2587
uint8_t spiRead(void)
Read a single 8-bit value from the display. Chip-select and transaction must have been previously set...
Definition: Adafruit_SPITFT.cpp:2306
uint8_t readcommand8(uint8_t commandByte, uint8_t index=0)
Read 8 bits of data from display configuration memory (not RAM). This is highly undocumented/supporte...
Definition: Adafruit_SPITFT.cpp:2141
void swapBytes(uint16_t *src, uint32_t len, uint16_t *dest=NULL)
Swap bytes in an array of pixels; converts little-to-big or big-to-little endian. Used by writePixels...
Definition: Adafruit_SPITFT.cpp:1041
int16_t _sck
SCK pin #.
Definition: Adafruit_SPITFT.h:426
void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)
Draw a vertical line on the display. Performs edge clipping and rejection. Not self-contained; should...
Definition: Adafruit_SPITFT.cpp:1713