前言
在一些圖形界面應(yīng)用中,系統(tǒng)架構(gòu)會時??紤]使用 FSMC接口來驅(qū)動 8080接口的 LCD屏。在 MCU渲染完成,將framebuffer發(fā)送到 LCD時,有可能會遇到存儲大小端的問題。STM32MCU都采用 ARMCortex內(nèi)核,內(nèi)存使用小端格式。而 intel 8080接口的 LCD在傳輸 RGB數(shù)據(jù)時,使用的是大端格式。MCU在傳輸 RGB數(shù)據(jù)時,字節(jié)序有可能不匹配。在圖形界面應(yīng)用中,像素格式一般會使用 RGB888或 RGB565。而在使用 FSMC接口驅(qū)動 8bit位寬的 LCD時,很可能會使用 RGB565格式。本文中會介紹兩種方法來處理8bit8080接口 RGB565格式圖像數(shù)據(jù)字節(jié)序問題。
圖像數(shù)據(jù)字節(jié)序
8bit8080 LCD在接收 RGB565數(shù)據(jù)時,會將第一個字節(jié)解析為{R4-R0,G5-G3}, 第二個字節(jié)解析為{G2-G0,B4-B0},并按這個順序接收所有數(shù)據(jù),如下圖:
而在 MCU內(nèi)存中,數(shù)據(jù)按小端格式存放,RGB565數(shù)據(jù)存放的字節(jié)序如下:
如果不做調(diào)整直接將 RGB數(shù)據(jù)發(fā)給 LCD,MCU會先發(fā)送 Byte0,再發(fā)送 Byte 1,這樣 LCD顯示的內(nèi)容就會錯亂。對比上面兩張圖可以看出,只需將內(nèi)存中 Byte0與 Byte1字節(jié)位置對調(diào)(Byteswap),就能滿足 LCD接口的字節(jié)序要求。可以直接使用 CPU進(jìn)行 Byteswap,但這會消耗過多 CPU算力,同時也會占用更多內(nèi)存。這里我們將使用硬件進(jìn)行 Byteswap.
DMA2D 進(jìn)行Byteswap
DMA2D是 ST為圖形應(yīng)用專門設(shè)計(jì)并優(yōu)化的2D加速引擎,擁有豐富的功能。其字節(jié)序重排功能包含了Red blueswap以及 Byteswap特性。Red blueswap特性在 L4和 L4+系列 MCU都支持,而 Byteswap僅在L4+系列有支持。在 L4+系列上,通過配置 DMA2D_OPFCCR寄存器的 SB位,即可使能 Byteswap功能,在 DMA2D的outputFIFO中完成字節(jié)序調(diào)整,如下圖:
因此在圖形界面應(yīng)用中,需要 Byteswap時,可以考慮用 DMA2D來傳輸 RGB數(shù)據(jù)給 LCD。
GPDMA 進(jìn)行Byteswap
在新推出的 U5系列芯片上,集成了 GPDMA模塊。這是新的通用DMA模塊,能在傳輸數(shù)據(jù)的同時,還有豐富的數(shù)據(jù)處理能力。在初始化GPDMA時,通過配置源和目的數(shù)據(jù)位寬為 DMA_SRC_DATAWIDTH_WORD,在數(shù)據(jù)處理中配置 DataExchange為 DMA_EXCHANGE_DEST_BYTE,如下面代碼,也能實(shí)現(xiàn)Byteswap功能。
這樣,在圖形應(yīng)用中,既能使用 DMA2D加速渲染過程,也能使用 GPDMA的數(shù)據(jù)處理能力。通過 GPDMA直接向FSMC接口輸出 Byteswap后的 RGB565格式的圖形數(shù)據(jù)給LCD。
小結(jié)
在驅(qū)動 8位 8080接口 LCD時,需要注意圖像數(shù)據(jù)字節(jié)序問題。使用 RGB565格式時,可以使用 DMA2D或 GPDMA來傳輸圖像數(shù)據(jù),同時對圖像數(shù)據(jù)做 Byteswap調(diào)整,滿足LCD的字節(jié)序要求。
責(zé)任編輯:haq
-
lcd
+關(guān)注
關(guān)注
34文章
4424瀏覽量
167400 -
驅(qū)動
+關(guān)注
關(guān)注
12文章
1838瀏覽量
85262
原文標(biāo)題:工程師筆記 | 驅(qū)動 8 位 8080 接口 LCD 時的字節(jié)序問題
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論