20#ifndef _ADAFRUIT_SPITFT_H_
21#define _ADAFRUIT_SPITFT_H_
23#if !defined(__AVR_ATtiny85__)
33#elif defined(ARDUINO_STM32_FEATHER)
37#if defined(ARDUINO_ARCH_SAMD)
41#define HAS_PORT_SET_CLR
42#elif defined(CORE_TEENSY)
44#if defined(__IMXRT1052__) || defined(__IMXRT1062__)
51#define HAS_PORT_SET_CLR
69#define DEFAULT_SPI_FREQ 8000000L
71#define DEFAULT_SPI_FREQ 16000000L
74#if defined(ADAFRUIT_PYPORTAL) || defined(ADAFRUIT_PYPORTAL_M4_TITANO) || \
75 defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || \
76 defined(ADAFRUIT_PYGAMER_M4_EXPRESS) || \
77 defined(ADAFRUIT_MONSTER_M4SK_EXPRESS) || defined(NRF52_SERIES) || \
78 defined(ADAFRUIT_CIRCUITPLAYGROUND_M0)
90#if defined(USE_SPI_DMA) && (defined(__SAMD51__) || defined(ARDUINO_SAMD_ZERO))
91#include <Adafruit_ZeroDMA.h>
130 Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t cs, int8_t dc, int8_t mosi,
131 int8_t sck, int8_t rst = -1, int8_t miso = -1);
146 int8_t dc, int8_t rst = -1);
155 int8_t wr, int8_t dc, int8_t cs = -1, int8_t rst = -1,
170 virtual void begin(uint32_t freq) = 0;
196 void initSPI(uint32_t freq = 0, uint8_t spiMode = SPI_MODE0);
202 void sendCommand(uint8_t commandByte, uint8_t *dataBytes,
203 uint8_t numDataBytes);
204 void sendCommand(uint8_t commandByte,
const uint8_t *dataBytes = NULL,
205 uint8_t numDataBytes = 0);
206 void sendCommand16(uint16_t commandWord,
const uint8_t *dataBytes = NULL,
207 uint8_t numDataBytes = 0);
208 uint8_t
readcommand8(uint8_t commandByte, uint8_t index = 0);
217 void writePixel(int16_t x, int16_t y, uint16_t color);
218 void writePixels(uint16_t *colors, uint32_t len,
bool block =
true,
219 bool bigEndian =
false);
220 void writeColor(uint16_t color, uint32_t len);
221 void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h,
223 void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
224 void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
231 int16_t h, uint16_t color);
237 void swapBytes(uint16_t *src, uint32_t len, uint16_t *dest = NULL);
243 void drawPixel(int16_t x, int16_t y, uint16_t color);
244 void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
245 void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
246 void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
253 void drawRGBBitmap(int16_t x, int16_t y, uint16_t *pcolors, int16_t w,
257 uint16_t
color565(uint8_t r, uint8_t g, uint8_t b);
291#if defined(USE_FAST_PINIO)
292#if defined(HAS_PORT_SET_CLR)
302 digitalWrite(
_cs, HIGH);
313#if defined(USE_FAST_PINIO)
314#if defined(HAS_PORT_SET_CLR)
324 digitalWrite(
_cs, LOW);
332#if defined(USE_FAST_PINIO)
333#if defined(HAS_PORT_SET_CLR)
343 digitalWrite(
_dc, HIGH);
351#if defined(USE_FAST_PINIO)
352#if defined(HAS_PORT_SET_CLR)
362 digitalWrite(
_dc, LOW);
391#if defined(USE_FAST_PINIO)
392#if defined(HAS_PORT_SET_CLR)
402#if defined(__cplusplus) && (__cplusplus >= 201100)
407#if defined(SPI_HAS_TRANSACTION)
415#if defined(USE_FAST_PINIO)
417#if defined(HAS_PORT_SET_CLR)
422#if !defined(KINETISK)
434#if !defined(KINETISK)
443#if defined(USE_FAST_PINIO)
445#if defined(__IMXRT1052__) || defined(__IMXRT1062__)
452#if defined(HAS_PORT_SET_CLR)
455#if defined(__IMXRT1052__) || defined(__IMXRT1062__)
466#if !defined(KINETISK)
487#if defined(__cplusplus) && (__cplusplus >= 201100)
490#if defined(USE_SPI_DMA) && \
491 (defined(__SAMD51__) || \
492 defined(ARDUINO_SAMD_ZERO))
502#if defined(USE_FAST_PINIO)
503#if defined(HAS_PORT_SET_CLR)
504#if !defined(KINETISK)
uint8_t ADAGFX_PORT_t
PORT values are 8-bit.
Definition Adafruit_SPITFT.h:31
tftBusWidth
Definition Adafruit_SPITFT.h:103
@ tft8bitbus
Definition Adafruit_SPITFT.h:103
@ tft16bitbus
Definition Adafruit_SPITFT.h:103
volatile ADAGFX_PORT_t * PORTreg_t
PORT register type.
Definition Adafruit_SPITFT.h:66
class HardwareSPI SPIClass
SPI is a bit odd on WICED.
Definition Adafruit_SPITFT.h:34
Definition Adafruit_GFX.h:15
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:1001
Adafruit_SPITFT is an intermediary class between Adafruit_GFX and various hardware-specific subclasse...
Definition Adafruit_SPITFT.h:120
void SPI_MOSI_LOW(void)
Set the software (bitbang) SPI MOSI line LOW.
Definition Adafruit_SPITFT.cpp:2281
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:2116
ADAGFX_PORT_t rdPinMaskSet
Bitmask for read strobe SET (OR)
Definition Adafruit_SPITFT.h:478
int8_t _mosi
MOSI pin #.
Definition Adafruit_SPITFT.h:438
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:1507
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:962
struct Adafruit_SPITFT::@1::@5 tft8
Parallel interface settings.
void SPI_SCK_HIGH(void)
Set the software (bitbang) SPI SCK line HIGH.
Definition Adafruit_SPITFT.cpp:2304
void SPI_SCK_LOW(void)
Set the software (bitbang) SPI SCK line LOW.
Definition Adafruit_SPITFT.cpp:2331
void TFT_RD_LOW(void)
Set the RD line LOW. Used for parallel-connected interfaces when reading data.
Definition Adafruit_SPITFT.cpp:2528
int8_t _dc
Data/command pin #.
Definition Adafruit_SPITFT.h:518
DmacDescriptor * dptr
1st descriptor
Definition Adafruit_SPITFT.h:494
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.
int8_t _miso
MISO pin #.
Definition Adafruit_SPITFT.h:439
SPISettings settings
SPI transaction settings.
Definition Adafruit_SPITFT.h:408
int16_t _ystart
Internal framebuffer Y offset.
Definition Adafruit_SPITFT.h:521
PORTreg_t sckPortSet
PORT register for SCK SET.
Definition Adafruit_SPITFT.h:420
SPIClass * _spi
SPI class pointer.
Definition Adafruit_SPITFT.h:406
PORTreg_t mosiPortClr
PORT register for MOSI CLEAR.
Definition Adafruit_SPITFT.h:419
void invertDisplay(bool i)
Invert the colors of the display (if supported by hardware). Self-contained, no transaction setup req...
Definition Adafruit_SPITFT.cpp:1840
uint16_t maxFillLen
Max pixels per DMA xfer.
Definition Adafruit_SPITFT.h:497
volatile uint8_t * writePort
PORT register for DATA WRITE.
Definition Adafruit_SPITFT.h:449
volatile uint32_t * readPort
PORT (PIN) register for DATA READ.
Definition Adafruit_SPITFT.h:447
ADAGFX_PORT_t csPinMaskSet
Bitmask for chip select SET (OR)
Definition Adafruit_SPITFT.h:509
ADAGFX_PORT_t misoPinMask
Bitmask for MISO.
Definition Adafruit_SPITFT.h:435
ADAGFX_PORT_t dcPinMaskClr
Bitmask for data/command CLEAR (AND)
Definition Adafruit_SPITFT.h:512
DmacDescriptor * descriptor
Allocated descriptor list.
Definition Adafruit_SPITFT.h:495
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:1165
ADAGFX_PORT_t sckPinMask
Bitmask for SCK.
Definition Adafruit_SPITFT.h:424
int8_t _rd
Read strobe pin # (or -1)
Definition Adafruit_SPITFT.h:484
ADAGFX_PORT_t wrPinMask
Bitmask for write strobe.
Definition Adafruit_SPITFT.h:467
int16_t _xstart
Internal framebuffer X offset.
Definition Adafruit_SPITFT.h:520
ADAGFX_PORT_t sckPinMaskSet
Bitmask for SCK SET (OR bitmask)
Definition Adafruit_SPITFT.h:431
void setSPISpeed(uint32_t freq)
Allow changing the SPI clock speed after initialization.
Definition Adafruit_SPITFT.cpp:898
uint16_t lastFillColor
Last color used w/fill.
Definition Adafruit_SPITFT.h:498
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:2059
int8_t _rst
Reset pin # (or -1)
Definition Adafruit_SPITFT.h:516
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:1773
PORTreg_t rdPort
PORT register for read strobe.
Definition Adafruit_SPITFT.h:475
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:1641
int8_t _d0
Data pin 0 #.
Definition Adafruit_SPITFT.h:482
PORTreg_t csPortSet
PORT register for chip select SET.
Definition Adafruit_SPITFT.h:393
PORTreg_t rdPortSet
PORT register for read strobe SET.
Definition Adafruit_SPITFT.h:464
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:1611
ADAGFX_PORT_t dcPinMaskSet
Bitmask for data/command SET (OR)
Definition Adafruit_SPITFT.h:511
ADAGFX_PORT_t rdPinMask
Bitmask for read strobe.
Definition Adafruit_SPITFT.h:469
volatile uint8_t * readPort
PORT (PIN) register for DATA READ.
Definition Adafruit_SPITFT.h:450
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:1970
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:1856
uint32_t _freq
SPI bitrate (if no SPI transactions)
Definition Adafruit_SPITFT.h:410
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:924
ADAGFX_PORT_t mosiPinMask
Bitmask for MOSI.
Definition Adafruit_SPITFT.h:423
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:2132
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,...
Definition Adafruit_SPITFT.cpp:1587
uint8_t invertOffCommand
Command to disable invert mode.
Definition Adafruit_SPITFT.h:523
PORTreg_t sckPortClr
PORT register for SCK CLEAR.
Definition Adafruit_SPITFT.h:421
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:2076
uint32_t _mode
SPI data mode (transactions or no)
Definition Adafruit_SPITFT.h:412
struct Adafruit_SPITFT::@1::@4 swspi
Software SPI values.
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:945
volatile uint32_t * writePort
PORT register for DATA WRITE.
Definition Adafruit_SPITFT.h:446
ADAGFX_PORT_t wrPinMaskClr
Bitmask for write strobe CLEAR (AND)
Definition Adafruit_SPITFT.h:477
PORTreg_t wrPortClr
PORT register for write strobe CLEAR.
Definition Adafruit_SPITFT.h:463
virtual void begin(uint32_t freq)=0
Display-specific initialization function.
struct Adafruit_SPITFT::@1::@3 hwspi
Hardware SPI values.
Adafruit_ZeroDMA dma
DMA instance.
Definition Adafruit_SPITFT.h:493
int8_t _wr
Write strobe pin #.
Definition Adafruit_SPITFT.h:483
void SPI_MOSI_HIGH(void)
Set the software (bitbang) SPI MOSI line HIGH.
Definition Adafruit_SPITFT.cpp:2258
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()....
Definition Adafruit_SPITFT.cpp:1455
PORTreg_t dcPortSet
PORT register for data/command SET.
Definition Adafruit_SPITFT.h:395
volatile uint32_t * dirClr
PORT byte data direction CLEAR.
Definition Adafruit_SPITFT.h:457
uint8_t onePixelBuf
For hi==lo fill.
Definition Adafruit_SPITFT.h:500
ADAGFX_PORT_t csPinMaskClr
Bitmask for chip select CLEAR (AND)
Definition Adafruit_SPITFT.h:510
void SPI_DC_HIGH(void)
Set the data/command line HIGH (data mode).
Definition Adafruit_SPITFT.h:331
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:527
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:2431
PORTreg_t dcPortClr
PORT register for data/command CLEAR.
Definition Adafruit_SPITFT.h:396
volatile uint8_t * portDir
PORT direction register.
Definition Adafruit_SPITFT.h:473
PORTreg_t csPortClr
PORT register for chip select CLEAR.
Definition Adafruit_SPITFT.h:394
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:1543
ADAGFX_PORT_t sckPinMaskClr
Bitmask for SCK CLEAR (AND)
Definition Adafruit_SPITFT.h:432
bool SPI_MISO_READ(void)
Read the state of the software (bitbang) SPI MISO line.
Definition Adafruit_SPITFT.cpp:2359
ADAGFX_PORT_t rdPinMaskClr
Bitmask for read strobe CLEAR (AND)
Definition Adafruit_SPITFT.h:479
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:1795
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:2215
uint16_t * pixelBuf[2]
Working buffers.
Definition Adafruit_SPITFT.h:496
PORTreg_t rdPortClr
PORT register for read strobe CLEAR.
Definition Adafruit_SPITFT.h:465
Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t cs, int8_t dc, int8_t mosi, int8_t sck, int8_t rst=-1, int8_t miso=-1)
Adafruit_SPITFT constructor for software (bitbang) SPI.
Definition Adafruit_SPITFT.cpp:117
PORTreg_t wrPort
PORT register for write strobe.
Definition Adafruit_SPITFT.h:474
~Adafruit_SPITFT()
Definition Adafruit_SPITFT.h:160
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:290
uint32_t lastFillLen
Definition Adafruit_SPITFT.h:499
bool wide
If true, is 16-bit interface.
Definition Adafruit_SPITFT.h:485
void TFT_WR_STROBE(void)
Set the WR line LOW, then HIGH. Used for parallel-connected interfaces when writing data.
Definition Adafruit_SPITFT.cpp:2488
volatile uint8_t * dirClr
PORT byte data direction CLEAR.
Definition Adafruit_SPITFT.h:460
ADAGFX_PORT_t mosiPinMaskClr
Bitmask for MOSI CLEAR (AND)
Definition Adafruit_SPITFT.h:430
PORTreg_t wrPortSet
PORT register for write strobe SET.
Definition Adafruit_SPITFT.h:462
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:1740
PORTreg_t dcPort
PORT register for data/command.
Definition Adafruit_SPITFT.h:399
PORTreg_t mosiPort
PORT register for MOSI.
Definition Adafruit_SPITFT.h:427
PORTreg_t sckPort
PORT register for SCK.
Definition Adafruit_SPITFT.h:428
int8_t _cs
Chip select pin # (or -1)
Definition Adafruit_SPITFT.h:517
PORTreg_t misoPort
PORT (PIN) register for MISO.
Definition Adafruit_SPITFT.h:416
uint16_t readcommand16(uint16_t addr)
Read 16 bits of data from display register. For 16-bit parallel displays only.
Definition Adafruit_SPITFT.cpp:1989
PORTreg_t mosiPortSet
PORT register for MOSI SET.
Definition Adafruit_SPITFT.h:418
void SPI_DC_LOW(void)
Set the data/command line LOW (command mode).
Definition Adafruit_SPITFT.h:350
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:912
volatile uint8_t * dirSet
PORT byte data direction SET.
Definition Adafruit_SPITFT.h:459
uint8_t invertOnCommand
Command to enable invert mode.
Definition Adafruit_SPITFT.h:522
void TFT_RD_HIGH(void)
Set the RD line HIGH. Used for parallel-connected interfaces when reading data.
Definition Adafruit_SPITFT.cpp:2512
PORTreg_t csPort
PORT register for chip select.
Definition Adafruit_SPITFT.h:398
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:2031
ADAGFX_PORT_t dcPinMask
Bitmask for data/command.
Definition Adafruit_SPITFT.h:506
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:2195
uint8_t connection
TFT_HARD_SPI, TFT_SOFT_SPI, etc.
Definition Adafruit_SPITFT.h:515
ADAGFX_PORT_t csPinMask
Bitmask for chip select.
Definition Adafruit_SPITFT.h:505
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:2229
void dmaWait(void)
Wait for the last DMA transfer in a prior non-blocking writePixels() call to complete....
Definition Adafruit_SPITFT.cpp:1144
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:1699
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:1934
volatile uint32_t * dirSet
PORT byte data direction SET.
Definition Adafruit_SPITFT.h:456
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:995
ADAGFX_PORT_t mosiPinMaskSet
Bitmask for MOSI SET (OR)
Definition Adafruit_SPITFT.h:429
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:2381
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:312
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:1867
int8_t _sck
SCK pin #.
Definition Adafruit_SPITFT.h:440
ADAGFX_PORT_t wrPinMaskSet
Bitmask for write strobe SET (OR)
Definition Adafruit_SPITFT.h:476