2414859_ja-JP

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2414859_ja-JP

2414859_ja-JP

RT1052ディスプレイの回転問題について、ご助言をお願いいたします。

購入した画面は縦向きですが、横向きで表示する必要があります。RT1052用の基本的な表示コードを生成するためにguiguiderを使用しました。

さらにソフトウェアローテーションを追加する

disp_drv.sw_rotate= 1;
disp_drv.rotated = 1;
 
単一バッファとして設定
SDK_ALIGN( __attribute__ ((section("lvglDisplayBuffer"))) static uint8_t s_frameBuffer[1][DEMO_FB_SIZE], DEMO_FB_ALIGN);
SDK_ALIGN( __attribute__ ((section("lvglDisplayBuffer"))) static uint8_t s_lvglBuffer[DEMO_DB_SIZE], DEMO_FB_ALIGN);
画面表示は正しいのですが、リフレッシュレートが遅すぎて私のニーズを満たしていません。
 
ダブルバッファとして設定
SDK_ALIGN( __attribute__((section("lvglDisplayBuffer"))) static uint8_t s_frameBuffer[2][DEMO_FB_SIZE], DEMO_FB_ALIGN);
バックライトだけが点灯しており、画面は真っ暗です。
何故ですか?
 

#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

i.MXRT 105xRe: 求助关于RT1052显示旋转问题

こんにちは、 @dsd さん。

ご質問ありがとうございます!

まず、以下のLVGLの制限事項をご確認ください。full_refresh=1が有効になっている場合、画面の回転はサポートされません。詳細は以下を参照してください。

 
さらに、RT1050は回転のためのハードウェアPXPサポートを備えており、こちらの方が推奨されるソリューションです。詳細については、 https://docs.nxp.com/bundle/GUIGUIDERUG-1.6.1/page/topics/rotate_screen_and_widgets.htmlを参照してください。
SDKにはPXPの回転に関するデモも含まれています。
 
よろしくお願いします、
ギャビン
Re: 求助关于RT1052显示旋转问题

こんにちは、

NXP i.MX RT1052をGuiguider(LVGL)と組み合わせて画面回転の開発に使用する場合、「シングルバッファのリフレッシュが遅く、ダブルバッファを使用すると画面が真っ黒になる」という問題が発生するのは、主にソフトウェアの回転とハードウェアのELCDIFコントローラ、ダブルバッファ切り替えメカニズム、およびメモリアドレスインデックスとの不一致が原因です。


よろしくお願いします

Re: 求助关于RT1052显示旋转问题どうもありがとうございました。PXPドライブを回転させることで問題が解決し、完全に解決しました。
标记 (1)
无评分
版本历史
最后更新:
星期四
更新人: