8000 Merge pull request #4864 from ladyada/main · syntheticfuture/circuitpython@c1c101c · GitHub
[go: up one dir, main page]

Skip to content

Commit c1c101c

Browse files
authored
Merge pull request adafruit#4864 from ladyada/main
macropad rev B definion and fix for SH110x addressing
2 parents 12499d6 + 467a4e7 commit c1c101c

File tree

5 files changed

+51
-36
lines changed

5 files changed

+51
-36
lines changed

ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
#include "shared-bindings/microcontroller/Pin.h"
3030
#include "src/rp2_common/hardware_gpio/include/hardware/gpio.h"
31+
#include "supervisor/shared/board.h"
3132

3233
void board_init(void) {
3334
}
@@ -37,4 +38,6 @@ bool board_requests_safe_mode(void) {
3738
}
3839

3940
void reset_board(void) {
41+
// turn off any left over LED
42+
board_reset_user_neopixels(&pin_GPIO19, 12);
4043
}
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
#define MICROPY_HW_BOARD_NAME "Adafruit Macropad RP2040"
22
#define MICROPY_HW_MCU_NAME "rp2040"
33

4-
#define MICROPY_HW_NEOPIXEL (&pin_GPIO16)
4+
#define MICROPY_HW_NEOPIXEL (&pin_GPIO19)
55

6-
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO25)
7-
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO24)
6+
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO21)
7+
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO20)
8+
9+
#define DEFAULT_SPI_BUS_SCK (&pin_GPIO26)
10+
#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO27)
11+
#define DEFAULT_SPI_BUS_MISO (&pin_GPIO28)

ports/raspberrypi/boards/adafruit_macropad_rp2040/pins.c

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,29 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
1515
{ MP_ROM_QSTR(MP_QSTR_KEY12), MP_ROM_PTR(&pin_GPIO12) },
1616

1717
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) },
18-
{ MP_ROM_QSTR(MP_QSTR_SPEAKER), MP_ROM_PTR(&pin_GPIO14) },
18+
{ MP_ROM_QSTR(MP_QSTR_SPEAKER_SHUTDOWN), MP_ROM_PTR(&pin_GPIO14) },
19+
{ MP_ROM_QSTR(MP_QSTR_SPEAKER), MP_ROM_PTR(&pin_GPIO16) },
1920

2021
{ MP_ROM_QSTR(MP_QSTR_ENCODER_SWITCH), MP_ROM_PTR(&pin_GPIO0) },
2122

22-
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO16) },
2323
{ MP_ROM_QSTR(MP_QSTR_ENCODER_A), MP_ROM_PTR(&pin_GPIO17) },
2424
{ MP_ROM_QSTR(MP_QSTR_ENCODER_B), MP_ROM_PTR(&pin_GPIO18) },
2525

26+
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO19) },
27+
28+
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO20) },
29+
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO21) },
30+
31+
{ MP_ROM_QSTR(MP_QSTR_OLED_CS), MP_ROM_PTR(&pin_GPIO22) },
2632
{ MP_ROM_QSTR(MP_QSTR_OLED_RESET), MP_ROM_PTR(&pin_GPIO23) },
33+
{ MP_ROM_QSTR(MP_QSTR_OLED_DC), MP_ROM_PTR(&pin_GPIO24) },
2734

28-
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO24) },
29-
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO25) },
3035

31-
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },
32-
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
33-
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28) },
34-
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29) },
36+
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO26) },
37+
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO27) },
38+
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO28) },
3539

3640
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
41+
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_i2c_obj) },
3742
};
3843
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

