• 資料介紹
    • 1、引言
    • 2、問題描述
    • 3、問題分析與定位
    • 4、問題解決
    • 5、小結(jié)
  • 資料預(yù)覽
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

LAT1443 TouchGFX 圖形渲染沒有刷新DCache導(dǎo)致的花屏問題分析

03/06 14:36
315
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

LAT1443 TouchGFX 圖形渲染沒有刷新DCache導(dǎo)致的花屏問題分析

390.84 KB

1、引言

嵌入式圖形應(yīng)用系統(tǒng)中,當(dāng) CPU 執(zhí)行幀緩沖渲染操作時,建議使用數(shù)據(jù)緩存(DCache)來提高系統(tǒng)性能,但使用 Cortex-M7 執(zhí)行幀緩沖處理時有時可能會遇到數(shù)據(jù)不一致導(dǎo)致的花屏問題。

2、問題描述

要避免 DCache 引起的數(shù)據(jù)不一致問題,可將幀緩沖區(qū)域緩存屬性配置為透寫模式(Write-through)。透寫模式易于管理,無需通過軟件執(zhí)行緩存維護(hù),對于數(shù)據(jù)一致性更安全,但它會對幀緩沖區(qū)生成大量單次寫入操作,可能會影響整體系統(tǒng)性能。為了更高的性能,可以把幀緩沖區(qū)配置成 Normal write-back, write and read allocate(TEX=1, C=1, B=1)模式,簡稱 WBWA,關(guān)于根據(jù) TEX, C, B, and S 參數(shù)來配置不同的MPU 屬性,可以參考 PM0253 Table 91. TEX, C, B, and S encoding 表格。但 TouchGFX在執(zhí)行完圖形渲染操作后如果沒有執(zhí)行刷新 DCache 操作,可能會產(chǎn)生部分花屏現(xiàn)象。

3、問題分析與定位

通過查看生成的 TouchGFXHAL.cpp,會看到相關(guān)提示信息,每當(dāng) TouchGFX 引擎執(zhí)行完渲染操作時都會調(diào)用 flushFrameBuffer 函數(shù),以通知 TouchGFX 框架已執(zhí)行刷新。

如果幀緩沖區(qū)被配置成 WBWA 模式,Write back 模式在數(shù)據(jù)更新時只寫入 Cache,這樣做的優(yōu)點是速度快;但如果數(shù)據(jù)還未同步到物理內(nèi)存時,LTDC(或其他主機(jī))就對此內(nèi)存進(jìn)行訪問,則可能會引發(fā)數(shù)據(jù)不一致問題,進(jìn)而產(chǎn)生部分花屏現(xiàn)象。

4、問題解決

當(dāng)執(zhí)行完 flushFrameBuffer 之后,需要調(diào)用 SCB_CleanInvalidateDCache()函數(shù),該函數(shù)的作用是 Clean & Invalidate DCache,添加該函數(shù)后花屏問題消失。

5、小結(jié)

出現(xiàn)花屏的問題可能多種多樣,對于由于數(shù)據(jù)不一致導(dǎo)致的花屏,可以通過添加以上代碼解決。在有多主設(shè)備訪問同一內(nèi)存區(qū)域的場景下,也需要注意類似問題。

資料預(yù)覽

相關(guān)推薦