forked from Bodmer/TFT_eSPI
@@ -26,6 +26,15 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined (TFT_PARALLEL_8_BIT)
|
||||||
|
// Volatile for register reads:
|
||||||
|
volatile uint32_t* _spi_cmd = (volatile uint32_t*)(SPI_CMD_REG(SPI_PORT));
|
||||||
|
volatile uint32_t* _spi_user = (volatile uint32_t*)(SPI_USER_REG(SPI_PORT));
|
||||||
|
// Register writes only:
|
||||||
|
uint32_t* _spi_mosi_dlen = (uint32_t*)(SPI_MOSI_DLEN_REG(SPI_PORT));
|
||||||
|
uint32_t* _spi_w = (uint32_t*)(SPI_W0_REG(SPI_PORT));
|
||||||
|
#endif
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
||||||
#if defined (TFT_SDA_READ) && !defined (TFT_PARALLEL_8_BIT)
|
#if defined (TFT_SDA_READ) && !defined (TFT_PARALLEL_8_BIT)
|
||||||
////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -39,6 +48,7 @@ void TFT_eSPI::begin_SDA_Read(void)
|
|||||||
pinMatrixOutDetach(TFT_MOSI, false, false);
|
pinMatrixOutDetach(TFT_MOSI, false, false);
|
||||||
pinMode(TFT_MOSI, INPUT);
|
pinMode(TFT_MOSI, INPUT);
|
||||||
pinMatrixInAttach(TFT_MOSI, VSPIQ_IN_IDX, false);
|
pinMatrixInAttach(TFT_MOSI, VSPIQ_IN_IDX, false);
|
||||||
|
SET_BUS_READ_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************************
|
/***************************************************************************************
|
||||||
@@ -51,6 +61,7 @@ void TFT_eSPI::end_SDA_Read(void)
|
|||||||
pinMatrixOutAttach(TFT_MOSI, VSPID_OUT_IDX, false, false);
|
pinMatrixOutAttach(TFT_MOSI, VSPID_OUT_IDX, false, false);
|
||||||
pinMode(TFT_MISO, INPUT);
|
pinMode(TFT_MISO, INPUT);
|
||||||
pinMatrixInAttach(TFT_MISO, VSPIQ_IN_IDX, false);
|
pinMatrixInAttach(TFT_MISO, VSPIQ_IN_IDX, false);
|
||||||
|
SET_BUS_WRITE_MODE;
|
||||||
}
|
}
|
||||||
////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
||||||
#endif // #if defined (TFT_SDA_READ)
|
#endif // #if defined (TFT_SDA_READ)
|
||||||
@@ -183,42 +194,47 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len)
|
|||||||
void TFT_eSPI::pushBlock(uint16_t color, uint32_t len){
|
void TFT_eSPI::pushBlock(uint16_t color, uint32_t len){
|
||||||
|
|
||||||
uint32_t color32 = (color<<8 | color >>8)<<16 | (color<<8 | color >>8);
|
uint32_t color32 = (color<<8 | color >>8)<<16 | (color<<8 | color >>8);
|
||||||
|
bool empty = true;
|
||||||
|
uint32_t* spi_w = (uint32_t*)_spi_w;
|
||||||
if (len > 31)
|
if (len > 31)
|
||||||
{
|
{
|
||||||
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), 511);
|
*_spi_mosi_dlen = 511;
|
||||||
|
spi_w[0] = color32;
|
||||||
|
spi_w[1] = color32;
|
||||||
|
spi_w[2] = color32;
|
||||||
|
spi_w[3] = color32;
|
||||||
|
spi_w[4] = color32;
|
||||||
|
spi_w[5] = color32;
|
||||||
|
spi_w[6] = color32;
|
||||||
|
spi_w[7] = color32;
|
||||||
|
spi_w[8] = color32;
|
||||||
|
spi_w[9] = color32;
|
||||||
|
spi_w[10] = color32;
|
||||||
|
spi_w[11] = color32;
|
||||||
|
spi_w[12] = color32;
|
||||||
|
spi_w[13] = color32;
|
||||||
|
spi_w[14] = color32;
|
||||||
|
spi_w[15] = color32;
|
||||||
while(len>31)
|
while(len>31)
|
||||||
{
|
{
|
||||||
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
|
while ((*_spi_cmd)&SPI_USR);
|
||||||
WRITE_PERI_REG(SPI_W0_REG(SPI_PORT), color32);
|
*_spi_cmd = SPI_USR;
|
||||||
WRITE_PERI_REG(SPI_W1_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W2_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W3_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W4_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W5_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W6_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W7_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W8_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W9_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W10_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W11_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W12_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W13_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W14_REG(SPI_PORT), color32);
|
|
||||||
WRITE_PERI_REG(SPI_W15_REG(SPI_PORT), color32);
|
|
||||||
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR);
|
|
||||||
len -= 32;
|
len -= 32;
|
||||||
}
|
}
|
||||||
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
|
empty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (len)
|
if (len)
|
||||||
{
|
{
|
||||||
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), (len << 4) - 1);
|
if(empty) {
|
||||||
for (uint32_t i=0; i <= (len<<1); i+=4) WRITE_PERI_REG(SPI_W0_REG(SPI_PORT) + i, color32);
|
for (uint32_t i=0; i <= len; i+=2) *spi_w++ = color32;
|
||||||
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR);
|
}
|
||||||
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
|
len = (len << 4) - 1;
|
||||||
|
while (*_spi_cmd&SPI_USR);
|
||||||
|
*_spi_mosi_dlen = len;
|
||||||
|
*_spi_cmd = SPI_USR;
|
||||||
}
|
}
|
||||||
|
while ((*_spi_cmd)&SPI_USR); // Move to later in code to use transmit time usefully?
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************************
|
/***************************************************************************************
|
||||||
|
@@ -13,8 +13,13 @@
|
|||||||
#include "driver/spi_master.h"
|
#include "driver/spi_master.h"
|
||||||
|
|
||||||
// Processor specific code used by SPI bus transaction startWrite and endWrite functions
|
// Processor specific code used by SPI bus transaction startWrite and endWrite functions
|
||||||
#define SET_BUS_WRITE_MODE // Not used
|
#if (TFT_SPI_MODE == SPI_MODE1) || (TFT_SPI_MODE == SPI_MODE2)
|
||||||
#define SET_BUS_READ_MODE // Not used
|
#define SET_BUS_WRITE_MODE *_spi_user = SPI_USR_MOSI | SPI_CK_OUT_EDGE
|
||||||
|
#define SET_BUS_READ_MODE *_spi_user = SPI_USR_MOSI | SPI_USR_MISO | SPI_DOUTDIN | SPI_CK_OUT_EDGE
|
||||||
|
#else
|
||||||
|
#define SET_BUS_WRITE_MODE *_spi_user = SPI_USR_MOSI
|
||||||
|
#define SET_BUS_READ_MODE *_spi_user = SPI_USR_MOSI | SPI_USR_MISO | SPI_DOUTDIN
|
||||||
|
#endif
|
||||||
|
|
||||||
// SUPPORT_TRANSACTIONS is mandatory for ESP32 so the hal mutex is toggled
|
// SUPPORT_TRANSACTIONS is mandatory for ESP32 so the hal mutex is toggled
|
||||||
#if !defined (SUPPORT_TRANSACTIONS)
|
#if !defined (SUPPORT_TRANSACTIONS)
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
#ifndef _TFT_eSPIH_
|
#ifndef _TFT_eSPIH_
|
||||||
#define _TFT_eSPIH_
|
#define _TFT_eSPIH_
|
||||||
|
|
||||||
#define TFT_ESPI_VERSION "2.3.53"
|
#define TFT_ESPI_VERSION "2.3.54"
|
||||||
|
|
||||||
// Bit level feature flags
|
// Bit level feature flags
|
||||||
// Bit 0 set: viewport capability
|
// Bit 0 set: viewport capability
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "TFT_eSPI",
|
"name": "TFT_eSPI",
|
||||||
"version": "2.3.52",
|
"version": "2.3.54",
|
||||||
"keywords": "Arduino, tft, ePaper, display, STM32, ESP8266, NodeMCU, ESP32, M5Stack, ILI9341, ST7735, ILI9163, S6D02A1, ILI9486, ST7789, RM68140",
|
"keywords": "Arduino, tft, ePaper, display, STM32, ESP8266, NodeMCU, ESP32, M5Stack, ILI9341, ST7735, ILI9163, S6D02A1, ILI9486, ST7789, RM68140",
|
||||||
"description": "A TFT and ePaper SPI graphics library with optimisation for ESP8266, ESP32 and STM32",
|
"description": "A TFT and ePaper SPI graphics library with optimisation for ESP8266, ESP32 and STM32",
|
||||||
"repository":
|
"repository":
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
name=TFT_eSPI
|
name=TFT_eSPI
|
||||||
version=2.3.52
|
version=2.3.54
|
||||||
author=Bodmer
|
author=Bodmer
|
||||||
maintainer=Bodmer
|
maintainer=Bodmer
|
||||||
sentence=TFT graphics library for Arduino processors with performance optimisation for STM32, ESP8266 and ESP32
|
sentence=TFT graphics library for Arduino processors with performance optimisation for STM32, ESP8266 and ESP32
|
||||||
|
Reference in New Issue
Block a user