aboutsummaryrefslogtreecommitdiff
path: root/Marlin/src/lcd/tft_io/st7789v.h
blob: d0cf969c66ce89af6041f84b8fb7fdc342303040 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/**
 * Marlin 3D Printer Firmware
 * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
 *
 * Based on Sprinter and grbl.
 * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 */
#pragma once

#include "tft_io.h"

#include "../../inc/MarlinConfig.h"

#define ST7789V_MADCTL_MY         0x80 // Row Address Order
#define ST7789V_MADCTL_MX         0x40 // Column Address Order
#define ST7789V_MADCTL_MV         0x20 // Row/Column Exchange
#define ST7789V_MADCTL_ML         0x10 // Vertical Refresh Order
#define ST7789V_MADCTL_BGR        0x08 // RGB-BGR ORDER
#define ST7789V_MADCTL_RGB        0x00
#define ST7789V_MADCTL_MH         0x04 // Horizontal Refresh Order

#define ST7789V_ORIENTATION_UP    ST7789V_MADCTL_MX | ST7789V_MADCTL_MY // 240x320 ; Cable on the upper side
#define ST7789V_ORIENTATION_RIGHT ST7789V_MADCTL_MX | ST7789V_MADCTL_MV // 320x240 ; Cable on the right side
#define ST7789V_ORIENTATION_LEFT  ST7789V_MADCTL_MY | ST7789V_MADCTL_MV // 320x240 ; Cable on the left side
#define ST7789V_ORIENTATION_DOWN  0                                     // 240x320 ; Cable on the lower side

#define ST7789V_ORIENTATION IF_0((TFT_ORIENTATION) & TFT_EXCHANGE_XY, ST7789V_MADCTL_MV) | \
                            IF_0((TFT_ORIENTATION) & TFT_INVERT_X,    ST7789V_MADCTL_MX) | \
                            IF_0((TFT_ORIENTATION) & TFT_INVERT_Y,    ST7789V_MADCTL_MY)

#if !defined(TFT_COLOR) || TFT_COLOR == TFT_COLOR_RGB
  #define ST7789V_COLOR ST7789V_MADCTL_RGB
#elif TFT_COLOR == TFT_COLOR_BGR
  #define ST7789V_COLOR ST7789V_MADCTL_BGR
#endif

#define ST7789V_MADCTL_DATA       (ST7789V_ORIENTATION) | (ST7789V_COLOR)

#define ST7789V_NOP               0x00 // No Operation
#define ST7789V_SWRESET           0x01 // Software reset
#define ST7789V_RDDID             0x04 // Read Display ID
#define ST7789V_RDDST             0x09 // Read Display Status
#define ST7789V_RDDPM             0x0A // Read Display Power Mode
#define ST7789V_RDDMADCTL         0x0B // Read Display MADCTL
#define ST7789V_RDDCOLMOD         0x0C // Read Display Pixel Format
#define ST7789V_RDDIM             0x0D // Read Display Image Mode
#define ST7789V_RDDSM             0x0E // Read Display Signal Mode
#define ST7789V_RDDSDR            0x0F // Read Display Self-Diagnostic Result
#define ST7789V_SLPIN             0x10 // Sleep In
#define ST7789V_SLPOUT            0x11 // Sleep Out
#define ST7789V_PTLON             0x12 // Partial Display Mode On
#define ST7789V_NORON             0x13 // Normal Display Mode On
#define ST7789V_INVOFF            0x20 // Display Inversion Off
#define ST7789V_INVON             0x21 // Display Inversion On
#define ST7789V_GAMSET            0x26 // Gamma Set
#define ST7789V_DISPOFF           0x28 // Display Off
#define ST7789V_DISPON            0x29 // Display On
#define ST7789V_CASET             0x2A // Column Address Set
#define ST7789V_RASET             0x2B // Row Address Set
#define ST7789V_RAMWR             0x2C // Memory Write
#define ST7789V_RAMRD             0x2E // Memory Read
#define ST7789V_PTLAR             0x30 // Partial Area
#define ST7789V_VSCRDEF           0x33 // Vertical Scrolling Definition
#define ST7789V_TEOFF             0x34 // Tearing Effect Line OFF
#define ST7789V_TEON              0x35 // Tearing Effect Line ON
#define ST7789V_MADCTL            0x36 // Memory Data Access Control
#define ST7789V_VSCSAD            0x37 // Vertical Scroll Start Address of RAM
#define ST7789V_IDMOFF            0x38 // Idle Mode Off
#define ST7789V_IDMON             0x39 // Idle Mode On
#define ST7789V_COLMOD            0x3A // Interface Pixel Format
#define ST7789V_WRMEMC            0x3C // Write Memory Continue
#define ST7789V_RDMEMC            0x3E // Read Memory Continue
#define ST7789V_STE               0x44 // Set Tear Scanline
#define ST7789V_GSCAN             0x45 // Get Scanline
#define ST7789V_WRDISBV           0x51 // Write Display Brightness
#define ST7789V_RDDISBV           0x52 // Read Display Brightness
#define ST7789V_WRCTRLD           0x53 // Write CTRL Display
#define ST7789V_RDCTRLD           0x54 // Read CTRL Value Display
#define ST7789V_WRCACE            0x55 // Write Content Adaptive Brightness Control and Color Enhancement
#define ST7789V_RDCABC            0x56 // Read Content Adaptive Brightness Control
#define ST7789V_WRCABCMB          0x5E // Write CABC Minimum Brightness
#define ST7789V_RDCABCMB          0x5F // Read CABC Minimum Brightness
#define ST7789V_RDABCSDR          0x68 // Read Automatic Brightness Control Self-Diagnostic Result
#define ST7789V_RDID1             0xDA // Read ID1 Value
#define ST7789V_RDID2             0xDB // Read ID2 Value
#define ST7789V_RDID3             0xDC // Read ID3 Value