shared-module/displayio/Display.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,8 @@ STATIC bool _refresh_area(displayio_display_obj_t *self, const displayio_area_t
249249
// for SH1107 and other boundary constrained controllers
250250
// write one single row at a time
251251
if (self->SH1107_addressing) {
252-
subrectangles = rows_per_buffer; // vertical 67E6 (column mode) write each separately (height times)
253-
rows_per_buffer = 1;
252+
subrectangles = rows_per_buffer / 8; // page addressing mode writes 8 rows at a time
253+
rows_per_buffer = 8;
254254
} else if (displayio_area_size(&clipped) > buffer_size * pixels_per_word) {
255255
rows_per_buffer = buffer_size * pixels_per_word / displayio_area_width(&clipped);
256256
if (rows_per_buffer == 0) {

shared-module/displayio/display_core.c

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,11 @@ void displayio_display_core_set_region_to_update(displayio_display_core_t *self,
216216
uint8_t row_command, uint16_t set_current_column_command, uint16_t set_current_row_command,
217217
bool data_as_commands, bool always_toggle_chip_select,
218218
displayio_area_t *area, bool SH1107_addressing) {
219-
uint16_t x1 = area->x1;
220-
uint16_t x2 = area->x2;
221-
uint16_t y1 = area->y1;
222-
uint16_t y2 = area->y2;
219+
uint16_t x1 = area->x1 + self->colstart;
220+
uint16_t x2 = area->x2 + self->colstart;
221+
uint16_t y1 = area->y1 + self->rowstart;
222+
uint16_t y2 = area->y2 + self->rowstart;
223+
223224
// Collapse down the dimension where multiple pixels are in a byte.
224225
if (self->colorspace.depth < 8) {
225226
uint8_t pixels_per_byte = 8 / self->colorspace.depth;
@@ -232,6 +233,9 @@ void displayio_display_core_set_region_to_update(displayio_display_core_t *self,
232233
}
233234
}
234235

236+
x2 -= 1;
237+
y2 -= 1;
238+
235239
display_chip_select_behavior_t chip_select = CHIP_SELECT_UNTOUCHED;
236240
if (always_toggle_chip_select || data_as_commands) {
237241
chip_select = CHIP_SELECT_TOGGLE_EVERY_BYTE;
@@ -249,25 +253,25 @@ void displayio_display_core_set_region_to_update(displayio_display_core_t *self,
249253
} else {
250254
data_type = DISPLAY_COMMAND;
251255
}
256+
252257
if (self->ram_width < 0x100) {
253-
data[data_length++] = x1 + self->colstart;
254-
data[data_length++] = x2 - 1 + self->colstart;
258+
data[data_length++] = x1;
259+
data[data_length++] = x2;
255260
} else {
256-
x1 += self->colstart;
257-
x2 += self->colstart - 1;
258261
data[data_length++] = x1 >> 8;
259262
data[data_length++] = x1 & 0xff;
260263
data[data_length++] = x2 >> 8;
261264
data[data_length++] = x2 & 0xff;
262265
}
266+
263267
// Quirk for SH1107 "SH1107_addressing"
264-
// Note... column is y! page is x!
265-
// Page address command = 0xB0
268+
// Column lower command = 0x00, Column upper command = 0x10
266269
if (SH1107_addressing) {
267-
// set the page to our x value
268-
data[0] = 0xB0 | (x1 & 0x0F);
269-
data_length = 1;
270+
data[0] = ((x1 >> 4) & 0x0F) | 0x10; // 0x10 to 0x17
271+
data[1] = x1 & 0x0F; // 0x00 to 0x0F
272+
data_length = 2;
270273
}
274+
271275
self->send(self->bus, data_type, chip_select, data, data_length);
272276
displayio_display_core_end_transaction(self);
273277

@@ -288,27 +292,26 @@ void displayio_display_core_set_region_to_update(displayio_display_core_t *self,
288292
self->send(self->bus, DISPLAY_COMMAND, CHIP_SELECT_UNTOUCHED, data, 1);
289293
data_length = 0;
290294
}
295+
291296
if (self->ram_height < 0x100) {
292-
data[data_length++] = y1 + self->rowstart;
293-
data[data_length++] = y2 - 1 + self->rowstart;
297+
data[data_length++] = y1;
298+
data[data_length++] = y2;
294299
} else {
295-
y1 += self->rowstart;
296-
y2 += self->rowstart - 1;
297300
data[data_length++] = y1 >> 8;
298301
data[data_length++] = y1 & 0xff;
299302
data[data_length++] = y2 >> 8;
300303
data[data_length++] = y2 & 0xff;
301304
}
305+
302306
// Quirk for SH1107 "SH1107_addressing"
303-
// Note... column is y! page is x!
304-
// Column lower command = 0x00, Column upper command = 0x10
307+
// Page address command = 0xB0
305308
if (SH1107_addressing) {
306-
data[0] = y1 & 0x0F; // 0x00 to 0x0F
307-
data[1] = (y1 >> 4 & 0x0F) | 0x10; // 0x10 to 0x17
308-
data_length = 2;
309+
// set the page to our y value
310+
data[0] = 0xB0 | y1;
311+
data_length = 1;
309312
}
310-
self->send(self->bus, data_type, chip_select, data, data_length);
311313

314+
self->send(self->bus, data_type, chip_select, data, data_length);
312315
displayio_display_core_end_transaction(self);
313316

314317
if (set_current_row_command != NO_COMMAND) {

0 commit comments

Comments
 (0)
0