diff --git a/ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c b/ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c index 3fb4b21cbf..214662e331 100644 --- a/ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c +++ b/ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c @@ -24,13 +24,86 @@ * THE SOFTWARE. */ -#include "supervisor/board.h" - +#include "shared-bindings/board/__init__.h" +#include "shared-bindings/displayio/FourWire.h" +#include "shared-module/displayio/__init__.h" +#include "shared-module/displayio/mipi_constants.h" +#include "shared-bindings/busio/SPI.h" #include "shared-bindings/microcontroller/Pin.h" #include "src/rp2_common/hardware_gpio/include/hardware/gpio.h" #include "supervisor/shared/board.h" +displayio_fourwire_obj_t board_display_obj; + +#define DELAY 0x80 + +uint8_t display_init_sequence[] = { + 0xae, 0, // sleep + 0xd5, 1, 0x80, // fOsc divide by 2 + 0xa8, 1, 0x3f, // multiplex 64 + 0xd3, 1, 0x00, // offset 0 + 0x40, 1, 0x00, // start line 0 + 0xad, 1, 0x8b, // dc/dc on + 0xa1, 0, // segment remap = 0 + 0xc8, 0, // scan incr + 0xda, 1, 0x12, // com pins + 0x81, 1, 0xff, // contrast 255 + 0xd9, 1, 0x1f, // pre/dis-charge 2DCLKs/2CLKs + 0xdb, 1, 0x20, // VCOM deslect 0.770 + 0x20, 1, 0x20, + 0x33, 0, // VPP 9V + 0xa6, 0, // not inverted + 0xa4, 0, // normal + 0xaf, 0, // on +}; + void board_init(void) { + busio_spi_obj_t *spi = &displays[0].fourwire_bus.inline_bus; + common_hal_busio_spi_construct(spi, &pin_GPIO26, &pin_GPIO27, NULL); + common_hal_busio_spi_never_reset(spi); + + displayio_fourwire_obj_t *bus = &displays[0].fourwire_bus; + bus->base.type = &displayio_fourwire_type; + common_hal_displayio_fourwire_construct(bus, + spi, + &pin_GPIO24, // Command or data + &pin_GPIO22, // Chip select + &pin_GPIO23, // Reset + 1000000, // Baudrate + 0, // Polarity + 0); // Phase + + displayio_display_obj_t *display = &displays[0].display; + display->base.type = &displayio_display_type; + common_hal_displayio_display_construct(display, + bus, + 128, // Width + 64, // Height + 2, // column start + 0, // row start + 0, // rotation + 1, // Color depth + true, // grayscale + false, // pixels in byte share row. Only used with depth < 8 + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 + true, // reverse_pixels_in_word + 0, // Set column command + 0, // Set row command + 0, // Write memory command + 0xd3, // set vertical scroll command + display_init_sequence, + sizeof(display_init_sequence), + NULL, + 0x81, + 1.0f, // brightness + false, // auto_brightness + true, // single_byte_bounds + true, // data as commands + true, // auto_refresh + 60, // native_frames_per_second + true, // backlight_on_high + true); // SH1107_addressing } bool board_requests_safe_mode(void) { diff --git a/ports/raspberrypi/boards/adafruit_macropad_rp2040/pins.c b/ports/raspberrypi/boards/adafruit_macropad_rp2040/pins.c index bc57161ec5..17ff8d9a41 100644 --- a/ports/raspberrypi/boards/adafruit_macropad_rp2040/pins.c +++ b/ports/raspberrypi/boards/adafruit_macropad_rp2040/pins.c @@ -1,4 +1,5 @@ #include "shared-bindings/board/__init__.h" +#include "shared-module/displayio/__init__.h" STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_KEY1), MP_ROM_PTR(&pin_GPIO1) }, @@ -43,5 +44,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_i2c_obj) }, + + { MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)} }; MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);