#define ST7789V_RAMCTRL           0xB0 // RAM Control
#define ST7789V_RGBCTRL           0xB1 // RGB Interface Control
#define ST7789V_PORCTRL           0xB2 // Porch Setting
#define ST7789V_FRCTRL1           0xB3 // Frame Rate Control 1 (In partial mode/ idle colors)
#define ST7789V_GCTRL             0xB7 // Gate Control
#define ST7789V_DGMEN             0xBA // Digital Gamma Enable
#define ST7789V_VCOMS             0xBB // VCOM Setting
#define ST7789V_LCMCTRL           0xC0 // LCM Control
#define ST7789V_IDSET             0xC1 // ID Code Setting
#define ST7789V_VDVVRHEN          0xC2 // VDV and VRH Command Enable
#define ST7789V_VRHS              0xC3 // VRH Set
#define ST7789V_VDVS              0xC4 // VDV Set
#define ST7789V_VCMOFSET          0xC5 // VCOM Offset Set
#define ST7789V_FRCTRL2           0xC6 // Frame Rate Control in Normal Mode
#define ST7789V_CABCCTRL          0xC7 // CABC Control
#define ST7789V_REGSEL1           0xC8 // Register Value Selection 1
#define ST7789V_REGSEL2           0xCA // Register Value Selection 2
#define ST7789V_PWMFRSEL          0xCC // PWM Frequency Selection
#define ST7789V_PWCTRL1           0xD0 // Power Control 1
#define ST7789V_VAPVANEN          0xD2 // Enable VAP/VAN signal output
#define ST7789V_CMD2EN            0xDF // Command 2 Enable
#define ST7789V_PVGAMCTRL         0xE0 // Positive Voltage Gamma Control
#define ST7789V_NVGAMCTRL         0xE1 // Negative Voltage Gamma Control
#define ST7789V_DGMLUTR           0xE2 // Digital Gamma Look-up Table for Red
#define ST7789V_DGMLUTB           0xE3 // Digital Gamma Look-up Table for Blue
#define ST7789V_GATECTRL          0xE4 // Gate Control
#define ST7789V_SPI2EN            0xE7 // SPI2 Enable
#define ST7789V_PWCTRL2           0xE8 // Power Control 2
#define ST7789V_EQCTRL            0xE9 // Equalize time control
#define ST7789V_PROMCTRL          0xEC // Program Mode Control
#define ST7789V_PROMEN            0xFA // Program Mode Enable
#define ST7789V_NVMSET            0xFC // NVM Setting
#define ST7789V_PROMACT           0xFE // Program action

static const uint16_t st7789v_init[] = {
  DATASIZE_8BIT,
  ESC_REG(ST7789V_SWRESET), ESC_DELAY(100),
  ESC_REG(ST7789V_SLPOUT), ESC_DELAY(20),

  ESC_REG(ST7789V_PORCTRL), 0x000C, 0x000C, 0x0000, 0x0033, 0x0033,
  ESC_REG(ST7789V_GCTRL), 0x0035,
  ESC_REG(ST7789V_VCOMS), 0x001F,
  ESC_REG(ST7789V_LCMCTRL), 0x002C,
  ESC_REG(ST7789V_VDVVRHEN), 0x0001, 0x00C3,
  ESC_REG(ST7789V_VDVS), 0x0020,
  ESC_REG(ST7789V_FRCTRL2), 0x000F,
  ESC_REG(ST7789V_PWCTRL1), 0x00A4, 0x00A1,

  ESC_REG(ST7789V_MADCTL), ST7789V_MADCTL_DATA,
  ESC_REG(ST7789V_COLMOD), 0x0055,

  ESC_REG(ST7789V_NORON),
  ESC_REG(ST7789V_DISPON),
  ESC_END
};