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
171
172
173
|
/**
* 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 ILI9328_DRVCTL_SM 0x0400
#define ILI9328_DRVCTL_SS 0x0100 // Select the shift direction of outputs from the source driver. 0 - from S1 to S720 / 1 - from S720 to S1
#define ILI9328_GATE_SCANCTL_GS 0x8000 // Sets the direction of scan by the gate driver in the range determined by SCN[4:0] and NL[4:0].
#define ILI9328_ETMOD_TRI 0x8000
#define ILI9328_ETMOD_DFM 0x4000
#define ILI9328_ETMOD_BGR 0x1000 // RGB-BGR ORDER
#define ILI9328_ETMOD_RGB 0x0000
#define ILI9328_ETMOD_ORG 0x0080
#define ILI9328_ETMOD_ID1 0x0020 // 0 - Vertical Decrement / 1 - Vertical Increment
#define ILI9328_ETMOD_ID0 0x0010 // 0 - Horizontal Decrement / 1 - Horizontal Increment
#define ILI9328_ETMOD_AM 0x0008 // 0 - Horizontal / 1 - Vertical
// MKS Robin TFT v1.1 - 320x240 ; Cable on the left side
#if TFT_ROTATION == TFT_ROTATE_180
#define ILI9328_DRVCTL_DATA 0x0000
#define ILI9328_GATE_SCANCTL1_DATA 0xA700
#else
#define ILI9328_DRVCTL_DATA ILI9328_DRVCTL_SS
#define ILI9328_GATE_SCANCTL1_DATA 0x2700
#endif
/*
#define ILI9328_ETMOD_ORIENTATION IF_0((TFT_ORIENTATION) & TFT_EXCHANGE_XY, ILI9328_ETMOD_AM) | \
IF_0((TFT_ORIENTATION) & TFT_INVERT_X, ILI9328_ETMOD_ID1) | \
IF_0((TFT_ORIENTATION) & TFT_INVERT_Y, ILI9328_ETMOD_ID0)
*/
#define ILI9328_ETMOD_ORIENTATION (ILI9328_ETMOD_AM | ILI9328_ETMOD_ID1 | ILI9328_ETMOD_ID0)
#if !defined(TFT_COLOR) || TFT_COLOR == TFT_COLOR_BGR
#define ILI9328_ETMOD_COLOR ILI9328_ETMOD_BGR
#elif TFT_COLOR == TFT_COLOR_RGB
#define ILI9328_ETMOD_COLOR ILI9328_ETMOD_RGB
#endif
#define ILI9328_ETMOD_DATA (ILI9328_ETMOD_ORIENTATION) | (ILI9328_ETMOD_COLOR)
#define ILI9328_RDDID 0x00 // ID code - 0x9328
#define ILI9328_DRVCTL 0x01 // Driver Output Control
#define ILI9328_LCDCTL 0x02 // LCD Driving Wave Control
#define ILI9328_ETMOD 0x03 // Entry Mode - Control the GRAM update direction
#define ILI9328_RESIZECTL 0x04 // Resizing Control Register
#define ILI9328_DISCTRL1 0x07 // Display Control 1
#define ILI9328_DISCTRL2 0x08 // Display Control 2
#define ILI9328_DISCTRL3 0x09 // Display Control 3
#define ILI9328_DISCTRL4 0x0A // Display Control 4
#define ILI9328_RGBCTRL1 0x0C // RGB Display Interface Control 1
#define ILI9328_FMARKERPOS 0x0D // Frame Marker Position
#define ILI9328_RGBCTRL2 0x0F // RGB Display Interface Control 2
#define ILI9328_PWCTRL1 0x10 // Power Control 1
#define ILI9328_PWCTRL2 0x11 // Power Control 2
#define ILI9328_PWCTRL3 0x12 // Power Control 3
#define ILI9328_PWCTRL4 0x13 // Power Control 4
// With landscape screen orientation 'Horizontal' is Y and 'Vertical' is X
#define ILI9328_HASET 0x20 // GRAM Horizontal Address Set (0-255)
#define ILI9328_VASET 0x21 // GRAM Vertical Address Set (0-511)
#define ILI9328_RAMWR 0x22 // Write data to GRAM
#define ILI9328_RAMRD 0x22 // Read Data from GRAM
#define ILI9328_PWCTRL7 0x29 // Power Control 7
#define ILI9328_FRMCTR 0x2B // Frame Rate and Color Control
#define ILI9328_GAMCTRL1 0x30 // Gamma Control
#define ILI9328_GAMCTRL2 0x31 // Gamma Control
#define ILI9328_GAMCTRL3 0x32 // Gamma Control
#define ILI9328_GAMCTRL4 0x35 // Gamma Control
#define ILI9328_GAMCTRL5 0x36 // Gamma Control
#define ILI9328_GAMCTRL6 0x37 // Gamma Control
#define ILI9328_GAMCTRL7 0x38 // Gamma Control
#define ILI9328_GAMCTRL8 0x39 // Gamma Control
#define ILI9328_GAMCTRL9 0x3C // Gamma Control
#define ILI9328_GAMCTRLA 0x3D // Gamma Control
// With landscape screen orientation 'Horizontal' is Y and 'Vertical' is X
#define ILI9328_HASTART 0x50 // Horizontal Address Start Position (0-255)
#define ILI9328_HAEND 0x51 // Horizontal Address End Position (0-255)
#define ILI9328_VASTART 0x52 // Vertical Address Start Position (0-511)
#define ILI9328_VAEND 0x53 // Vertical Address End Position (0-511)
#define ILI9328_GATE_SCANCTL1 0x60 // Gate Scan Control
#define ILI9328_GATE_SCANCTL2 0x61 // Gate Scan Control
#define ILI9328_GATE_SCANCTL3 0x6A // Gate Scan Control
#define ILI9328_PLTPOS1 0x80 // Partial Image 1 Display Position
#define ILI9328_PLTSTART1 0x81 // Partial Image 1 RAM Start Address
#define ILI9328_PLTEND1 0x82 // Partial Image 1 RAM End Address
#define ILI9328_PLTPOS2 0x83 // Partial Image 2 Display Position
#define ILI9328_PLTSTART2 0x84 // Partial Image 2 RAM Start Address
#define ILI9328_PLTEND2 0x85 // Partial Image 2 RAM End Address
#define ILI9328_IFCTL1 0x90 // Panel Interface Control 1
#define ILI9328_IFCTL2 0x92 // Panel Interface Control 2
#define ILI9328_IFCTL4 0x95 // Panel Interface Control 4
#define ILI9328_IFCTL5 0x97 // Panel Interface Control 5
#define ILI9328_OTPWR 0xA1 // OTP VCM Programming Control
#define ILI9328_RDOTP 0xA2 // OTP VCM Status and Enable
#define ILI9328_OTPPKEY 0xA5 // OTP Programming ID Key
static const uint16_t ili9328_init[] = {
DATASIZE_16BIT,
ESC_REG(ILI9328_DRVCTL), ILI9328_DRVCTL_DATA,
ESC_REG(ILI9328_LCDCTL), 0x0400, // LCD Driving Wave Control
ESC_REG(ILI9328_ETMOD), ILI9328_ETMOD_DATA,
ESC_REG(ILI9328_RESIZECTL), 0x0000,
ESC_REG(ILI9328_DISCTRL2), 0x0202,
ESC_REG(ILI9328_DISCTRL3), 0x0000,
ESC_REG(ILI9328_DISCTRL4), 0x0000,
ESC_REG(ILI9328_RGBCTRL1), 0x0000,
ESC_REG(ILI9328_FMARKERPOS), 0x0000,
ESC_REG(ILI9328_RGBCTRL2), 0x0000,
ESC_REG(ILI9328_PWCTRL1), 0x0000,
ESC_REG(ILI9328_PWCTRL2), 0x0007,
ESC_REG(ILI9328_PWCTRL3), 0x0000,
ESC_REG(ILI9328_PWCTRL4), 0x0000,
ESC_REG(ILI9328_DISCTRL1), 0x0001,
ESC_DELAY(200),
ESC_REG(ILI9328_PWCTRL1), 0x1690,
ESC_REG(ILI9328_PWCTRL2), 0x0227,
ESC_DELAY(50),
ESC_REG(ILI9328_PWCTRL3), 0x008C,
ESC_DELAY(50),
ESC_REG(ILI9328_PWCTRL4), 0x1500,
ESC_REG(ILI9328_PWCTRL7), 0x0004,
ESC_REG(ILI9328_FRMCTR), 0x000D,
ESC_DELAY(50),
ESC_REG(ILI9328_GATE_SCANCTL1), ILI9328_GATE_SCANCTL1_DATA,
ESC_REG(ILI9328_GATE_SCANCTL2), 0x0001,
ESC_REG(ILI9328_GATE_SCANCTL3), 0x0000,
ESC_REG(ILI9328_PLTPOS1), 0x0000,
ESC_REG(ILI9328_PLTSTART1), 0x0000,
ESC_REG(ILI9328_PLTEND1), 0x0000,
ESC_REG(ILI9328_PLTPOS2), 0x0000,
ESC_REG(ILI9328_PLTSTART2), 0x0000,
ESC_REG(ILI9328_PLTEND2), 0x0000,
ESC_REG(ILI9328_IFCTL1), 0x0010,
ESC_REG(ILI9328_IFCTL2), 0x0600,
ESC_REG(ILI9328_DISCTRL1), 0x0133,
ESC_END
};
|