27
27
#include "supervisor/board.h"
28
28
#include "mpconfigboard.h"
29
29
#include "shared-bindings/microcontroller/Pin.h"
30
+ #include "shared-module/displayio/__init__.h"
31
+ #include "shared-module/displayio/mipi_constants.h"
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_GPIO36 , // CLK
73
+ & pin_GPIO35 , // 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_GPIO37 , // DC
86
+ & pin_GPIO34 , // CS
87
+ & pin_GPIO38 , // 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
+ 0x37 , // set vertical scroll command
117
+ display_init_sequence ,
118
+ sizeof (display_init_sequence ),
119
+ & pin_GPIO33 , // backlight pin
120
+ NO_BRIGHTNESS_COMMAND ,
121
+ 1.0f , // brightness (ignored)
122
+ false, // auto_brightness
123
+ false, // single_byte_bounds
124
+ false, // data_as_commands
125
+ true, // auto_refresh
126
+ 60 , // native_frames_per_second
127
+ true, // backlight_on_high
128
+ false // SH1107_addressing
129
+ );
130
+
131
+ common_hal_never_reset_pin (& pin_GPIO33 ); // backlight pin
132
+ }
30
133
31
134
void board_init (void ) {
32
135
// USB
@@ -38,6 +141,9 @@ void board_init(void) {
38
141
common_hal_never_reset_pin (& pin_GPIO43 );
39
142
common_hal_never_reset_pin (& pin_GPIO44 );
40
143
#endif /* DEBUG */
144
+
145
+ // Display
146
+ display_init ();
41
147
}
42
148
43
149
bool board_requests_safe_mode (void ) {
0 commit comments