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