752 lines
26 KiB
C
752 lines
26 KiB
C
|
/*
|
||
|
*
|
||
|
* HIGH SPEED LOW LEVEL DISPLAY FUNCTIONS USING DIRECT TRANSFER MODE
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef _TFTSPI_H_
|
||
|
#define _TFTSPI_H_
|
||
|
|
||
|
#include "tftspi.h"
|
||
|
#include "spi_master_lobo.h"
|
||
|
#include "sdkconfig.h"
|
||
|
#include "stmpe610.h"
|
||
|
|
||
|
#define TOUCH_TYPE_NONE 0
|
||
|
#define TOUCH_TYPE_XPT2046 1
|
||
|
#define TOUCH_TYPE_STMPE610 2
|
||
|
|
||
|
#define TP_CALX_XPT2046 7472920
|
||
|
#define TP_CALY_XPT2046 122224794
|
||
|
|
||
|
#define TP_CALX_STMPE610 21368532
|
||
|
#define TP_CALY_STMPE610 11800144
|
||
|
|
||
|
// === Screen tft_orientation constants ===
|
||
|
#define PORTRAIT 0
|
||
|
#define LANDSCAPE 1
|
||
|
#define PORTRAIT_FLIP 2
|
||
|
#define LANDSCAPE_FLIP 3
|
||
|
|
||
|
#define DISP_TYPE_ILI9341 0
|
||
|
#define DISP_TYPE_ILI9488 1
|
||
|
#define DISP_TYPE_ST7789V 2
|
||
|
#define DISP_TYPE_ST7735 3
|
||
|
#define DISP_TYPE_ST7735R 4
|
||
|
#define DISP_TYPE_ST7735B 5
|
||
|
|
||
|
|
||
|
|
||
|
#if CONFIG_TFT_PREDEFINED_DISPLAY_TYPE == 1
|
||
|
|
||
|
// ** Set the correct configuration for ESP-WROVER-KIT v3
|
||
|
// --------------------------------------------------------
|
||
|
#define DEFAULT_DISP_TYPE DISP_TYPE_ST7789V
|
||
|
#define DEFAULT_TFT_DISPLAY_WIDTH 240
|
||
|
#define DEFAULT_TFT_DISPLAY_HEIGHT 320
|
||
|
#define DISP_COLOR_BITS_24 0x66
|
||
|
#define DEFAULT_GAMMA_CURVE 0
|
||
|
#define DEFAULT_SPI_CLOCK 26000000
|
||
|
#define TFT_INVERT_ROTATION 0
|
||
|
#define TFT_INVERT_ROTATION1 1
|
||
|
#define TFT_RGB_BGR 0x00
|
||
|
|
||
|
#define USE_TOUCH TOUCH_TYPE_NONE
|
||
|
|
||
|
#define PIN_NUM_MISO 25 // SPI MISO
|
||
|
#define PIN_NUM_MOSI 23 // SPI MOSI
|
||
|
#define PIN_NUM_CLK 19 // SPI CLOCK pin
|
||
|
#define PIN_NUM_CS 22 // Display CS pin
|
||
|
#define PIN_NUM_DC 21 // Display command/data pin
|
||
|
#define PIN_NUM_TCS 0 // Touch screen CS pin
|
||
|
|
||
|
#define PIN_NUM_RST 18 // GPIO used for RESET control
|
||
|
#define PIN_NUM_BCKL 5 // GPIO used for backlight control
|
||
|
#define PIN_BCKL_ON 0 // GPIO value for backlight ON
|
||
|
#define PIN_BCKL_OFF 1 // GPIO value for backlight OFF
|
||
|
// --------------------------------------------------------
|
||
|
|
||
|
#elif CONFIG_TFT_PREDEFINED_DISPLAY_TYPE == 2
|
||
|
|
||
|
// ** Set the correct configuration for Adafruit TFT Feather
|
||
|
// ---------------------------------------------------------
|
||
|
#define DEFAULT_DISP_TYPE DISP_TYPE_ILI9341
|
||
|
#define DEFAULT_TFT_DISPLAY_WIDTH 240
|
||
|
#define DEFAULT_TFT_DISPLAY_HEIGHT 320
|
||
|
#define DISP_COLOR_BITS_24 0x66
|
||
|
#define DEFAULT_GAMMA_CURVE 0
|
||
|
#define DEFAULT_SPI_CLOCK 26000000
|
||
|
#define TFT_INVERT_ROTATION 0
|
||
|
#define TFT_INVERT_ROTATION1 0
|
||
|
#define TFT_RGB_BGR 0x08
|
||
|
|
||
|
#define USE_TOUCH TOUCH_TYPE_STMPE610
|
||
|
|
||
|
#define PIN_NUM_MISO 19 // SPI MISO
|
||
|
#define PIN_NUM_MOSI 18 // SPI MOSI
|
||
|
#define PIN_NUM_CLK 5 // SPI CLOCK pin
|
||
|
#define PIN_NUM_CS 15 // Display CS pin
|
||
|
#define PIN_NUM_DC 33 // Display command/data pin
|
||
|
#define PIN_NUM_TCS 32 // Touch screen CS pin (NOT used if USE_TOUCH=0)
|
||
|
|
||
|
#define PIN_NUM_RST 0 // GPIO used for RESET control (#16)
|
||
|
#define PIN_NUM_BCKL 0 // GPIO used for backlight control
|
||
|
#define PIN_BCKL_ON 0 // GPIO value for backlight ON
|
||
|
#define PIN_BCKL_OFF 1 // GPIO value for backlight OFF
|
||
|
// ---------------------------------------------------------
|
||
|
|
||
|
#elif CONFIG_TFT_PREDEFINED_DISPLAY_TYPE == 3
|
||
|
|
||
|
// ** Set the correct configuration for M5Stack TFT
|
||
|
// ---------------------------------------------------------
|
||
|
#define DEFAULT_DISP_TYPE DISP_TYPE_ILI9341
|
||
|
#define DEFAULT_TFT_DISPLAY_WIDTH 320
|
||
|
#define DEFAULT_TFT_DISPLAY_HEIGHT 240
|
||
|
#define DISP_COLOR_BITS_24 0x66
|
||
|
#define DEFAULT_GAMMA_CURVE 0
|
||
|
#define DEFAULT_SPI_CLOCK 26000000
|
||
|
#define TFT_INVERT_ROTATION 0
|
||
|
#define TFT_INVERT_ROTATION1 0
|
||
|
#define TFT_INVERT_ROTATION2 1 // Adapte M5Stack TFT
|
||
|
#define TFT_RGB_BGR 0x08
|
||
|
|
||
|
#define USE_TOUCH TOUCH_TYPE_NONE
|
||
|
|
||
|
#define PIN_NUM_MISO 19 // SPI MISO
|
||
|
#define PIN_NUM_MOSI 23 // SPI MOSI
|
||
|
#define PIN_NUM_CLK 18 // SPI CLOCK pin
|
||
|
#define PIN_NUM_CS 14 // Display CS pin
|
||
|
#define PIN_NUM_DC 27 // Display command/data pin
|
||
|
#define PIN_NUM_TCS 0 // Touch screen CS pin (NOT used if USE_TOUCH=0)
|
||
|
|
||
|
#define PIN_NUM_RST 33 // GPIO used for RESET control (#16)
|
||
|
#define PIN_NUM_BCKL 32 // GPIO used for backlight control
|
||
|
#define PIN_BCKL_ON 1 // GPIO value for backlight ON
|
||
|
#define PIN_BCKL_OFF 0 // GPIO value for backlight OFF
|
||
|
// ---------------------------------------------------------
|
||
|
|
||
|
#elif CONFIG_TFT_PREDEFINED_DISPLAY_TYPE == 4
|
||
|
|
||
|
// ** Set the correct configuration for ESP-WROVER-KIT v4.1
|
||
|
// --------------------------------------------------------
|
||
|
#define DEFAULT_DISP_TYPE DISP_TYPE_ILI9341
|
||
|
#define DEFAULT_TFT_DISPLAY_WIDTH 240
|
||
|
#define DEFAULT_TFT_DISPLAY_HEIGHT 320
|
||
|
#define DISP_COLOR_BITS_24 0x66
|
||
|
#define DEFAULT_GAMMA_CURVE 0
|
||
|
#define DEFAULT_SPI_CLOCK 26000000
|
||
|
#define TFT_INVERT_ROTATION 0
|
||
|
#define TFT_INVERT_ROTATION1 0
|
||
|
#define TFT_INVERT_ROTATION2 0
|
||
|
#define TFT_RGB_BGR 0x08
|
||
|
|
||
|
#define USE_TOUCH TOUCH_TYPE_NONE
|
||
|
|
||
|
#define PIN_NUM_MISO 25 // SPI MISO
|
||
|
#define PIN_NUM_MOSI 23 // SPI MOSI
|
||
|
#define PIN_NUM_CLK 19 // SPI CLOCK pin
|
||
|
#define PIN_NUM_CS 22 // Display CS pin
|
||
|
#define PIN_NUM_DC 21 // Display command/data pin
|
||
|
#define PIN_NUM_TCS 0 // Touch screen CS pin
|
||
|
|
||
|
#define PIN_NUM_RST 18 // GPIO used for RESET control
|
||
|
#define PIN_NUM_BCKL 5 // GPIO used for backlight control
|
||
|
#define PIN_BCKL_ON 0 // GPIO value for backlight ON
|
||
|
#define PIN_BCKL_OFF 1 // GPIO value for backlight OFF
|
||
|
// --------------------------------------------------------
|
||
|
#elif CONFIG_TFT_PREDEFINED_DISPLAY_TYPE == 5
|
||
|
//CONFIG FOR TTGO T-DISPLAY
|
||
|
#define DEFAULT_DISP_TYPE DISP_TYPE_ST7789V
|
||
|
#define DEFAULT_TFT_DISPLAY_WIDTH 135
|
||
|
#define DEFAULT_TFT_DISPLAY_HEIGHT 240
|
||
|
|
||
|
//Need to be defined together so they can be swapped for x;y when rotating
|
||
|
#define TFT_STATIC_WIDTH_OFFSET 53
|
||
|
#define TFT_STATIC_HEIGHT_OFFSET 40
|
||
|
|
||
|
#define DISP_COLOR_BITS_24 0x66
|
||
|
#define DEFAULT_GAMMA_CURVE 0
|
||
|
#define DEFAULT_SPI_CLOCK 20000000
|
||
|
#define TFT_INVERT_ROTATION 0
|
||
|
#define TFT_INVERT_ROTATION1 1
|
||
|
#define TFT_RGB_BGR 0x00
|
||
|
//To be used by user application for initialization
|
||
|
#define TFT_START_COLORS_INVERTED
|
||
|
|
||
|
#define USE_TOUCH TOUCH_TYPE_NONE
|
||
|
|
||
|
#define PIN_NUM_MISO 0 // SPI MISO
|
||
|
#define PIN_NUM_MOSI 19 // SPI MOSI
|
||
|
#define PIN_NUM_CLK 18 // SPI CLOCK pin
|
||
|
#define PIN_NUM_CS 5 // Display CS pin
|
||
|
#define PIN_NUM_DC 16 // Display command/data pin
|
||
|
#define PIN_NUM_TCS 0 // Touch screen CS pin
|
||
|
|
||
|
#define PIN_NUM_RST 23 // GPIO used for RESET control
|
||
|
#define PIN_NUM_BCKL 4 // GPIO used for backlight control
|
||
|
#define PIN_BCKL_ON 1 // GPIO value for backlight ON
|
||
|
#define PIN_BCKL_OFF 0 // GPIO value for backlight OFF
|
||
|
//END TTGO T_DISPLAY
|
||
|
|
||
|
#else
|
||
|
|
||
|
// Configuration for other boards, set the correct values for the display used
|
||
|
//----------------------------------------------------------------------------
|
||
|
#define DISP_COLOR_BITS_24 0x66
|
||
|
//#define DISP_COLOR_BITS_16 0x55 // Do not use!
|
||
|
|
||
|
#define TFT_INVERT_ROTATION 0
|
||
|
#define TFT_INVERT_ROTATION1 CONFIG_TFT_INVERT_ROTATION1
|
||
|
|
||
|
// ################################################
|
||
|
// ### SET TO 0X00 FOR DISPLAYS WITH RGB MATRIX ###
|
||
|
// ### SET TO 0X08 FOR DISPLAYS WITH BGR MATRIX ###
|
||
|
// ### For ESP-WROWER-KIT set to 0x00 ###
|
||
|
// ################################################
|
||
|
|
||
|
#if CONFIG_TFT_RGB_BGR
|
||
|
#define TFT_RGB_BGR 0x00
|
||
|
#else
|
||
|
#define TFT_RGB_BGR 0x08
|
||
|
#endif
|
||
|
|
||
|
// ##############################################################
|
||
|
// ### Define ESP32 SPI pins to which the display is attached ###
|
||
|
// ##############################################################
|
||
|
|
||
|
// The pins configured here are the native spi pins for HSPI interface
|
||
|
// Any other valid pin combination can be used
|
||
|
|
||
|
#define PIN_NUM_MISO CONFIG_TFT_PIN_NUM_MISO
|
||
|
#define PIN_NUM_MOSI CONFIG_TFT_PIN_NUM_MOSI
|
||
|
#define PIN_NUM_CLK CONFIG_TFT_PIN_NUM_CLK
|
||
|
#define PIN_NUM_CS CONFIG_TFT_PIN_NUM_CS
|
||
|
#define PIN_NUM_DC CONFIG_TFT_PIN_NUM_DC
|
||
|
#define PIN_NUM_TCS CONFIG_TFT_PIN_NUM_TCS
|
||
|
#define PIN_NUM_RST CONFIG_TFT_PIN_NUM_RST
|
||
|
#define PIN_NUM_BCKL CONFIG_TFT_PIN_NUM_BCKL
|
||
|
|
||
|
#define PIN_BCKL_ON 0 // GPIO value for backlight ON
|
||
|
#define PIN_BCKL_OFF 1 // GPIO value for backlight OFF
|
||
|
// --------------------------------------------------------------
|
||
|
|
||
|
#define USE_TOUCH CONFIG_TFT_TOUCH_CONTROLLER
|
||
|
|
||
|
// #######################################################################
|
||
|
// Default display width (smaller dimension) and height (larger dimension)
|
||
|
// #######################################################################
|
||
|
#define DEFAULT_TFT_DISPLAY_WIDTH CONFIG_TFT_DISPLAY_WIDTH
|
||
|
#define DEFAULT_TFT_DISPLAY_HEIGHT CONFIG_TFT_DISPLAY_HEIGHT
|
||
|
// #######################################################################
|
||
|
|
||
|
#define DEFAULT_GAMMA_CURVE 0
|
||
|
#define DEFAULT_SPI_CLOCK 26000000
|
||
|
|
||
|
#if defined(CONFIG_TFT_DISPLAY_CONTROLLER_MODEL)
|
||
|
#define DEFAULT_DISP_TYPE CONFIG_TFT_DISPLAY_CONTROLLER_MODEL
|
||
|
#else
|
||
|
#define DEFAULT_DISP_TYPE DISP_TYPE_ILI9341
|
||
|
#endif
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#endif // CONFIG_PREDEFINED_DISPLAY_TYPE
|
||
|
|
||
|
// Define offset generation, or ignore offsets if none are needed
|
||
|
#ifdef TFT_STATIC_WIDTH_OFFSET
|
||
|
#define TFT_STATIC_X_OFFSET (tft_orientation & 1 ? TFT_STATIC_HEIGHT_OFFSET : TFT_STATIC_WIDTH_OFFSET)
|
||
|
#define TFT_STATIC_Y_OFFSET (tft_orientation & 1 ? TFT_STATIC_WIDTH_OFFSET : TFT_STATIC_HEIGHT_OFFSET)
|
||
|
#else
|
||
|
#define TFT_STATIC_WIDTH_OFFSET 0
|
||
|
#define TFT_STATIC_X_OFFSET 0
|
||
|
#define TFT_STATIC_HEIGHT_OFFSET 0
|
||
|
#define TFT_STATIC_Y_OFFSET 0
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// ##############################################################
|
||
|
// #### Global variables ####
|
||
|
// ##############################################################
|
||
|
|
||
|
// ==== Converts colors to grayscale if 1 =======================
|
||
|
extern uint8_t tft_gray_scale;
|
||
|
|
||
|
// ==== Spi clock for reading data from display memory in Hz ====
|
||
|
extern uint32_t tft_max_rdclock;
|
||
|
|
||
|
// ==== Display dimensions in pixels ============================
|
||
|
extern int tft_width;
|
||
|
extern int tft_height;
|
||
|
|
||
|
// ==== Display type, DISP_TYPE_ILI9488 or DISP_TYPE_ILI9341 ====
|
||
|
extern uint8_t tft_disp_type;
|
||
|
|
||
|
// ==== Spi device handles for display and touch screen =========
|
||
|
extern spi_lobo_device_handle_t tft_disp_spi;
|
||
|
extern spi_lobo_device_handle_t tft_ts_spi;
|
||
|
|
||
|
// ##############################################################
|
||
|
|
||
|
// 24-bit color type structure
|
||
|
typedef struct __attribute__((__packed__)) {
|
||
|
//typedef struct {
|
||
|
uint8_t r;
|
||
|
uint8_t g;
|
||
|
uint8_t b;
|
||
|
} color_t ;
|
||
|
|
||
|
// ==== Display commands constants ====
|
||
|
#define TFT_INVOFF 0x20
|
||
|
#define TFT_INVONN 0x21
|
||
|
#define TFT_DISPOFF 0x28
|
||
|
#define TFT_DISPON 0x29
|
||
|
#define TFT_MADCTL 0x36
|
||
|
#define TFT_PTLAR 0x30
|
||
|
#define TFT_ENTRYM 0xB7
|
||
|
|
||
|
#define TFT_CMD_NOP 0x00
|
||
|
#define TFT_CMD_SWRESET 0x01
|
||
|
#define TFT_CMD_RDDID 0x04
|
||
|
#define TFT_CMD_RDDST 0x09
|
||
|
|
||
|
#define TFT_CMD_SLPIN 0x10
|
||
|
#define TFT_CMD_SLPOUT 0x11
|
||
|
#define TFT_CMD_PTLON 0x12
|
||
|
#define TFT_CMD_NORON 0x13
|
||
|
|
||
|
#define TFT_CMD_RDMODE 0x0A
|
||
|
#define TFT_CMD_RDMADCTL 0x0B
|
||
|
#define TFT_CMD_RDPIXFMT 0x0C
|
||
|
#define TFT_CMD_RDIMGFMT 0x0D
|
||
|
#define TFT_CMD_RDSELFDIAG 0x0F
|
||
|
|
||
|
#define TFT_CMD_GAMMASET 0x26
|
||
|
|
||
|
#define TFT_CMD_FRMCTR1 0xB1
|
||
|
#define TFT_CMD_FRMCTR2 0xB2
|
||
|
#define TFT_CMD_FRMCTR3 0xB3
|
||
|
#define TFT_CMD_INVCTR 0xB4
|
||
|
#define TFT_CMD_DFUNCTR 0xB6
|
||
|
|
||
|
#define TFT_CMD_PWCTR1 0xC0
|
||
|
#define TFT_CMD_PWCTR2 0xC1
|
||
|
#define TFT_CMD_PWCTR3 0xC2
|
||
|
#define TFT_CMD_PWCTR4 0xC3
|
||
|
#define TFT_CMD_PWCTR5 0xC4
|
||
|
#define TFT_CMD_VMCTR1 0xC5
|
||
|
#define TFT_CMD_VMCTR2 0xC7
|
||
|
|
||
|
#define TFT_CMD_RDID1 0xDA
|
||
|
#define TFT_CMD_RDID2 0xDB
|
||
|
#define TFT_CMD_RDID3 0xDC
|
||
|
#define TFT_CMD_RDID4 0xDD
|
||
|
|
||
|
#define TFT_CMD_GMCTRP1 0xE0
|
||
|
#define TFT_CMD_GMCTRN1 0xE1
|
||
|
|
||
|
#define TFT_CMD_POWERA 0xCB
|
||
|
#define TFT_CMD_POWERB 0xCF
|
||
|
#define TFT_CMD_POWER_SEQ 0xED
|
||
|
#define TFT_CMD_DTCA 0xE8
|
||
|
#define TFT_CMD_DTCB 0xEA
|
||
|
#define TFT_CMD_PRC 0xF7
|
||
|
#define TFT_CMD_3GAMMA_EN 0xF2
|
||
|
|
||
|
#define ST_CMD_VCOMS 0xBB
|
||
|
#define ST_CMD_FRCTRL2 0xC6
|
||
|
#define ST_CMD_PWCTR1 0xD0
|
||
|
|
||
|
#define ST7735_FRMCTR1 0xB1
|
||
|
#define ST7735_FRMCTR2 0xB2
|
||
|
#define ST7735_FRMCTR3 0xB3
|
||
|
#define ST7735_INVCTR 0xB4
|
||
|
#define ST7735_DISSET5 0xB6
|
||
|
|
||
|
#define ST7735_PWCTR1 0xC0
|
||
|
#define ST7735_PWCTR2 0xC1
|
||
|
#define ST7735_PWCTR3 0xC2
|
||
|
#define ST7735_PWCTR4 0xC3
|
||
|
#define ST7735_PWCTR5 0xC4
|
||
|
#define ST7735_VMCTR1 0xC5
|
||
|
|
||
|
#define ST7735_RDID1 0xDA
|
||
|
#define ST7735_RDID2 0xDB
|
||
|
#define ST7735_RDID3 0xDC
|
||
|
#define ST7735_RDID4 0xDD
|
||
|
#define ST7735_NOP 0x00
|
||
|
#define ST7735_SWRESET 0x01
|
||
|
#define ST7735_RDDID 0x04
|
||
|
#define ST7735_RDDST 0x09
|
||
|
|
||
|
#define ST7735_SLPIN 0x10
|
||
|
#define ST7735_SLPOUT 0x11
|
||
|
#define ST7735_PTLON 0x12
|
||
|
#define ST7735_NORON 0x13
|
||
|
#define ST7735_PWCTR6 0xFC
|
||
|
#define ST7735_GMCTRP1 0xE0
|
||
|
#define ST7735_GMCTRN1 0xE1
|
||
|
|
||
|
#define MADCTL_MY 0x80
|
||
|
#define MADCTL_MX 0x40
|
||
|
#define MADCTL_MV 0x20
|
||
|
#define MADCTL_ML 0x10
|
||
|
#define MADCTL_MH 0x04
|
||
|
|
||
|
#define TFT_CASET 0x2A
|
||
|
#define TFT_PASET 0x2B
|
||
|
#define TFT_RAMWR 0x2C
|
||
|
#define TFT_RAMRD 0x2E
|
||
|
#define TFT_CMD_PIXFMT 0x3A
|
||
|
|
||
|
#define TFT_CMD_DELAY 0x80
|
||
|
|
||
|
|
||
|
// Initialization sequence for ILI7749
|
||
|
// ====================================
|
||
|
static const uint8_t ST7789V_init[] = {
|
||
|
#if PIN_NUM_RST
|
||
|
15, // 15 commands in list
|
||
|
#else
|
||
|
16, // 16 commands in list
|
||
|
TFT_CMD_SWRESET, TFT_CMD_DELAY, // 1: Software reset, no args, w/delay
|
||
|
200, // 200 ms delay
|
||
|
#endif
|
||
|
TFT_CMD_FRMCTR2, 5, 0x0c, 0x0c, 0x00, 0x33, 0x33,
|
||
|
TFT_ENTRYM, 1, 0x45,
|
||
|
ST_CMD_VCOMS, 1, 0x2B,
|
||
|
TFT_CMD_PWCTR1, 1, 0x2C,
|
||
|
TFT_CMD_PWCTR3, 2, 0x01, 0xff,
|
||
|
TFT_CMD_PWCTR4, 1, 0x11,
|
||
|
TFT_CMD_PWCTR5, 1, 0x20,
|
||
|
ST_CMD_FRCTRL2, 1, 0x0f,
|
||
|
ST_CMD_PWCTR1, 2, 0xA4, 0xA1,
|
||
|
TFT_CMD_GMCTRP1, 14, 0xD0, 0x00, 0x05, 0x0E, 0x15, 0x0D, 0x37, 0x43, 0x47, 0x09, 0x15, 0x12, 0x16, 0x19,
|
||
|
TFT_CMD_GMCTRN1, 14, 0xD0, 0x00, 0x05, 0x0D, 0x0C, 0x06, 0x2D, 0x44, 0x40, 0x0E, 0x1C, 0x18, 0x16, 0x19,
|
||
|
TFT_MADCTL, 1, (MADCTL_MX | TFT_RGB_BGR), // Memory Access Control (tft_orientation)
|
||
|
TFT_CMD_PIXFMT, 1, DISP_COLOR_BITS_24, // *** INTERFACE PIXEL FORMAT: 0x66 -> 18 bit; 0x55 -> 16 bit
|
||
|
TFT_CMD_SLPOUT, TFT_CMD_DELAY, 120, // Sleep out, // 120 ms delay
|
||
|
TFT_DISPON, TFT_CMD_DELAY, 120,
|
||
|
};
|
||
|
|
||
|
// Initialization sequence for ILI7341
|
||
|
// ====================================
|
||
|
static const uint8_t ILI9341_init[] = {
|
||
|
#if PIN_NUM_RST
|
||
|
23, // 24 commands in list
|
||
|
#else
|
||
|
24, // 24 commands in list
|
||
|
TFT_CMD_SWRESET, TFT_CMD_DELAY, // 1: Software reset, no args, w/delay
|
||
|
250, // 200 ms delay
|
||
|
#endif
|
||
|
TFT_CMD_POWERA, 5, 0x39, 0x2C, 0x00, 0x34, 0x02,
|
||
|
TFT_CMD_POWERB, 3, 0x00, 0XC1, 0X30,
|
||
|
0xEF, 3, 0x03, 0x80, 0x02,
|
||
|
TFT_CMD_DTCA, 3, 0x85, 0x00, 0x78,
|
||
|
TFT_CMD_DTCB, 2, 0x00, 0x00,
|
||
|
TFT_CMD_POWER_SEQ, 4, 0x64, 0x03, 0X12, 0X81,
|
||
|
TFT_CMD_PRC, 1, 0x20,
|
||
|
TFT_CMD_PWCTR1, 1, 0x23, //Power control VRH[5:0]
|
||
|
TFT_CMD_PWCTR2, 1, 0x10, //Power control SAP[2:0];BT[3:0]
|
||
|
TFT_CMD_VMCTR1, 2, 0x3e, 0x28, //VCM control
|
||
|
TFT_CMD_VMCTR2, 1, 0x86, //VCM control2
|
||
|
TFT_MADCTL, 1, // Memory Access Control (tft_orientation)
|
||
|
(MADCTL_MX | TFT_RGB_BGR),
|
||
|
// *** INTERFACE PIXEL FORMAT: 0x66 -> 18 bit; 0x55 -> 16 bit
|
||
|
TFT_CMD_PIXFMT, 1, DISP_COLOR_BITS_24,
|
||
|
TFT_INVOFF, 0,
|
||
|
TFT_CMD_FRMCTR1, 2, 0x00, 0x18,
|
||
|
TFT_CMD_DFUNCTR, 4, 0x08, 0x82, 0x27, 0x00, // Display Function Control
|
||
|
TFT_PTLAR, 4, 0x00, 0x00, 0x01, 0x3F,
|
||
|
TFT_CMD_3GAMMA_EN, 1, 0x00, // 3Gamma Function: Disable (0x02), Enable (0x03)
|
||
|
TFT_CMD_GAMMASET, 1, 0x01, //Gamma curve selected (0x01, 0x02, 0x04, 0x08)
|
||
|
TFT_CMD_GMCTRP1, 15, //Positive Gamma Correction
|
||
|
0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00,
|
||
|
TFT_CMD_GMCTRN1, 15, //Negative Gamma Correction
|
||
|
0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F,
|
||
|
TFT_CMD_SLPOUT, TFT_CMD_DELAY, // Sleep out
|
||
|
200, // 120 ms delay
|
||
|
TFT_DISPON, TFT_CMD_DELAY, 200,
|
||
|
};
|
||
|
|
||
|
// Initialization sequence for ILI9488
|
||
|
// ====================================
|
||
|
static const uint8_t ILI9488_init[] = {
|
||
|
#if PIN_NUM_RST
|
||
|
17, // 17 commands in list
|
||
|
#else
|
||
|
18, // 18 commands in list
|
||
|
TFT_CMD_SWRESET, TFT_CMD_DELAY, // 1: Software reset, no args, w/delay
|
||
|
200, // 200 ms delay
|
||
|
#endif
|
||
|
0xE0, 15, 0x00, 0x03, 0x09, 0x08, 0x16, 0x0A, 0x3F, 0x78, 0x4C, 0x09, 0x0A, 0x08, 0x16, 0x1A, 0x0F,
|
||
|
0xE1, 15, 0x00, 0x16, 0x19, 0x03, 0x0F, 0x05, 0x32, 0x45, 0x46, 0x04, 0x0E, 0x0D, 0x35, 0x37, 0x0F,
|
||
|
0xC0, 2, //Power Control 1
|
||
|
0x17, //Vreg1out
|
||
|
0x15, //Verg2out
|
||
|
|
||
|
0xC1, 1, //Power Control 2
|
||
|
0x41, //VGH,VGL
|
||
|
|
||
|
0xC5, 3, //Power Control 3
|
||
|
0x00,
|
||
|
0x12, //Vcom
|
||
|
0x80,
|
||
|
|
||
|
#if TFT_INVERT_ROTATION
|
||
|
TFT_MADCTL, 1, (MADCTL_MV | TFT_RGB_BGR), // Memory Access Control (tft_orientation), set to portrait
|
||
|
#else
|
||
|
TFT_MADCTL, 1, (MADCTL_MX | TFT_RGB_BGR), // Memory Access Control (tft_orientation), set to portrait
|
||
|
#endif
|
||
|
|
||
|
// *** INTERFACE PIXEL FORMAT: 0x66 -> 18 bit;
|
||
|
TFT_CMD_PIXFMT, 1, DISP_COLOR_BITS_24,
|
||
|
|
||
|
0xB0, 1, // Interface Mode Control
|
||
|
0x00, // 0x80: SDO NOT USE; 0x00 USE SDO
|
||
|
|
||
|
0xB1, 1, //Frame rate
|
||
|
0xA0, //60Hz
|
||
|
|
||
|
0xB4, 1, //Display Inversion Control
|
||
|
0x02, //2-dot
|
||
|
|
||
|
0xB6, 2, //Display Function Control RGB/MCU Interface Control
|
||
|
0x02, //MCU
|
||
|
0x02, //Source,Gate scan direction
|
||
|
|
||
|
0xE9, 1, // Set Image Function
|
||
|
0x00, // Disable 24 bit data
|
||
|
|
||
|
0x53, 1, // Write CTRL Display Value
|
||
|
0x28, // BCTRL && DD on
|
||
|
|
||
|
0x51, 1, // Write Display Brightness Value
|
||
|
0x7F, //
|
||
|
|
||
|
0xF7, 4, // Adjust Control
|
||
|
0xA9,
|
||
|
0x51,
|
||
|
0x2C,
|
||
|
0x02, // D7 stream, loose
|
||
|
|
||
|
|
||
|
0x11, TFT_CMD_DELAY, //Exit Sleep
|
||
|
120,
|
||
|
0x29, 0, //Display on
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
// Initialization commands for 7735B screens
|
||
|
// ------------------------------------
|
||
|
static const uint8_t STP7735_init[] = {
|
||
|
#if PIN_NUM_RST
|
||
|
16, // 17 commands in list
|
||
|
#else
|
||
|
17, // 18 commands in list:
|
||
|
ST7735_SLPOUT, TFT_CMD_DELAY, // 2: Out of sleep mode, no args, w/delay
|
||
|
255, // 255 = 500 ms delay
|
||
|
#endif
|
||
|
TFT_CMD_PIXFMT, 1+TFT_CMD_DELAY, // 3: Set color mode, 1 arg + delay:
|
||
|
0x06, // 18-bit color 6-6-6 color format
|
||
|
10, // 10 ms delay
|
||
|
ST7735_FRMCTR1, 3+TFT_CMD_DELAY, // 4: Frame rate control, 3 args + delay:
|
||
|
0x00, // fastest refresh
|
||
|
0x06, // 6 lines front porch
|
||
|
0x03, // 3 lines back porch
|
||
|
10, // 10 ms delay
|
||
|
TFT_MADCTL , 1 , // 5: Memory access ctrl (directions), 1 arg:
|
||
|
0x08, // Row addr/col addr, bottom to top refresh
|
||
|
ST7735_DISSET5, 2 , // 6: Display settings #5, 2 args, no delay:
|
||
|
0x15, // 1 clk cycle nonoverlap, 2 cycle gate
|
||
|
// rise, 3 cycle osc equalize
|
||
|
0x02, // Fix on VTL
|
||
|
ST7735_INVCTR , 1 , // 7: Display inversion control, 1 arg:
|
||
|
0x0, // Line inversion
|
||
|
ST7735_PWCTR1 , 2+TFT_CMD_DELAY, // 8: Power control, 2 args + delay:
|
||
|
0x02, // GVDD = 4.7V
|
||
|
0x70, // 1.0uA
|
||
|
10, // 10 ms delay
|
||
|
ST7735_PWCTR2 , 1 , // 9: Power control, 1 arg, no delay:
|
||
|
0x05, // VGH = 14.7V, VGL = -7.35V
|
||
|
ST7735_PWCTR3 , 2 , // 10: Power control, 2 args, no delay:
|
||
|
0x01, // Opamp current small
|
||
|
0x02, // Boost frequency
|
||
|
ST7735_VMCTR1 , 2+TFT_CMD_DELAY, // 11: Power control, 2 args + delay:
|
||
|
0x3C, // VCOMH = 4V
|
||
|
0x38, // VCOML = -1.1V
|
||
|
10, // 10 ms delay
|
||
|
ST7735_PWCTR6 , 2 , // 12: Power control, 2 args, no delay:
|
||
|
0x11, 0x15,
|
||
|
ST7735_GMCTRP1,16 , // 13: Magical unicorn dust, 16 args, no delay:
|
||
|
0x09, 0x16, 0x09, 0x20, // (seriously though, not sure what
|
||
|
0x21, 0x1B, 0x13, 0x19, // these config values represent)
|
||
|
0x17, 0x15, 0x1E, 0x2B,
|
||
|
0x04, 0x05, 0x02, 0x0E,
|
||
|
ST7735_GMCTRN1,16+TFT_CMD_DELAY, // 14: Sparkles and rainbows, 16 args + delay:
|
||
|
0x0B, 0x14, 0x08, 0x1E, // (ditto)
|
||
|
0x22, 0x1D, 0x18, 0x1E,
|
||
|
0x1B, 0x1A, 0x24, 0x2B,
|
||
|
0x06, 0x06, 0x02, 0x0F,
|
||
|
10, // 10 ms delay
|
||
|
TFT_CASET , 4 , // 15: Column addr set, 4 args, no delay:
|
||
|
0x00, 0x02, // XSTART = 2
|
||
|
0x00, 0x81, // XEND = 129
|
||
|
TFT_PASET , 4 , // 16: Row addr set, 4 args, no delay:
|
||
|
0x00, 0x02, // XSTART = 1
|
||
|
0x00, 0x81, // XEND = 160
|
||
|
ST7735_NORON , TFT_CMD_DELAY, // 17: Normal display on, no args, w/delay
|
||
|
10, // 10 ms delay
|
||
|
TFT_DISPON , TFT_CMD_DELAY, // 18: Main screen turn on, no args, w/delay
|
||
|
255 // 255 = 500 ms delay
|
||
|
};
|
||
|
|
||
|
// Init for 7735R, part 1 (red or green tab)
|
||
|
// --------------------------------------
|
||
|
static const uint8_t STP7735R_init[] = {
|
||
|
#if PIN_NUM_RST
|
||
|
14, // 14 commands in list
|
||
|
#else
|
||
|
15, // 15 commands in list:
|
||
|
ST7735_SWRESET, TFT_CMD_DELAY, // 1: Software reset, 0 args, w/delay
|
||
|
150, // 150 ms delay
|
||
|
#endif
|
||
|
ST7735_SLPOUT , TFT_CMD_DELAY, // 2: Out of sleep mode, 0 args, w/delay
|
||
|
255, // 500 ms delay
|
||
|
ST7735_FRMCTR1, 3 , // 3: Frame rate ctrl - normal mode, 3 args:
|
||
|
0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D)
|
||
|
ST7735_FRMCTR2, 3 , // 4: Frame rate control - idle mode, 3 args:
|
||
|
0x01, 0x2C, 0x2D, // Rate = fosc/(1x2+40) * (LINE+2C+2D)
|
||
|
ST7735_FRMCTR3, 6 , // 5: Frame rate ctrl - partial mode, 6 args:
|
||
|
0x01, 0x2C, 0x2D, // Dot inversion mode
|
||
|
0x01, 0x2C, 0x2D, // Line inversion mode
|
||
|
ST7735_INVCTR , 1 , // 6: Display inversion ctrl, 1 arg, no delay:
|
||
|
0x07, // No inversion
|
||
|
ST7735_PWCTR1 , 3 , // 7: Power control, 3 args, no delay:
|
||
|
0xA2,
|
||
|
0x02, // -4.6V
|
||
|
0x84, // AUTO mode
|
||
|
ST7735_PWCTR2 , 1 , // 8: Power control, 1 arg, no delay:
|
||
|
0xC5, // VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
|
||
|
ST7735_PWCTR3 , 2 , // 9: Power control, 2 args, no delay:
|
||
|
0x0A, // Opamp current small
|
||
|
0x00, // Boost frequency
|
||
|
ST7735_PWCTR4 , 2 , // 10: Power control, 2 args, no delay:
|
||
|
0x8A, // BCLK/2, Opamp current small & Medium low
|
||
|
0x2A,
|
||
|
ST7735_PWCTR5 , 2 , // 11: Power control, 2 args, no delay:
|
||
|
0x8A, 0xEE,
|
||
|
ST7735_VMCTR1 , 1 , // 12: Power control, 1 arg, no delay:
|
||
|
0x0E,
|
||
|
TFT_INVOFF , 0 , // 13: Don't invert display, no args, no delay
|
||
|
TFT_MADCTL , 1 , // 14: Memory access control (directions), 1 arg:
|
||
|
0xC0, // row addr/col addr, bottom to top refresh, RGB order
|
||
|
TFT_CMD_PIXFMT , 1+TFT_CMD_DELAY, // 15: Set color mode, 1 arg + delay:
|
||
|
0x06, // 18-bit color 6-6-6 color format
|
||
|
10 // 10 ms delay
|
||
|
};
|
||
|
|
||
|
// Init for 7735R, part 2 (green tab only)
|
||
|
// ---------------------------------------
|
||
|
static const uint8_t Rcmd2green[] = {
|
||
|
2, // 2 commands in list:
|
||
|
TFT_CASET , 4 , // 1: Column addr set, 4 args, no delay:
|
||
|
0x00, 0x02, // XSTART = 0
|
||
|
0x00, 0x7F+0x02, // XEND = 129
|
||
|
TFT_PASET , 4 , // 2: Row addr set, 4 args, no delay:
|
||
|
0x00, 0x01, // XSTART = 0
|
||
|
0x00, 0x9F+0x01 // XEND = 160
|
||
|
};
|
||
|
|
||
|
// Init for 7735R, part 2 (red tab only)
|
||
|
// -------------------------------------
|
||
|
static const uint8_t Rcmd2red[] = {
|
||
|
2, // 2 commands in list:
|
||
|
TFT_CASET , 4 , // 1: Column addr set, 4 args, no delay:
|
||
|
0x00, 0x00, // XSTART = 0
|
||
|
0x00, 0x7F, // XEND = 127
|
||
|
TFT_PASET , 4 , // 2: Row addr set, 4 args, no delay:
|
||
|
0x00, 0x00, // XSTART = 0
|
||
|
0x00, 0x9F // XEND = 159
|
||
|
};
|
||
|
|
||
|
// Init for 7735R, part 3 (red or green tab)
|
||
|
// -----------------------------------------
|
||
|
static const uint8_t Rcmd3[] = {
|
||
|
4, // 4 commands in list:
|
||
|
ST7735_GMCTRP1, 16 , // 1: Magical unicorn dust, 16 args, no delay:
|
||
|
0x02, 0x1c, 0x07, 0x12,
|
||
|
0x37, 0x32, 0x29, 0x2d,
|
||
|
0x29, 0x25, 0x2B, 0x39,
|
||
|
0x00, 0x01, 0x03, 0x10,
|
||
|
ST7735_GMCTRN1, 16 , // 2: Sparkles and rainbows, 16 args, no delay:
|
||
|
0x03, 0x1d, 0x07, 0x06,
|
||
|
0x2E, 0x2C, 0x29, 0x2D,
|
||
|
0x2E, 0x2E, 0x37, 0x3F,
|
||
|
0x00, 0x00, 0x02, 0x10,
|
||
|
ST7735_NORON , TFT_CMD_DELAY, // 3: Normal display on, no args, w/delay
|
||
|
10, // 10 ms delay
|
||
|
TFT_DISPON , TFT_CMD_DELAY, // 4: Main screen turn on, no args w/delay
|
||
|
100 // 100 ms delay
|
||
|
};
|
||
|
|
||
|
|
||
|
// ==== Public functions =========================================================
|
||
|
|
||
|
// == Low level functions; usually not used directly ==
|
||
|
esp_err_t wait_trans_finish(uint8_t free_line);
|
||
|
void disp_spi_transfer_cmd(int8_t cmd);
|
||
|
void disp_spi_transfer_cmd_data(int8_t cmd, uint8_t *data, uint32_t len);
|
||
|
void drawPixel(int16_t x, int16_t y, color_t color, uint8_t sel);
|
||
|
void send_data(int x1, int y1, int x2, int y2, uint32_t len, color_t *buf);
|
||
|
void TFT_pushColorRep(int x1, int y1, int x2, int y2, color_t data, uint32_t len);
|
||
|
int read_data(int x1, int y1, int x2, int y2, int len, uint8_t *buf, uint8_t set_sp);
|
||
|
color_t readPixel(int16_t x, int16_t y);
|
||
|
int touch_get_data(uint8_t type);
|
||
|
|
||
|
|
||
|
// Deactivate display's CS line
|
||
|
//========================
|
||
|
esp_err_t disp_deselect();
|
||
|
|
||
|
// Activate display's CS line and configure SPI interface if necessary
|
||
|
//======================
|
||
|
esp_err_t disp_select();
|
||
|
|
||
|
|
||
|
// Find maximum spi clock for successful read from display RAM
|
||
|
// ** Must be used AFTER the display is initialized **
|
||
|
//======================
|
||
|
uint32_t find_rd_speed();
|
||
|
|
||
|
|
||
|
// Change the screen rotation.
|
||
|
// Input: m new rotation value (0 to 3)
|
||
|
//=================================
|
||
|
void _tft_setRotation(uint8_t rot);
|
||
|
|
||
|
// Initialize all pins used by display driver
|
||
|
// ** MUST be executed before SPI interface initialization
|
||
|
//=================
|
||
|
void TFT_PinsInit();
|
||
|
|
||
|
// Perform display initialization sequence
|
||
|
// Sets tft_orientation to landscape; clears the screen
|
||
|
// * All pins must be configured
|
||
|
// * SPI interface must already be setup
|
||
|
// * 'tft_disp_type', 'COLOR_BITS', 'tft_width', 'tft_height' variables must be set
|
||
|
//======================
|
||
|
void TFT_display_init();
|
||
|
|
||
|
//===================
|
||
|
void stmpe610_Init();
|
||
|
|
||
|
//============================================================
|
||
|
int stmpe610_get_touch(uint16_t *x, uint16_t *y, uint16_t *z);
|
||
|
|
||
|
//========================
|
||
|
uint32_t stmpe610_getID();
|
||
|
|
||
|
// ===============================================================================
|
||
|
|
||
|
#endif
|