30
30
#include "shared-module/displayio/__init__.h"
31
31
#include "shared-module/displayio/mipi_constants.h"
32
32
33
+ #define DELAY 0x80
34
+
35
+ // display init sequence according to LilyGO example app
36
+ uint8_t display_init_sequence [] = {
37
+ // sw reset
38
+ 0x01 , 0 | DELAY , 150 ,
39
+ // sleep out
40
+ 0x11 , 0 | DELAY , 255 ,
41
+ // normal display mode on
42
+ 0x13 , 0 ,
43
+ // display and color format settings
44
+ 0x36 , 1 , 0x08 ,
45
+ 0xB6 , 2 , 0x0A , 0x82 ,
46
+ 0x3A , 1 | DELAY , 0x55 , 10 ,
47
+ // ST7789V frame rate setting
48
+ 0xB2 , 5 , 0x0C , 0x0C , 0x00 , 0x33 , 0x33 ,
49
+ // voltages: VGH / VGL
50
+ 0xB7 , 1 , 0x35 ,
51
+ // ST7789V power setting
52
+ 0xBB , 1 , 0x28 ,
53
+ 0xC0 , 1 , 0x0C ,
54
+ 0xC2 , 2 , 0x01 , 0xFF ,
55
+ 0xC3 , 1 , 0x10 ,
56
+ 0xC4 , 1 , 0x20 ,
57
+ 0xC6 , 1 , 0x0F ,
58
+ 0xD0 , 2 , 0xA4 , 0xA1 ,
59
+ // ST7789V gamma setting
60
+ 0xE0 , 14 , 0xD0 , 0x00 , 0x02 , 0x07 , 0x0A , 0x28 , 0x32 , 0x44 , 0x42 , 0x06 , 0x0E , 0x12 , 0x14 , 0x17 ,
61
+ 0xE1 , 14 , 0xD0 , 0x00 , 0x02 , 0x07 , 0x0A , 0x28 , 0x31 , 0x54 , 0x47 , 0x0E , 0x1C , 0x17 , 0x1B , 0x1E ,
62
+ 0x21 , 0 ,
63
+ // display on
64
+ 0x29 , 0 | DELAY , 255 ,
65
+ };
66
+
67
+ static void display_init (void ) {
68
+ busio_spi_obj_t * spi = & displays [0 ].fourwire_bus .inline_bus ;
69
+
70
+ common_hal_busio_spi_construct (
71
+ spi ,
72
+ & pin_GPIO34 , // CLK
73
+ & pin_GPIO33 , // MOSI
74
+ NULL // MISO not connected
75
+ );
76
+
77
+ common_hal_busio_spi_never_reset (spi );
78
+
79
+ displayio_fourwire_obj_t * bus = & displays [0 ].fourwire_bus ;
80
+ bus -> base .type = & displayio_fourwire_type ;
81
+
82
+ common_hal_displayio_fourwire_construct (
83
+ bus ,
84
+ spi ,
85
+ & pin_GPIO35 , // DC
86
+ & pin_GPIO36 , // CS
87
+ NULL , // NO RST ?
88
+ 40000000 , // baudrate
89
+ 0 , // polarity
90
+ 0 // phase
91
+ );
92
+
93
+ displayio_display_obj_t * display = & displays [0 ].display ;
94
+ display -> base .type = & displayio_display_type ;
95
+
96
+ // workaround as board_init() is called before reset_port() in main.c
97
+ pwmout_reset ();
98
+
99
+ common_hal_displayio_display_construct (
100
+ display ,
101
+ bus ,
102
+ 240 , // width (after rotation)
103
+ 135 , // height (after rotation)
104
+ 52 , // column start
105
+ 40 , // row start
106
+ 90 , // rotation
107
+ 16 , // color depth
108
+ false, // grayscale
109
+ false, // pixels in a byte share a row. Only valid for depths < 8
110
+ 1 , // bytes per cell. Only valid for depths < 8
111
+ false, // reverse_pixels_in_byte. Only valid for depths < 8
112
+ true, // reverse_pixels_in_word
113
+ MIPI_COMMAND_SET_COLUMN_ADDRESS , // set column command
114
+ MIPI_COMMAND_SET_PAGE_ADDRESS , // set row command
115
+ MIPI_COMMAND_WRITE_MEMORY_START , // write memory command
116
+ display_init_sequence ,
117
+ sizeof (display_init_sequence ),
118
+ & pin_GPIO38 , // backlight pin
119
+ NO_BRIGHTNESS_COMMAND ,
120
+ 1.0f , // brightness (ignored)
121
+ false, // auto_brightness
122
+ false, // single_byte_bounds
123
+ false, // data_as_commands
124
+ true, // auto_refresh
125
+ 60 , // native_frames_per_second
126
+ true, // backlight_on_high
127
+ false // SH1107_addressing
128
+ );
129
+
130
+ common_hal_never_reset_pin (& pin_GPIO38 ); // backlight pin
131
+ }
132
+
33
133
void board_init (void ) {
34
134
// USB
35
135
common_hal_never_reset_pin (& pin_GPIO19 );
@@ -49,6 +149,9 @@ void board_init(void) {
49
149
common_hal_never_reset_pin (& pin_GPIO30 );
50
150
common_hal_never_reset_pin (& pin_GPIO31 );
51
151
common_hal_never_reset_pin (& pin_GPIO32 );
152
+
153
+ // Display
154
+ display_init ();
52
155
}
53
156
54
157
bool board_requests_safe_mode (void ) {
0 commit comments