18 #include <avr/pgmspace.h> 19 #elif defined(ESP8266) 23 #include "pins_arduino.h" 24 #include "wiring_private.h" 31 #ifdef SPI_HAS_TRANSACTION 32 static inline void spi_begin(
void) __attribute__((always_inline));
35 #if defined (ARDUINO_ARCH_ARC32) 37 SPI.beginTransaction(SPISettings(16000000, MSBFIRST, SPI_MODE0));
40 SPI.beginTransaction(SPISettings(24000000, MSBFIRST, SPI_MODE0));
43 static inline void spi_end(
void) __attribute__((always_inline));
44 static inline void spi_end(
void)
87 #ifndef SPI_HAS_TRANSACTION 88 uint8_t backupSPCR = SPCR;
92 while (!(SPSR & _BV(SPIF)));
93 #ifndef SPI_HAS_TRANSACTION 102 #if defined(ESP8266) || defined (ARDUINO_ARCH_ARC32) 103 for (uint8_t bit = 0x80; bit; bit >>= 1)
107 digitalWrite(_mosi, HIGH);
111 digitalWrite(_mosi, LOW);
113 digitalWrite(_sclk, HIGH);
114 digitalWrite(_sclk, LOW);
118 for (uint8_t bit = 0x80; bit; bit >>= 1)
123 *mosiport |= mosipinmask;
128 *mosiport &= ~mosipinmask;
131 *clkport |= clkpinmask;
133 *clkport &= ~clkpinmask;
142 #if defined (USE_FAST_PINIO) 143 *dcport &= ~dcpinmask;
144 *csport &= ~cspinmask;
146 digitalWrite(_dc, LOW);
147 digitalWrite(_sclk, LOW);
148 digitalWrite(_cs, LOW);
153 #if defined (USE_FAST_PINIO) 154 *csport |= cspinmask;
156 digitalWrite(_cs, HIGH);
163 #if defined (USE_FAST_PINIO) 164 *dcport |= dcpinmask;
165 *csport &= ~cspinmask;
167 digitalWrite(_dc, HIGH);
168 digitalWrite(_cs, LOW);
173 #if defined (USE_FAST_PINIO) 174 *csport |= cspinmask;
176 digitalWrite(_cs, HIGH);
194 uint8_t numCommands, numArgs;
198 while (numCommands--)
202 ms = numArgs &
DELAY;
212 if (ms == 255) ms = 500;
223 pinMode(_rst, OUTPUT);
224 digitalWrite(_rst, LOW);
227 pinMode(_dc, OUTPUT);
228 pinMode(_cs, OUTPUT);
230 #if defined (USE_FAST_PINIO) 231 csport = portOutputRegister(digitalPinToPort(_cs));
232 cspinmask = digitalPinToBitMask(_cs);
233 dcport = portOutputRegister(digitalPinToPort(_dc));
234 dcpinmask = digitalPinToBitMask(_dc);
241 #ifndef SPI_HAS_TRANSACTION 242 SPI.setBitOrder(MSBFIRST);
243 SPI.setDataMode(SPI_MODE0);
245 SPI.setClockDivider(SPI_CLOCK_DIV2);
247 #elif defined(TEENSYDUINO) 248 SPI.setClockDivider(SPI_CLOCK_DIV2);
249 #elif defined (__arm__) 250 SPI.setClockDivider(11);
256 pinMode(_sclk, OUTPUT);
257 pinMode(_mosi, OUTPUT);
258 pinMode(_miso, INPUT);
260 #if defined (USE_FAST_PINIO) 261 clkport = portOutputRegister(digitalPinToPort(_sclk));
262 clkpinmask = digitalPinToBitMask(_sclk);
263 mosiport = portOutputRegister(digitalPinToPort(_mosi));
264 mosipinmask = digitalPinToBitMask(_mosi);
265 *clkport &= ~clkpinmask;
266 *mosiport &= ~mosipinmask;
273 digitalWrite(_rst, HIGH);
275 digitalWrite(_rst, LOW);
277 digitalWrite(_rst, HIGH);
433 #if defined(USE_FAST_PINIO) 434 *dcport |= dcpinmask;
435 *csport &= ~cspinmask;
437 digitalWrite(_dc, HIGH);
438 digitalWrite(_cs, LOW);
444 #if defined(USE_FAST_PINIO) 445 *csport |= cspinmask;
447 digitalWrite(_cs, HIGH);
456 if ((x < 0) ||(x >=
_width) || (y < 0) || (y >=
_height))
return;
461 #if defined(USE_FAST_PINIO) 462 *dcport |= dcpinmask;
463 *csport &= ~cspinmask;
465 digitalWrite(_dc, HIGH);
466 digitalWrite(_cs, LOW);
472 #if defined(USE_FAST_PINIO) 473 *csport |= cspinmask;
475 digitalWrite(_cs, HIGH);
495 uint8_t hi = color >> 8, lo = color;
497 #if defined(USE_FAST_PINIO) 498 *dcport |= dcpinmask;
499 *csport &= ~cspinmask;
501 digitalWrite(_dc, HIGH);
502 digitalWrite(_cs, LOW);
511 #if defined(USE_FAST_PINIO) 512 *csport |= cspinmask;
514 digitalWrite(_cs, HIGH);
531 uint8_t hi = color >> 8, lo = color;
532 #if defined(USE_FAST_PINIO) 533 *dcport |= dcpinmask;
534 *csport &= ~cspinmask;
536 digitalWrite(_dc, HIGH);
537 digitalWrite(_cs, LOW);
544 #if defined(USE_FAST_PINIO) 545 *csport |= cspinmask;
547 digitalWrite(_cs, HIGH);
570 uint8_t hi = color >> 8, lo = color;
572 #if defined(USE_FAST_PINIO) 573 *dcport |= dcpinmask;
574 *csport &= ~cspinmask;
576 digitalWrite(_dc, HIGH);
577 digitalWrite(_cs, LOW);
588 #if defined(USE_FAST_PINIO) 589 *csport |= cspinmask;
591 digitalWrite(_cs, HIGH);
601 return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
605 #define MADCTL_MY 0x80 606 #define MADCTL_MX 0x40 607 #define MADCTL_MV 0x20 608 #define MADCTL_ML 0x10 609 #define MADCTL_RGB 0x00 610 #define MADCTL_BGR 0x08 611 #define MADCTL_MH 0x04 663 #if defined (__AVR__) 664 #ifndef SPI_HAS_TRANSACTION 665 uint8_t backupSPCR = SPCR;
669 while (!(SPSR & _BV(SPIF)));
672 #ifndef SPI_HAS_TRANSACTION 676 r = SPI.transfer(0x00);
683 for (uint8_t
i=0;
i<8;
i++)
685 digitalWrite(_sclk, LOW);
686 digitalWrite(_sclk, HIGH);
688 if (digitalRead(_miso))
699 digitalWrite(_dc, HIGH);
700 digitalWrite(_cs, LOW);
702 digitalWrite(_cs, HIGH);
711 digitalWrite(_dc, LOW);
712 digitalWrite(_cs, LOW);
714 digitalWrite(_dc, HIGH);
716 digitalWrite(_cs, HIGH);
718 digitalWrite(_dc, LOW);
719 digitalWrite(_sclk, LOW);
720 digitalWrite(_cs, LOW);
723 digitalWrite(_dc, HIGH);
725 digitalWrite(_cs, HIGH);
void writecommand(uint8_t c)
void drawPixel(int16_t x, int16_t y, uint16_t color)
Adafruit_ILI9341(int8_t _CS, int8_t _DC, int8_t _MOSI, int8_t _SCLK, int8_t _RST, int8_t _MISO)
void pushColor(uint16_t color)
uint16_t color565(uint8_t r, uint8_t g, uint8_t b)
void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color)
uint8_t readcommand8(uint8_t reg, uint8_t index=0)
#define ILI9341_TFTHEIGHT
void setRotation(uint8_t r)
void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)
void writedata(uint8_t d)
void setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
void fillScreen(uint16_t color)
void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
void commandList(uint8_t *addr)
void invertDisplay(boolean i)
#define pgm_read_byte(addr)