Skip to content

Commit 840b26a

Browse files
authored
Merge branch 'lvgl-micropython:main' into nv3007
2 parents 67dd680 + 2ad6e7e commit 840b26a

File tree

3 files changed

+252
-0
lines changed

3 files changed

+252
-0
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# Copyright (c) 2024 - 2025 Kevin G. Schlosser
2+
3+
import time
4+
from micropython import const # NOQA
5+
import lvgl as lv # NOQA
6+
7+
8+
_PWR1 = const(0xC0)
9+
_PWR2 = const(0xC1)
10+
_VCOMCTL1 = const(0xC5)
11+
_VCOMCTL2 = const(0xC7)
12+
_MADCTL = const(0x36)
13+
_COLMOD = const(0x3A)
14+
_FRMCTR1 = const(0xB1)
15+
_DFUNCTRL = const(0xB6)
16+
_GAMSET = const(0x26)
17+
_PGC = const(0xE0)
18+
_NGC = const(0xE1)
19+
_SLPOUT = const(0x11)
20+
_DISPON = const(0x29)
21+
_RASET = const(0x2B)
22+
_CASET = const(0x2A)
23+
_PWRCTRLB = const(0xCF)
24+
_PWRONSQCTRL = const(0xED)
25+
_DRVTIMCTRLA1 = const(0xE8)
26+
_PWRCTRLA = const(0xCB)
27+
_PUMPRATIOCTRL = const(0xF7)
28+
_DRVTIMCTRLB = const(0xEA)
29+
_ENA3GAMMA = const(0xF2)
30+
31+
32+
def init(self):
33+
param_buf = bytearray(15)
34+
param_mv = memoryview(param_buf)
35+
36+
param_buf[:3] = bytearray([0x03, 0x80, 0x02])
37+
self.set_params(0xEF, param_mv[:3])
38+
39+
param_buf[:3] = bytearray([0x00, 0XC1, 0X30])
40+
self.set_params(_PWRCTRLB, param_mv[:3])
41+
42+
param_buf[:4] = bytearray([0x64, 0x03, 0X12, 0X81])
43+
self.set_params(_PWRONSQCTRL, param_mv[:4])
44+
45+
param_buf[:3] = bytearray([0x85, 0x00, 0x78])
46+
self.set_params(_DRVTIMCTRLA1, param_mv[:3])
47+
48+
param_buf[:5] = bytearray([0x39, 0x2C, 0x00, 0x34, 0x02])
49+
self.set_params(_PWRCTRLA, param_mv[:5])
50+
51+
param_buf[0] = 0x20
52+
self.set_params(_PUMPRATIOCTRL, param_mv[:1])
53+
54+
param_buf[:2] = bytearray([0x00, 0x00])
55+
self.set_params(_DRVTIMCTRLB, param_mv[:2])
56+
57+
param_buf[0] = 0x23
58+
self.set_params(_PWR1, param_mv[:1])
59+
60+
param_buf[0] = 0x10
61+
self.set_params(_PWR2, param_mv[:1])
62+
63+
param_buf[:2] = bytearray([0x3e, 0x28])
64+
self.set_params(_VCOMCTL1, param_mv[:2])
65+
66+
param_buf[0] = 0x86
67+
self.set_params(_VCOMCTL2, param_mv[:1])
68+
69+
param_buf[0] = (
70+
self._madctl(
71+
self._color_byte_order,
72+
self._ORIENTATION_TABLE # NOQA
73+
)
74+
)
75+
self.set_params(_MADCTL, param_mv[:1])
76+
77+
color_size = lv.color_format_get_size(self._color_space)
78+
if color_size == 2: # NOQA
79+
pixel_format = 0x55
80+
else:
81+
raise RuntimeError(
82+
f'{self.__class__.__name__} IC only supports '
83+
'lv.COLOR_FORMAT.RGB565'
84+
)
85+
86+
param_buf[0] = pixel_format
87+
self.set_params(_COLMOD, param_mv[:1])
88+
89+
param_buf[:2] = bytearray([0x00, 0x13]) # 0x18 ??
90+
self.set_params(_FRMCTR1, param_mv[:2])
91+
92+
param_buf[:3] = bytearray([0x08, 0x82, 0x27])
93+
self.set_params(_DFUNCTRL, param_mv[:3])
94+
95+
param_buf[0] = 0x00
96+
self.set_params(_ENA3GAMMA, param_mv[:1])
97+
98+
param_buf[0] = 0x01
99+
self.set_params(_GAMSET, param_mv[:1])
100+
101+
param_buf[:15] = bytearray([
102+
0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1,
103+
0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00])
104+
self.set_params(_PGC, param_mv[:15])
105+
106+
param_buf[:15] = bytearray([
107+
0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1,
108+
0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F])
109+
self.set_params(_NGC, param_mv[:15])
110+
111+
self.set_params(_SLPOUT)
112+
time.sleep_ms(120) # NOQA
113+
self.set_params(_DISPON)
114+
time.sleep_ms(20) # NOQA
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# Copyright (c) 2024 - 2025 Kevin G. Schlosser
2+
3+
import time
4+
from micropython import const # NOQA
5+
import lvgl as lv # NOQA
6+
7+
8+
_PWR1 = const(0xC0)
9+
_PWR2 = const(0xC1)
10+
_VCOMCTL1 = const(0xC5)
11+
_VCOMCTL2 = const(0xC7)
12+
_MADCTL = const(0x36)
13+
_COLMOD = const(0x3A)
14+
_FRMCTR1 = const(0xB1)
15+
_DFUNCTRL = const(0xB6)
16+
_GAMSET = const(0x26)
17+
_PGC = const(0xE0)
18+
_NGC = const(0xE1)
19+
_SLPOUT = const(0x11)
20+
_DISPON = const(0x29)
21+
_RASET = const(0x2B)
22+
_CASET = const(0x2A)
23+
_PWRCTRLB = const(0xCF)
24+
_PWRONSQCTRL = const(0xED)
25+
_DRVTIMCTRLA1 = const(0xE8)
26+
_PWRCTRLA = const(0xCB)
27+
_PUMPRATIOCTRL = const(0xF7)
28+
_DRVTIMCTRLB = const(0xEA)
29+
_ENA3GAMMA = const(0xF2)
30+
31+
32+
def init(self):
33+
param_buf = bytearray(15)
34+
param_mv = memoryview(param_buf)
35+
36+
param_buf[:3] = bytearray([0x00, 0XC1, 0X30])
37+
self.set_params(_PWRCTRLB, param_mv[:3])
38+
39+
param_buf[:4] = bytearray([0x64, 0x03, 0X12, 0X81])
40+
self.set_params(_PWRONSQCTRL, param_mv[:4])
41+
42+
param_buf[:3] = bytearray([0x85, 0x00, 0x78])
43+
self.set_params(_DRVTIMCTRLA1, param_mv[:3])
44+
45+
param_buf[:5] = bytearray([0x39, 0x2C, 0x00, 0x34, 0x02])
46+
self.set_params(_PWRCTRLA, param_mv[:5])
47+
48+
param_buf[0] = 0x20
49+
self.set_params(_PUMPRATIOCTRL, param_mv[:1])
50+
51+
param_buf[:2] = bytearray([0x00, 0x00])
52+
self.set_params(_DRVTIMCTRLB, param_mv[:2])
53+
54+
param_buf[0] = 0x10
55+
self.set_params(_PWR1, param_mv[:1])
56+
57+
param_buf[0] = 0x00
58+
self.set_params(_PWR2, param_mv[:1])
59+
60+
param_buf[:2] = bytearray([0x30, 0x30])
61+
self.set_params(_VCOMCTL1, param_mv[:2])
62+
63+
param_buf[0] = 0xB7
64+
self.set_params(_VCOMCTL2, param_mv[:1])
65+
66+
param_buf[0] = (
67+
self._madctl(
68+
self._color_byte_order,
69+
self._ORIENTATION_TABLE # NOQA
70+
)
71+
)
72+
self.set_params(_MADCTL, param_mv[:1])
73+
74+
color_size = lv.color_format_get_size(self._color_space)
75+
if color_size == 2: # NOQA
76+
pixel_format = 0x55
77+
else:
78+
raise RuntimeError(
79+
f'{self.__class__.__name__} IC only supports '
80+
'lv.COLOR_FORMAT.RGB565'
81+
)
82+
83+
param_buf[0] = pixel_format
84+
self.set_params(_COLMOD, param_mv[:1])
85+
86+
param_buf[:2] = bytearray([0x00, 0x1A])
87+
self.set_params(_FRMCTR1, param_mv[:2])
88+
89+
param_buf[:3] = bytearray([0x08, 0x82, 0x27])
90+
self.set_params(_DFUNCTRL, param_mv[:3])
91+
92+
param_buf[0] = 0x00
93+
self.set_params(_ENA3GAMMA, param_mv[:1])
94+
95+
param_buf[0] = 0x01
96+
self.set_params(_GAMSET, param_mv[:1])
97+
98+
param_buf[:15] = bytearray([
99+
0x0F, 0x2A, 0x28, 0x08, 0x0E, 0x08, 0x54, 0xA9,
100+
0x43, 0x0A, 0x0F, 0x00, 0x00, 0x00, 0x00])
101+
self.set_params(_PGC, param_mv[:15])
102+
103+
param_buf[:15] = bytearray([
104+
0x00, 0x15, 0x17, 0x07, 0x11, 0x06, 0x2B, 0x56,
105+
0x3C, 0x05, 0x10, 0x0F, 0x3F, 0x3F, 0x0F])
106+
self.set_params(_NGC, param_mv[:15])
107+
108+
param_buf[:4] = bytearray([0x00, 0x00, 0x01, 0x3f])
109+
self.set_params(_RASET, param_mv[:4])
110+
111+
param_buf[:4] = bytearray([0x00, 0x00, 0x00, 0xef])
112+
self.set_params(_CASET, param_mv[:4])
113+
114+
self.set_params(_SLPOUT)
115+
time.sleep_ms(120) # NOQA
116+
self.set_params(_DISPON)
117+
time.sleep_ms(20) # NOQA
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Copyright (c) 2024 - 2025 Kevin G. Schlosser
2+
from micropython import const
3+
import display_driver_framework
4+
5+
6+
STATE_HIGH = display_driver_framework.STATE_HIGH
7+
STATE_LOW = display_driver_framework.STATE_LOW
8+
STATE_PWM = display_driver_framework.STATE_PWM
9+
10+
BYTE_ORDER_RGB = display_driver_framework.BYTE_ORDER_RGB
11+
BYTE_ORDER_BGR = display_driver_framework.BYTE_ORDER_BGR
12+
13+
14+
_MADCTL_MV = const(0x20) # 0=Normal, 1=Row/column exchange
15+
_MADCTL_MX = const(0x40) # 0=Left to Right, 1=Right to Left
16+
_MADCTL_MY = const(0x80) # 0=Top to Bottom, 1=Bottom to Top
17+
18+
19+
class ILI9343C(display_driver_framework.DisplayDriver):
20+
_ORIENTATION_TABLE = (0x00, _MADCTL_MV | _MADCTL_MX,
21+
_MADCTL_MY | _MADCTL_MX, _MADCTL_MV | _MADCTL_MY)

0 commit comments

Comments
 (0)