購入した画面は縦向きですが、横向きで表示する必要があります。RT1052用の基本的な表示コードを生成するためにguiguiderを使用しました。
さらにソフトウェアローテーションを追加する
#if FB_USE_SRAM
static void DEMO_WaitVsync(lv_disp_drv_t *disp_drv)
ヤージュ
s_framePending = true;
#if defined(SDK_OS_FREE_RTOS)
if (xSemaphoreTake(s_frameSema, portMAX_DELAY) != pdTRUE)
ヤージュ
PRINTF("ディスプレイのフラッシュに失敗しました\r\n");
assert(0);
}
#それ以外
while (s_framePending)
ヤージュ
}
#endif
}
static void copy_area(const lv_area_t *area, lv_color_t *color_p, uint8_t *fb, uint32_t fbStrideBytes)
ヤージュ
uint32_t y;
uint32_t areaWidth = lv_area_get_width(area);
fb += (area->y1 * fbStrideBytes + area->x1 * sizeof(lv_color_t));
for (y = area->y1; y <= area->y2; y++)
ヤージュ
lv_memcpy(fb, color_p, areaWidth * sizeof(lv_color_t));
fb += fbStrideBytes;
color_p += areaWidth;
}
}
static void DEMO_FlushDisplay(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
ヤージュ
/* 各小さな更新ごとに VSYNC を待機します。/
DEMO_WaitVsync(disp_drv);
/* ドローバッファからフレームバッファにデータをコピーします。/
copy_area(area, color_p, (uint8_t*) s_frameBuffer, LCD_WIDTH * LCD_FB_BYTE_PER_PIXEL);
SCB_CleanInvalidateDCache();
lv_disp_flush_ready(disp_drv);
}
#それ以外
static void DEMO_FlushDisplay(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
ヤージュ
// DCACHE_CleanByRange((uint32_t)color_p, DEMO_FB_SIZE);
DCACHE_CleanInvalidateByRange((uint32_t)color_p, DEMO_FB_SIZE);
ELCDIF_SetNextBufferAddr(LCDIF, (uint32_t)color_p);
s_framePending = true;
#if defined(SDK_OS_FREE_RTOS)
if (xSemaphoreTake(s_frameSema, portMAX_DELAY) == pdTRUE)
ヤージュ
/* 重要!!!
* グラフィックライブラリに、フラッシュの準備ができたことを通知します */
lv_disp_flush_ready(disp_drv);
}
それ以外
ヤージュ
PRINTF("ディスプレイのフラッシュに失敗しました\r\n");
assert(0);
}
#それ以外
while (s_framePending)
ヤージュ
}
/* 重要!!!
* グラフィックライブラリに、フラッシュの準備ができたことを通知します */
lv_disp_flush_ready(disp_drv);
#endif
}
#endif
こんにちは、 @dsd さん。
ご質問ありがとうございます!
まず、以下のLVGLの制限事項をご確認ください。full_refresh=1が有効になっている場合、画面の回転はサポートされません。詳細は以下を参照してください。
こんにちは、
NXP i.MX RT1052をGuiguider(LVGL)と組み合わせて画面回転の開発に使用する場合、「シングルバッファのリフレッシュが遅く、ダブルバッファを使用すると画面が真っ黒になる」という問題が発生するのは、主にソフトウェアの回転とハードウェアのELCDIFコントローラ、ダブルバッファ切り替えメカニズム、およびメモリアドレスインデックスとの不一致が原因です。
よろしくお願いします