Skip to content

Commit

Permalink
tulip_cc_r11 display functions
Browse files Browse the repository at this point in the history
  • Loading branch information
rhooper committed Dec 4, 2024
1 parent 17355f2 commit fa1b5a3
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 57 deletions.
15 changes: 3 additions & 12 deletions ports/espressif/boards/tulip_cc_r11/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,10 @@ static const mcu_pin_obj_t *red_pins[] = {
static void display_init(void) {

mp_int_t height = 0, width = 0, frequency = 0;
os_getenv_err_t result;

result = common_hal_os_getenv_int("CIRCUITPY_DISPLAY_WIDTH", &width);
if (result == GETENV_OK && width == 800) {
width = 800;
height = 480;
frequency = 6500000;

} else {
width = 1024;
height = 600;
frequency = 10000000;
}
width = TULIP_DISPLAY_WIDTH;
height = TULIP_DISPLAY_HEIGHT;
frequency = TULIP_DISPLAY_FREQUENCY;

dotclockframebuffer_framebuffer_obj_t *framebuffer = &allocate_display_bus_or_raise()->dotclock;
framebuffer->base.type = &dotclockframebuffer_framebuffer_type;
Expand Down
5 changes: 4 additions & 1 deletion ports/espressif/boards/tulip_cc_r11/mpconfigboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@
// UART pins attached to the USB-serial converter chip
#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO43)
#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO44)
#define CIRCUITPY_BOARD_UART (1)
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO43, .rx = &pin_GPIO44}}

#define CIRCUITPY_BOARD_I2C (1)
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO18, .sda = &pin_GPIO17}}

#define DOUBLE_TAP_PIN (&pin_GPIO0)
//#define CONFIG_I2S_LRCLK 2
//#define CONFIG_I2S_BCLK 8

#define TULIP_DISPLAY_FREQUENCY 16000000
#define TULIP_DISPLAY_FREQUENCY 10000000
#define TULIP_DISPLAY_WIDTH 1024
#define TULIP_DISPLAY_HEIGHT 600

Expand Down
5 changes: 0 additions & 5 deletions ports/espressif/boards/tulip_cc_r11/mpconfigboard.mk
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,4 @@ CIRCUITPY_ESP_PSRAM_FREQ = 80m

CIRCUITPY_ESPCAMERA = 0
CIRCUITPY_DOTCLOCKFRAMEBUFFER = 1
CIRCUITPY_WIFI = 1

CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_CANIO = 0
CIRCUITPY_USB_DEVICE = 0

12 changes: 6 additions & 6 deletions ports/espressif/boards/tulip_cc_r11/pins.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,11 +229,11 @@ static const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_I2S_WORD_SELECT), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_I2S_DATA), MP_ROM_PTR(&pin_GPIO5) },

{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) },
// { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) },
// { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) },

{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO17) },
// { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO18) },
// { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO17) },

// USB = D- 19, D+ 20

Expand All @@ -243,8 +243,8 @@ static const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_MIDI_OUT), MP_ROM_PTR(&pin_GPIO12) },

// boot mode button can be used in SW as well
{ MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO1) },
// { MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) },
// { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO1) },

