aboutsummaryrefslogtreecommitdiff
path: root/Marlin/src/lcd/tft_io/ili9341.h
blob: dda326df6d5bfc42d3189d1ac474ccbfd4becedc (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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/**
 * 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 ILI9341_MADCTL_MY         0x80 // Row Address Order
#define ILI9341_MADCTL_MX         0x40 // Column Address Order
#define ILI9341_MADCTL_MV         0x20 // Row/Column Exchange
#define ILI9341_MADCTL_ML         0x10 // Vertical Refresh Order
#define ILI9341_MADCTL_BGR        0x08 // RGB-BGR ORDER
#define ILI9341_MADCTL_RGB        0x00
#define ILI9341_MADCTL_MH         0x04 // Horizontal Refresh Order

#define ILI9341_ORIENTATION_UP    ILI9341_MADCTL_MY                                         // 240x320 ; Cable on the upper side
#define ILI9341_ORIENTATION_RIGHT ILI9341_MADCTL_MV                                         // 320x240 ; Cable on the right side
#define ILI9341_ORIENTATION_LEFT  ILI9341_MADCTL_MY | ILI9341_MADCTL_MX | ILI9341_MADCTL_MV // 320x240 ; Cable on the left side
#define ILI9341_ORIENTATION_DOWN  ILI9341_MADCTL_MX                                         // 240x320 ; Cable on the upper side

#define ILI9341_ORIENTATION IF_0((TFT_ORIENTATION) & TFT_EXCHANGE_XY, ILI9341_MADCTL_MV) | \
                            IF_0((TFT_ORIENTATION) & TFT_INVERT_X,    ILI9341_MADCTL_MX) | \
                            IF_0((TFT_ORIENTATION) & TFT_INVERT_Y,    ILI9341_MADCTL_MY)

#if !defined(TFT_COLOR) || TFT_COLOR == TFT_COLOR_BGR
  #define ILI9341_COLOR ILI9341_MADCTL_BGR
#elif TFT_COLOR == TFT_COLOR_RGB
  #define ILI9341_COLOR ILI9341_MADCTL_RGB
#endif

#define ILI9341_MADCTL_DATA       (ILI9341_ORIENTATION) | (ILI9341_COLOR)

#define ILI9341_NOP               0x00 // No Operation
#define ILI9341_SWRESET           0x01 // Software Reset
#define ILI9341_RDDIDIF           0x04 // Read display identification information
#define ILI9341_RDDST             0x09 // Read Display Status
#define ILI9341_RDDPM             0x0A // Read Display Power Mode
#define ILI9341_RDDMADCTL         0x0B // Read Display MADCTL
#define ILI9341_RDDCOLMOD         0x0C // Read Display Pixel Format
#define ILI9341_RDDIM             0x0D // Read Display Image Format
#define ILI9341_RDDSM             0x0E // Read Display Signal Mode
#define ILI9341_RDDSDR            0x0F // Read Display Self-Diagnostic Result
#define ILI9341_SPLIN             0x10 // Enter Sleep Mode
#define ILI9341_SLPOUT            0x11 // Sleep Out
#define ILI9341_PTLON             0x12 // Partial Mode ON
#define ILI9341_NORON             0x13 // Normal Display Mode ON
#define ILI9341_DINVOFF           0x20 // Display Inversion OFF
#define ILI9341_DINVON            0x21 // Display Inversion ON
#define ILI9341_GAMSET            0x26 // Gamma Set
#define ILI9341_DISPOFF           0x28 // Display OFF
#define ILI9341_DISPON            0x29 // Display ON
#define ILI9341_CASET             0x2A // Column Address Set
#define ILI9341_PASET             0x2B // Page Address Set
#define ILI9341_RAMWR             0x2C // Memory Write
#define ILI9341_RGBSET            0x2D // Color Set
#define ILI9341_RAMRD             0x2E // Memory Read
#define ILI9341_PLTAR             0x30 // Partial Area
#define ILI9341_VSCRDEF           0x33 // Vertical Scrolling Definition
#define ILI9341_TEOFF             0x34 // Tearing Effect Line OFF
#define ILI9341_TEON              0x35 // Tearing Effect Line ON
#define ILI9341_MADCTL            0x36 // Memory Access Control
#define ILI9341_VSCRSADD          0x37 // Vertical Scrolling Start Address
#define ILI9341_IDMOFF            0x38 // Idle Mode OFF
#define ILI9341_IDMON             0x39 // Idle Mode ON
#define ILI9341_PIXSET            0x3A // COLMOD: Pixel Format Set
#define ILI9341_WRMEMC            0x3C // Write Memory Continue
#define ILI9341_RDMEMC            0x3E // Read Memory Continue
#define ILI9341_STE               0x44 // Set Tear Scanline
#define ILI9341_GSCAN             0x45 // Get Scanline
#define ILI9341_WRDISBV           0x51 // Write Display Brightness
#define ILI9341_RDDISBV           0x52 // Read Display Brightness
#define ILI9341_WRCTRLD           0x53 // Write CTRL Display
#define ILI9341_RDCTRLD           0x54 // Read CTRL Display
#define ILI9341_WRCABC            0x55 // Write Content Adaptive Brightness Control
#define ILI9341_RDCABC            0x56 // Read Content Adaptive Brightness Control
#define ILI9341_WRCABCMB          0x5E // Write CABC Minimum Brightness / Backlight Control 1
#define ILI9341_RDCABCMB          0x5F // Read CABC Minimum Brightness / Backlight Control 1
#define ILI9341_RDID1             0xDA // Read ID1
#define ILI9341_RDID2             0xDB // Read ID2
#define ILI9341_RDID3             0xDC // Read ID3

#define ILI9341_IFMODE            0xB0 // RGB Interface Signal Control
#define ILI9341_FRMCTR1           0xB1 // Frame Rate Control (In Normal Mode/Full Colors)
#define ILI9341_FRMCTR2           0xB2 // Frame Rate Control (In Idle Mode/8 colors)
#define ILI9341_FRMCTR3           0xB3 // Frame Rate control (In Partial Mode/Full Colors)
#define ILI9341_INVTR             0xB4 // Display Inversion Control
#define ILI9341_PRCTR             0xB5 // Blanking Porch Control
#define ILI9341_DISCTRL           0xB6 // Display Function Control
#define ILI9341_ETMOD             0xB7 // Entry Mode Set
#define ILI9341_BLCTL1            0xB8 // Backlight Control 1
#define ILI9341_BLCTL2            0xB9 // Backlight Control 2
#define ILI9341_BLCTL3            0xBA // Backlight Control 3
#define ILI9341_BLCTL4            0xBB // Backlight Control 4
#define ILI9341_BLCTL5            0xBC // Backlight Control 5
#define ILI9341_BLCTL7            0xBE // Backlight Control 7
#define ILI9341_BLCTL8            0xBF // Backlight Control 8
#define ILI9341_PWCTRL1           0xC0 // Power Control 1
#define ILI9341_PWCTRL2           0xC1 // Power Control 2
#define ILI9341_VMCTRL1           0xC5 // VCOM Control 1
#define ILI9341_VMCTRL2           0xC7 // VCOM Control 2
#define ILI9341_PWCTRLA           0xCB // Power control A
#define ILI9341_PWCTRLB           0xCF // Power control B
#define ILI9341_NVMWR             0xD0 // NV Memory Write
#define ILI9341_NVMPKEY           0xD1 // NV Memory Protection Key
#define ILI9341_RDNVM             0xD2 // NV Memory Status Read
#define ILI9341_RDID4             0xD3 // Read ID4 - 0x009341
#define ILI9341_PGAMCTRL          0xE0 // Positive Gamma Correction
#define ILI9341_NGAMCTRL          0xE1 // Negative Gamma Correction
#define ILI9341_DGAMCTRL1         0xE2 // Digital Gamma Control 1
#define ILI9341_DGAMCTRL2         0xE3 // Digital Gamma Control 2
#define ILI9341_DRVTCTLA1         0xE8 // Driver timing control A
#define ILI9341_DRVTCTLA2         0xE9 // Driver timing control A
#define ILI9341_DRVTCTLB          0xEA // Driver timing control B
#define ILI9341_PONSEQCTL         0xED // Power on sequence control
#define ILI9341_EN3G              0xF2 // Enable 3G - 3 gamma control
#define ILI9341_IFCTL             0xF6 // Interface Control
#define ILI9341_PUMPRCTL          0xF7 // Pump ratio control


static const uint16_t ili9341_init[] = {
  DATASIZE_8BIT,
  ESC_REG(ILI9341_SWRESET), ESC_DELAY(100),
  ESC_REG(ILI9341_SLPOUT), ESC_DELAY(20),
/*
  ESC_REG(ILI9341_PWCTRLA), 0x0039, 0x002C, 0x0000, 0x0034, 0x0002, // Power control A
  ESC_REG(ILI9341_PWCTRLB), 0x0000, 0x00C1, 0x0030,                 // Power control B
  ESC_REG(ILI9341_DRVTCTLA1), 0x0085, 0x0000, 0x0078,               // Driver timing control A
  ESC_REG(ILI9341_DRVTCTLB), 0x0000, 0x0000,                        // Driver timing control B
  ESC_REG(ILI9341_PONSEQCTL), 0x0064, 0x0003, 0x0012, 0x0081,       // Power on sequence control
  ESC_REG(ILI9341_DISCTRL), 0x0008, 0x0082, 0x0027,                 // Display Function Control
  ESC_REG(ILI9341_PUMPRCTL), 0x0020,                                // Pump ratio control
  ESC_REG(ILI9341_VMCTRL1), 0x003E, 0x0028,                         // VCOM Control 1
  ESC_REG(ILI9341_VMCTRL2), 0x0086,                                 // VCOM Control 2
  ESC_REG(ILI9341_FRMCTR1), 0x0000, 0x0018,                         // Frame Rate Control (In Normal Mode/Full Colors)
  ESC_REG(ILI9341_PWCTRL1), 0x0023,                                 // Power Control 1
  ESC_REG(ILI9341_PWCTRL2), 0x0010,                                 // Power Control 2
*/
  ESC_REG(ILI9341_MADCTL), ILI9341_MADCTL_DATA,
  ESC_REG(ILI9341_PIXSET), 0x0055,

  /* Gamma Correction */
  ESC_REG(ILI9341_EN3G), 0x0000,                 // 3Gamma Function Disable
  ESC_REG(ILI9341_GAMSET), 0x0001,               // Gamma curve selected
  ESC_REG(ILI9341_PGAMCTRL), 0x000F, 0x0031, 0x002B, 0x000C, 0x000E, 0x0008, 0x004E, 0x00F1, 0x0037, 0x0007, 0x0010, 0x0003, 0x000E, 0x0009, 0x0000,
  ESC_REG(ILI9341_NGAMCTRL), 0x0000, 0x000E, 0x0014, 0x0003, 0x0011, 0x0007, 0x0031, 0x00C1, 0x0048, 0x0008, 0x000F, 0x000C, 0x0031, 0x0036, 0x000F,

  ESC_REG(ILI9341_NORON),
  ESC_REG(ILI9341_DISPON),
  ESC_END
};