After a few minutes, sometimes an Hour the shifting text move out of place. Any assistance would be great.
I am using LVGL, esp32 and RA8876 Display controller.
// LVGL defines
#define LV_HAL_TICK_MS 10
#define LV_HAL_TASK_PERIOD_MS 5
#define LV_LANDSCAPE 1 /* Landscape orientation: 0 (Portrait), 1 (Landscape) */
#define LV_HOR_RES_MAX 1024 /* Maximal horizontal resolution */
#define LV_VER_RES_MAX 600 /* Maximal vertical resolution */
// STATIC
DRAM_ATTR static lv_disp_draw_buf_t s_draw_buf;
DRAM_ATTR static lv_color_t *s_draw_buf_1;
DRAM_ATTR static lv_color_t *s_draw_buf_2;
DRAM_ATTR static const uint32_t s_draw_buf_len = LV_HOR_RES_MAX * 20;
// PUBLIC
esp_err_t lv_hal_init(void (*gui_entry)(void), UBaseType_t uxPriority, BaseType_t xCoreID)
{
esp_err_t err = ESP_OK;
// Initialize I2C Driver
i2c_config_t config;
config.mode = I2C_MODE_MASTER;
config.sda_io_num = S_I2C_SDA_IO;
config.scl_io_num = S_I2C_SCL_IO;
config.sda_pullup_en = GPIO_PULLUP_DISABLE;
config.scl_pullup_en = GPIO_PULLUP_DISABLE;
config.master.clk_speed = S_I2C_FREQ_HZ;
config.clk_flags = 0;
err = i2c_param_config(S_I2C_NUM, &config);
err = i2c_driver_install(S_I2C_NUM, config.mode, S_SLV_RX_BUF_LEN, S_SLV_TX_BUF_LEN, 0);
// LVGL Initialization
// Buffer Settup
s_color_depth = LV_COLOR_DEPTH;
s_gui_entry = gui_entry;
if ((s_draw_buf_1 = (lv_color_t *)heap_caps_malloc(s_draw_buf_len, MALLOC_CAP_32BIT | MALLOC_CAP_DMA)) == NULL)
{
err = ESP_ERR_NO_MEM;
goto handle_error_3;
}
// if ((s_draw_buf_2 = (lv_color_t *)heap_caps_malloc(s_draw_buf_len, MALLOC_CAP_32BIT | MALLOC_CAP_DMA)) == NULL)
// {
// err = ESP_ERR_NO_MEM;
// goto handle_error_2;
// }
// er_tftm070_6
if ((err = ra8876_init()) != ESP_OK)
{
ESP_LOGW(TAG, "RA8876 INIT FAILED");
goto handle_error_3;
}
if ((err = ra8876_config(LV_LANDSCAPE, s_color_depth)) != ESP_OK)
{
ESP_LOGW(TAG, "RA8876 CONFIG FAILED");
goto handle_error_3;
}
// lvgl
lv_init();
// display buffer
// lv_disp_draw_buf_init(&s_draw_buf, s_draw_buf_1, s_draw_buf_2, s_draw_buf_len);
// lv_disp_draw_buf_init(&s_draw_buf, s_draw_buf_1, s_draw_buf_2, s_draw_buf_len);
lv_disp_draw_buf_init(&s_draw_buf, s_draw_buf_1, NULL, s_draw_buf_len);
// display driver
static lv_disp_drv_t disp_drv = {0};
lv_disp_drv_init(&disp_drv);
disp_drv.draw_buf = &s_draw_buf;
disp_drv.hor_res = LV_HOR_RES_MAX;
disp_drv.ver_res = LV_VER_RES_MAX;
disp_drv.antialiasing = 1;
disp_drv.rotated = LV_DISP_ROT_90;
disp_drv.flush_cb = s_disp_flush;
disp_drv.full_refresh = 0;
if (lv_disp_drv_register(&disp_drv) == NULL)
{
ESP_LOGE(TAG, "disp driver register failed: %s", esp_err_to_name(err));
err = LV_HAL_ERR_DISP_DRIVER_NOT_REGISTERED;
goto handle_error_0;
}
// touch driver
esp_lcd_touch_config_t tp_cfg = {
.x_max = LV_HOR_RES_MAX,
.y_max = LV_VER_RES_MAX,
.rst_gpio_num = S_FT5316_RST,
.int_gpio_num = GPIO_NUM_NC,
.levels = {
.reset = 0,
.interrupt = 0,
},
};
err = esp_lcd_touch_new_i2c_ft5x06(&tp_cfg, &tp);
static lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv);
indev_drv.read_cb = touch_driver_read;
indev_drv.type = LV_INDEV_TYPE_POINTER;
if (lv_indev_drv_register(&indev_drv) == NULL)
{
ESP_LOGE(TAG, "indev driver register failed: %s", esp_err_to_name(err));
err = LV_HAL_ERR_INDEV_DRIVER_NOT_REGISTERED;
goto handle_error_0;
}
// file system driver
static lv_fs_drv_t fs_drv;
lv_fs_drv_init(&fs_drv);
fs_drv.letter = 'S';
fs_drv.open_cb = s_fs_open;
fs_drv.close_cb = s_fs_close;
fs_drv.read_cb = s_fs_read;
fs_drv.write_cb = s_fs_write;
fs_drv.seek_cb = s_fs_seek;
fs_drv.tell_cb = s_fs_tell;
lv_fs_drv_register(&fs_drv);
// lvgl tick
esp_timer_create_args_t periodic_timer_args = {0};
periodic_timer_args.callback = &s_lv_tick;
periodic_timer_args.name = "lvgl_tick";
if ((err = esp_timer_create(&periodic_timer_args, &s_tick_timer)) != ESP_OK)
{
ESP_LOGW(TAG, "RA8876 timer hal CREATE failed: %s", esp_err_to_name(err));
goto handle_error_0;
}
if ((err = esp_timer_start_periodic(s_tick_timer, LV_HAL_TICK_MS * 1000)) != ESP_OK)
{
ESP_LOGE(TAG, "RA8876 timer hal init failed: %s", esp_err_to_name(err));
goto handle_error_0;
}
// screen clear
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_set_size(scr, lv_pct(100), lv_pct(100));
lv_obj_set_pos(scr, 0, 0);
lv_obj_set_style_bg_color(scr, lv_color_col(), LV_PART_MAIN);
lv_scr_load(scr);
lv_timer_handler();
// screen set
if ((err = ra8876_set(true)) != ESP_OK)
{
goto handle_error_0;
}
// lvgl task
if (xTaskCreatePinnedToCore(&s_lv_hal_task, "lvgl_task", 8192, NULL, uxPriority, &s_task_xHandle, xCoreID) != pdPASS)
{
err = LV_HAL_ERR_LVGL_TASK_NOT_CREATED;
goto handle_error_0;
}
return err;
handle_error_0:
ESP_LOGW(TAG, "RA8876 timer hal init");
esp_timer_delete(s_tick_timer);
ESP_LOGW(TAG, "RA8876 buff _init1");
heap_caps_free(s_draw_buf_1);
handle_error_3:
ESP_LOGW(TAG, "RA8876 error 3 init");
return err;
}
LVGL, ESP32 Randomly moving text after sometime
Who is online
Users browsing this forum: ChatGPT-User, PerplexityBot and 9 guests