1 /*
2 * Copyright (c) 2016, Freescale Semiconductor, Inc.
3 * Copyright 2016-2017,2019,2022,2024 NXP
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9 #include "fsl_ili9341.h"
10
FT9341_Init(ili9341_send_byte_t _writeData,ili9341_send_byte_t _writeCommand)11 void FT9341_Init(ili9341_send_byte_t _writeData, ili9341_send_byte_t _writeCommand)
12 {
13 SDK_DelayAtLeastUs(ILI9341_RESET_CANCEL_MS * 1000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
14
15 _writeCommand(ILI9341_CMD_DISPLAYOFF);
16
17 _writeCommand(ILI9341_CMD_PWRA);
18 _writeData(0x39);
19 _writeData(0x2C);
20 _writeData(0x00);
21 _writeData(0x34);
22 _writeData(0x02);
23 _writeCommand(ILI9341_CMD_PWRB);
24 _writeData(0x00);
25 _writeData(0x83);
26 _writeData(0x30);
27 _writeCommand(ILI9341_CMD_DTCA);
28 _writeData(0x85);
29 _writeData(0x01);
30 _writeData(0x79);
31 _writeCommand(ILI9341_CMD_DTCB);
32 _writeData(0x00);
33 _writeData(0x00);
34 _writeCommand(ILI9341_CMD_PWRSEQ);
35 _writeData(0x64);
36 _writeData(0x03);
37 _writeData(0x12);
38 _writeData(0x81);
39 _writeCommand(ILI9341_CMD_PRC);
40 _writeData(0x20);
41 _writeCommand(ILI9341_CMD_PWR1);
42 _writeData(0x26);
43 _writeCommand(ILI9341_CMD_PWR2);
44 _writeData(0x11);
45 _writeCommand(ILI9341_CMD_VCOM1);
46 _writeData(0x35);
47 _writeData(0x3E);
48 _writeCommand(ILI9341_CMD_VCOM2);
49 _writeData(0xBE);
50 _writeCommand(ILI9341_CMD_MAC);
51 _writeData(0x28);
52 _writeCommand(ILI9341_CMD_PIXELFORMAT);
53 _writeData(0x55);
54 _writeCommand(ILI9341_CMD_FRC);
55 _writeData(0x00);
56 _writeData(0x1F);
57 _writeCommand(ILI9341_CMD_DFC);
58 _writeData(0x0A);
59 _writeData(0x82);
60 _writeData(0x27);
61 _writeData(0x00);
62 _writeCommand(ILI9341_CMD_3GAMMAEN);
63 _writeData(0x00);
64 _writeCommand(ILI9341_CMD_COLADDR);
65 _writeData(0x00);
66 _writeData(0x00);
67 _writeData(0x00);
68 _writeData(0xEF);
69 _writeCommand(ILI9341_CMD_PAGEADDR);
70 _writeData(0x00);
71 _writeData(0x00);
72 _writeData(0x01);
73 _writeData(0x3F);
74 _writeCommand(ILI9341_CMD_GAMMA);
75 _writeData(0x01);
76 _writeCommand(ILI9341_CMD_PGAMMA);
77 _writeData(0x0FU);
78 _writeData(0x31U);
79 _writeData(0x2BU);
80 _writeData(0x0CU);
81 _writeData(0x0EU);
82 _writeData(0x08U);
83 _writeData(0x4EU);
84 _writeData(0xF1U);
85 _writeData(0x37U);
86 _writeData(0x07U);
87 _writeData(0x10U);
88 _writeData(0x03U);
89 _writeData(0x0EU);
90 _writeData(0x09U);
91 _writeData(0x00U);
92 _writeCommand(ILI9341_CMD_NGAMMA);
93 _writeData(0x00U);
94 _writeData(0x0EU);
95 _writeData(0x14U);
96 _writeData(0x03U);
97 _writeData(0x11U);
98 _writeData(0x07U);
99 _writeData(0x31U);
100 _writeData(0xC1U);
101 _writeData(0x48U);
102 _writeData(0x08U);
103 _writeData(0x0FU);
104 _writeData(0x0CU);
105 _writeData(0x31U);
106 _writeData(0x36U);
107 _writeData(0x0FU);
108 _writeCommand(ILI9341_CMD_SLEEPOUT);
109 _writeCommand(ILI9341_CMD_DISPLAYON);
110 }
111
FT9341_Init1(ili9341_send_cmd_data_t sendCmdData)112 void FT9341_Init1(ili9341_send_cmd_data_t sendCmdData)
113 {
114 SDK_DelayAtLeastUs(ILI9341_RESET_CANCEL_MS * 1000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
115
116 sendCmdData(ILI9341_CMD_DISPLAYOFF, NULL, 0U);
117 sendCmdData(ILI9341_CMD_PWRA, (const uint8_t[]){0x39U, 0x2CU, 0x00U, 0x34U, 0x02U}, 5u);
118 sendCmdData(ILI9341_CMD_PWRB, (const uint8_t[]){0x00U, 0x83U, 0x30U}, 3u);
119 sendCmdData(ILI9341_CMD_DTCA, (const uint8_t[]){0x85U, 0x01U, 0x79U}, 3u);
120 sendCmdData(ILI9341_CMD_DTCB, (const uint8_t[]){0x00U, 0x00U}, 2u);
121 sendCmdData(ILI9341_CMD_PWRSEQ, (const uint8_t[]){0x64U, 0x03U, 0x12U, 0x81U}, 4u);
122 sendCmdData(ILI9341_CMD_PRC, (const uint8_t[]){0x20U}, 1u);
123 sendCmdData(ILI9341_CMD_PWR1, (const uint8_t[]){0x26U}, 1u);
124 sendCmdData(ILI9341_CMD_PWR2, (const uint8_t[]){0x11U}, 1u);
125 sendCmdData(ILI9341_CMD_VCOM1, (const uint8_t[]){0x35U, 0x3eU}, 2u);
126 sendCmdData(ILI9341_CMD_VCOM2, (const uint8_t[]){0xBEU}, 1u);
127 sendCmdData(ILI9341_CMD_MAC, (const uint8_t[]){0x28U}, 1u);
128 sendCmdData(ILI9341_CMD_PIXELFORMAT, (const uint8_t[]){0x55U}, 1u);
129 sendCmdData(ILI9341_CMD_FRC, (const uint8_t[]){0x00U, 0x1FU}, 2u);
130 sendCmdData(ILI9341_CMD_DFC, (const uint8_t[]){0x0aU, 0x82U, 0x27U, 0x00}, 4u);
131 sendCmdData(ILI9341_CMD_3GAMMAEN, (const uint8_t[]){0x00U}, 1u);
132 sendCmdData(ILI9341_CMD_COLADDR, (const uint8_t[]){0x00U, 0x00U, 0x00U, 0xEFU}, 4u);
133 sendCmdData(ILI9341_CMD_PAGEADDR, (const uint8_t[]){0x00U, 0x00U, 0x01U, 0x3FU}, 4u);
134 sendCmdData(ILI9341_CMD_GAMMA, (const uint8_t[]){0x01U}, 1u);
135 sendCmdData(ILI9341_CMD_PGAMMA,
136 (const uint8_t[]){0x0FU, 0x31U, 0x2BU, 0x0CU, 0x0EU, 0x08U, 0x4EU, 0xF1U, 0x37U, 0x07U, 0x10U, 0x03U,
137 0x0EU, 0x09U, 0x00U},
138 15u);
139 sendCmdData(ILI9341_CMD_NGAMMA,
140 (const uint8_t[]){0x00U, 0x0EU, 0x14U, 0x03U, 0x11U, 0x07U, 0x31U, 0xC1U, 0x48U, 0x08U, 0x0FU, 0x0CU,
141 0x31U, 0x36U, 0x0FU},
142 15u);
143
144 sendCmdData(ILI9341_CMD_SLEEPOUT, NULL, 0U);
145 sendCmdData(ILI9341_CMD_DISPLAYON, NULL, 0U);
146 }
147
148 #if ILI9341_USE_DBI_IFACE
ILI9341_InitDBI(ili9341_handle_t * handle,const ili9341_config_t * config,dbi_iface_t * dbiIface)149 status_t ILI9341_InitDBI(ili9341_handle_t *handle, const ili9341_config_t *config, dbi_iface_t *dbiIface)
150 {
151 handle->dbiIface = dbiIface;
152
153 SDK_DelayAtLeastUs(ILI9341_RESET_CANCEL_MS * 1000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
154
155 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DISPLAYOFF, NULL, 0U);
156 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWRA, (const uint8_t[]){0x39U, 0x2CU, 0x00U, 0x34U, 0x02U}, 5u);
157 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWRB, (const uint8_t[]){0x00U, 0x83U, 0x30U}, 3u);
158 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DTCA, (const uint8_t[]){0x85U, 0x01U, 0x79U}, 3u);
159 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DTCB, (const uint8_t[]){0x00U, 0x00U}, 2u);
160 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWRSEQ, (const uint8_t[]){0x64U, 0x03U, 0x12U, 0x81U}, 4u);
161 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PRC, (const uint8_t[]){0x20U}, 1u);
162 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWR1, (const uint8_t[]){0x26U}, 1u);
163 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWR2, (const uint8_t[]){0x11U}, 1u);
164 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_VCOM1, (const uint8_t[]){0x35U, 0x3eU}, 2u);
165 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_VCOM2, (const uint8_t[]){0xBEU}, 1u);
166 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_MAC, (const uint8_t[]){0x28U}, 1u);
167 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PIXELFORMAT, (const uint8_t[]){0x55U}, 1u);
168 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_FRC, (const uint8_t[]){0x00U, 0x1FU}, 2u);
169 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DFC, (const uint8_t[]){0x0aU, 0x82U, 0x27U, 0x00}, 4u);
170 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_3GAMMAEN, (const uint8_t[]){0x00U}, 1u);
171 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_COLADDR, (const uint8_t[]){0x00U, 0x00U, 0x00U, 0xEFU}, 4u);
172 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PAGEADDR, (const uint8_t[]){0x00U, 0x00U, 0x01U, 0x3FU}, 4u);
173 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_GAMMA, (const uint8_t[]){0x01U}, 1u);
174 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PGAMMA,
175 (const uint8_t[]){0x0FU, 0x31U, 0x2BU, 0x0CU, 0x0EU, 0x08U, 0x4EU, 0xF1U, 0x37U, 0x07U,
176 0x10U, 0x03U, 0x0EU, 0x09U, 0x00U},
177 15u);
178 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_NGAMMA,
179 (const uint8_t[]){0x00U, 0x0EU, 0x14U, 0x03U, 0x11U, 0x07U, 0x31U, 0xC1U, 0x48U, 0x08U,
180 0x0FU, 0x0CU, 0x31U, 0x36U, 0x0FU},
181 15u);
182
183 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_SLEEPOUT, NULL, 0U);
184 DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DISPLAYON, NULL, 0U);
185
186 return kStatus_Success;
187 }
188
189 #endif
190