@@ -16,10 +16,9 @@ void St7789::Init() {
16
16
HardwareReset ();
17
17
SoftwareReset ();
18
18
SleepOut ();
19
- ColMod ();
19
+ PixelFormat ();
20
20
MemoryDataAccessControl ();
21
- ColumnAddressSet ();
22
- RowAddressSet ();
21
+ SetAddrWindow (0 , 0 , Width, Height);
23
22
// P8B Mirrored version does not need display inversion.
24
23
#ifndef DRIVER_DISPLAY_MIRROR
25
24
DisplayInversionOn ();
@@ -97,8 +96,9 @@ void St7789::SleepIn() {
97
96
sleepIn = true ;
98
97
}
99
98
100
- void St7789::ColMod () {
101
- WriteCommand (static_cast <uint8_t >(Commands::ColMod));
99
+ void St7789::PixelFormat () {
100
+ WriteCommand (static_cast <uint8_t >(Commands::PixelFormat));
101
+ // 65K colours, 16-bit per pixel
102
102
WriteData (0x55 );
103
103
}
104
104
@@ -118,22 +118,6 @@ void St7789::MemoryDataAccessControl() {
118
118
#endif
119
119
}
120
120
121
- void St7789::ColumnAddressSet () {
122
- WriteCommand (static_cast <uint8_t >(Commands::ColumnAddressSet));
123
- WriteData (0x00 );
124
- WriteData (0x00 );
125
- WriteData (Width >> 8u );
126
- WriteData (Width & 0xffu );
127
- }
128
-
129
- void St7789::RowAddressSet () {
130
- WriteCommand (static_cast <uint8_t >(Commands::RowAddressSet));
131
- WriteData (0x00 );
132
- WriteData (0x00 );
133
- WriteData (320u >> 8u );
134
- WriteData (320u & 0xffu );
135
- }
136
-
137
121
void St7789::DisplayInversionOn () {
138
122
WriteCommand (static_cast <uint8_t >(Commands::DisplayInversionOn));
139
123
}
@@ -148,16 +132,23 @@ void St7789::DisplayOn() {
148
132
149
133
void St7789::SetAddrWindow (uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
150
134
WriteCommand (static_cast <uint8_t >(Commands::ColumnAddressSet));
151
- WriteData (x0 >> 8 );
152
- WriteData (x0 & 0xff );
153
- WriteData (x1 >> 8 );
154
- WriteData (x1 & 0xff );
135
+ uint8_t colArgs[] = {
136
+ static_cast <uint8_t >(x0 >> 8 ), // x start MSB
137
+ static_cast <uint8_t >(x0), // x start LSB
138
+ static_cast <uint8_t >(x1 >> 8 ), // x end MSB
139
+ static_cast <uint8_t >(x1) // x end LSB
140
+ };
141
+ WriteData (colArgs, sizeof (colArgs));
155
142
156
143
WriteCommand (static_cast <uint8_t >(Commands::RowAddressSet));
157
- WriteData (y0 >> 8 );
158
- WriteData (y0 & 0xff );
159
- WriteData (y1 >> 8 );
160
- WriteData (y1 & 0xff );
144
+ uint8_t rowArgs[] = {
145
+ static_cast <uint8_t >(y0 >> 8 ), // y start MSB
146
+ static_cast <uint8_t >(y0 ), // y start LSB
147
+ static_cast <uint8_t >(y1 >> 8 ), // y end MSB
148
+ static_cast <uint8_t >(y1 ) // y end LSB
149
+ };
150
+ memcpy (addrWindowArgs, rowArgs, sizeof (rowArgs));
151
+ WriteData (addrWindowArgs, sizeof (addrWindowArgs));
161
152
}
162
153
163
154
void St7789::WriteToRam (const uint8_t * data, size_t size) {
@@ -179,8 +170,12 @@ void St7789::DisplayOff() {
179
170
void St7789::VerticalScrollStartAddress (uint16_t line) {
180
171
verticalScrollingStartAddress = line;
181
172
WriteCommand (static_cast <uint8_t >(Commands::VerticalScrollStartAddress));
182
- WriteData (line >> 8u );
183
- WriteData (line & 0x00ffu );
173
+ uint8_t args[] = {
174
+ static_cast <uint8_t >(line >> 8 ), // Frame memory line pointer MSB
175
+ static_cast <uint8_t >(line) // Frame memory line pointer LSB
176
+ };
177
+ memcpy (verticalScrollArgs, args, sizeof (args));
178
+ WriteData (verticalScrollArgs, sizeof (verticalScrollArgs));
184
179
}
185
180
186
181
void St7789::Uninit () {
0 commit comments