{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,22 +60,39 @@ static int valid_pin(const mcu_pin_obj_t *pin, qstr name) {
return result;
}

void common_hal_dotclockframebuffer_framebuffer_construct(dotclockframebuffer_framebuffer_obj_t *self,
const mcu_pin_obj_t *de,
const mcu_pin_obj_t *vsync,
const mcu_pin_obj_t *hsync,
const mcu_pin_obj_t *dclk,
const mcu_pin_obj_t **red, uint8_t num_red,
const mcu_pin_obj_t **green, uint8_t num_green,
const mcu_pin_obj_t **blue, uint8_t num_blue,
int frequency, int width, int height,
int hsync_pulse_width, int hsync_back_porch, int hsync_front_porch, bool hsync_idle_low,
int vsync_pulse_width, int vsync_back_porch, int vsync_front_porch, bool vsync_idle_low,
bool de_idle_high, bool pclk_active_high, bool pclk_idle_high, int overscan_left) {

if (num_red != 5 || num_green != 6 || num_blue != 5) {
mp_raise_ValueError(MP_ERROR_TEXT("Must provide 5/6/5 RGB pins"));
static void allocate_gpio_range(
const mcu_pin_obj_t** pins,
const int num_pins,
const int expected_pins,
esp_lcd_rgb_panel_config_t* cfg,
int *gpio_num,
qstr pin_group_name
)
{
for (int i = 0; i < expected_pins; i++, (*gpio_num)++) {
cfg->data_gpio_nums[*gpio_num] = (i < num_pins ? valid_pin(pins[i], pin_group_name) : GPIO_NUM_NC);
}
}

void common_hal_dotclockframebuffer_framebuffer_construct(dotclockframebuffer_framebuffer_obj_t *self,
const mcu_pin_obj_t *de,
const mcu_pin_obj_t *vsync,
const mcu_pin_obj_t *hsync,
const mcu_pin_obj_t *dclk,
const mcu_pin_obj_t **red, uint8_t num_red,
const mcu_pin_obj_t **green, uint8_t num_green,
const mcu_pin_obj_t **blue, uint8_t num_blue,
int frequency, int width, int height,
int hsync_pulse_width, int hsync_back_porch, int hsync_front_porch, bool hsync_idle_low,
int vsync_pulse_width, int vsync_back_porch, int vsync_front_porch, bool vsync_idle_low,
bool de_idle_high, bool pclk_active_high, bool pclk_idle_high, int overscan_left) {

const int expected_red = 5;
const int expected_green = 6;
const int expected_blue = 5;
// if (num_red != 5 || num_green != 6 || num_blue != 5) {
// mp_raise_ValueError(MP_ERROR_TEXT("Must provide 5/6/5 RGB pins"));
// }

claim_and_record(de, &self->used_pins_mask);
claim_and_record(vsync, &self->used_pins_mask);
Expand Down Expand Up @@ -117,24 +134,28 @@ void common_hal_dotclockframebuffer_framebuffer_construct(dotclockframebuffer_fr
cfg->pclk_gpio_num = valid_pin(dclk, MP_QSTR_dclk);
cfg->clk_src = LCD_CLK_SRC_DEFAULT;

cfg->data_gpio_nums[0] = valid_pin(blue[0], MP_QSTR_blue);
cfg->data_gpio_nums[1] = valid_pin(blue[1], MP_QSTR_blue);
cfg->data_gpio_nums[2] = valid_pin(blue[2], MP_QSTR_blue);
cfg->data_gpio_nums[3] = valid_pin(blue[3], MP_QSTR_blue);
cfg->data_gpio_nums[4] = valid_pin(blue[4], MP_QSTR_blue);

cfg->data_gpio_nums[5] = valid_pin(green[0], MP_QSTR_green);
cfg->data_gpio_nums[6] = valid_pin(green[1], MP_QSTR_green);
cfg->data_gpio_nums[7] = valid_pin(green[2], MP_QSTR_green);
cfg->data_gpio_nums[8] = valid_pin(green[3], MP_QSTR_green);
cfg->data_gpio_nums[9] = valid_pin(green[4], MP_QSTR_green);
cfg->data_gpio_nums[10] = valid_pin(green[5], MP_QSTR_green);

cfg->data_gpio_nums[11] = valid_pin(red[0], MP_QSTR_red);
cfg->data_gpio_nums[12] = valid_pin(red[1], MP_QSTR_red);
cfg->data_gpio_nums[13] = valid_pin(red[2], MP_QSTR_red);
cfg->data_gpio_nums[14] = valid_pin(red[3], MP_QSTR_red);
cfg->data_gpio_nums[15] = valid_pin(red[4], MP_QSTR_red);
int gpio_num = 0;
allocate_gpio_range(blue, num_blue, expected_blue, cfg, &gpio_num, MP_QSTR_blue);
// cfg->data_gpio_nums[0] = valid_pin(blue[0], MP_QSTR_blue);
// cfg->data_gpio_nums[1] = valid_pin(blue[1], MP_QSTR_blue);
// cfg->data_gpio_nums[2] = valid_pin(blue[2], MP_QSTR_blue);
// cfg->data_gpio_nums[3] = valid_pin(blue[3], MP_QSTR_blue);
// cfg->data_gpio_nums[4] = valid_pin(blue[4], MP_QSTR_blue);

allocate_gpio_range(green, num_green, expected_green, cfg, &gpio_num, MP_QSTR_green);
// cfg->data_gpio_nums[5] = valid_pin(green[0], MP_QSTR_green);
// cfg->data_gpio_nums[6] = valid_pin(green[1], MP_QSTR_green);
// cfg->data_gpio_nums[7] = valid_pin(green[2], MP_QSTR_green);
// cfg->data_gpio_nums[8] = valid_pin(green[3], MP_QSTR_green);
// cfg->data_gpio_nums[9] = valid_pin(green[4], MP_QSTR_green);
// cfg->data_gpio_nums[10] = valid_pin(green[5], MP_QSTR_green);

allocate_gpio_range(red, num_red, expected_red, cfg, &gpio_num, MP_QSTR_red);
// cfg->data_gpio_nums[11] = valid_pin(red[0], MP_QSTR_red);
// cfg->data_gpio_nums[12] = valid_pin(red[1], MP_QSTR_red);
// cfg->data_gpio_nums[13] = valid_pin(red[2], MP_QSTR_red);
// cfg->data_gpio_nums[14] = valid_pin(red[3], MP_QSTR_red);
// cfg->data_gpio_nums[15] = valid_pin(red[4], MP_QSTR_red);

cfg->disp_gpio_num = GPIO_NUM_NC;

Expand Down

0 comments on commit fa1b5a3

Please sign in to comment.