簡 介
HPM6700/6400系列 MCU來自上海先楫半導(dǎo)體科技有限公司的高性能實(shí)時(shí)RISC-V微控制器,為工業(yè)自動化及邊緣計(jì)算應(yīng)用提供了極大的算力、高效的控制能力及豐富的多媒體功能。HPM6700/6400自帶的顯示控制系統(tǒng),包括LCD控制器及2D圖形加速單元,性能也非常強(qiáng)悍,可以輕松驅(qū)動1366x768高分辨率的LCD屏,且可達(dá)到60fps的高刷新幀率。
本文主要介紹了HPM6700/6400的顯示控制系統(tǒng),包括LCD控制器和2D圖形加速單元,并使用LVGL圖形庫開發(fā)的應(yīng)用示例,方便開發(fā)者快速開發(fā)。
LCD 控制器 (LCDC)
HPM6700/6400系列的圖形顯示接口 LCDC 支持連接多種不同種類,不同分辨率的 LCD(TFT) 顯示屏。LCDC 支持 24 位并行數(shù)據(jù)線,支持時(shí)鐘信號 PCLK,支持 HSYNC 和 VSYNC 同步信號。LCDC 可以作為總線主設(shè)備讀取片上和片外的存儲器的圖像數(shù)據(jù),并發(fā)送到外部顯示屏上。LCDC 的特性如下:
支持多達(dá) 24 位 RGB 顯示接口;
內(nèi)置 DMA,作為總線主設(shè)備讀取顯存數(shù)據(jù);
支持可配置的分辨率顯示屏,刷新率可達(dá) 1366x768, 60 fps;
支持多種數(shù)據(jù)格式輸入 ARGB8888,RGB565,YUV422/YCbCr422,Y8,1bpp,2bpp,4bpp 和 8bpp;
支持多達(dá)8 個(gè)圖層 Alpha Blending(混合疊加),其中 2 個(gè)主圖層支持逐行 YUV422/YCbCr422;
支持最大 pixclk 為 85MHz 。
LCDC 功能框圖
2D 圖形加速單元 (PDMA)
本產(chǎn)品支持 1 個(gè) 2D 圖形加速單元 PDMA。PDMA 支持處理逐行圖像數(shù)據(jù),支持按像素處理多種尺寸,多種顏色格式的圖形;
支持同時(shí)取2個(gè)圖層的數(shù)據(jù),每個(gè)圖層獨(dú)立啟用控制;
支持圖像格式轉(zhuǎn)換,包括ARGB8888,RGB565,YUV422H1P 圖像轉(zhuǎn)換;
支持圖像0°/90°/180°/270°旋轉(zhuǎn);
支持水平、垂直的翻轉(zhuǎn);
支持圖像縮放,X/Y拉伸、壓縮;
支持圖像截圖。
PDMA功能框圖
LVGL 應(yīng)用開發(fā)
1. LVGL 介紹
LVGL(輕巧而多功能的圖形庫)是一個(gè)免費(fèi)的開放源代碼圖形庫,它提供創(chuàng)建具有易于使用的圖形元素,精美的視覺效果和低內(nèi)存占用的嵌入式GUI所需的一切。
主要特性:
功能強(qiáng)大的構(gòu)建塊,例如按鈕,圖表,列表,滑塊,圖像等;
帶有動畫,抗鋸齒,不透明,平滑滾動的高級圖形各種輸入設(shè)備,例如觸摸板,鼠標(biāo),鍵盤,編碼器等;
支持UTF-8編碼的多語言;
多顯示器支持,如TFT,單色顯示器;
完全可定制的圖形元素;
獨(dú)立于任何微控制器或顯示器使用的硬件;
可擴(kuò)展以使用很少的內(nèi)存(64 KB閃存,16 KB RAM)進(jìn)行操作;
操作系統(tǒng),支持外部存儲器和GPU,但不是必需的;
單幀緩沖區(qū)操作,即使具有高級圖形效果;
用C語言編寫,以實(shí)現(xiàn)最大的兼容性(與C ++兼容);
模擬器可在沒有嵌入式硬件的PC上進(jìn)行嵌入式GUI設(shè)計(jì)。
可移植到MicroPython;
可快速上手的教程、示例、主題;
豐富的文檔教程;
在MIT許可下免費(fèi)和開源。
2. LVGL移植適配
官方已經(jīng)移植和適配好了LVGL,代碼結(jié)構(gòu)如下:
?./lvgl庫本身
?./lv_drivers顯示和輸入設(shè)備驅(qū)動程序
?./lv_examples示例和演示
?Lvgl官方網(wǎng)站(https://docs.lvgl.io)
?Lvgl官方博客站點(diǎn)(https://blog.lvgl.io)
?Sim在線模擬器網(wǎng)站(https://sim.lvgl.io)
?lv_sim_... 適用于各種IDE和平臺的模擬器項(xiàng)目
?lv_port_... 移植到其他開發(fā)板
?lv_binding_... 綁定到其他語言
?lv _… 移植到其他平臺
其中,lvgl,lv_examples和lv_drivers是最受維護(hù)、關(guān)注的核心存儲庫。
lv_drivers顯示接口:
要設(shè)置顯示,必須初始化 lv_disp_draw_buf_t 和 lv_disp_drv_t 變量。
lv_disp_draw_buf_t 保存顯示緩沖區(qū)信息的結(jié)構(gòu)體
lv_disp_drv_t HAL要注冊的顯示驅(qū)動程序、與顯示交互并處理與圖形相關(guān)的結(jié)構(gòu)體、回調(diào)函數(shù)。
顯示緩沖器:
關(guān)于緩沖區(qū)大小,有 3 種情況:
(1)一個(gè)緩沖區(qū):LVGL將屏幕的內(nèi)保存到緩沖區(qū)中并將其發(fā)送到顯示器。緩沖區(qū)可以小于屏幕。在這種情況下,較大的區(qū)域?qū)⒈恢禺嫵啥鄠€(gè)部分。如果只有很小的區(qū)域發(fā)生變化(例如按下按鈕),則只會刷新該部分的區(qū)域。
(2)兩個(gè)非屏幕大小的緩沖區(qū):具有兩個(gè)緩沖區(qū)的 LVGL 可以將其中一個(gè)作為顯示緩沖區(qū),而另一緩沖區(qū)的內(nèi)容發(fā)送到后臺顯示。應(yīng)該使用 DMA 或其他硬件將數(shù)據(jù)傳輸?shù)斤@示器,以讓CPU同時(shí)繪圖。這樣,渲染和刷新并行處理。與一個(gè)緩沖區(qū)的情況類似,如果緩沖區(qū)小于要刷新的區(qū)域,LVGL將按塊繪制顯示內(nèi)容
(3)兩個(gè)屏幕大小的緩沖區(qū):與兩個(gè)非屏幕大小的緩沖區(qū)相反,LVGL將始終提供整個(gè)屏幕的內(nèi)容,而不僅僅是塊。這樣,驅(qū)動程序可以簡單地將幀緩沖區(qū)的地址更改為從 LVGL 接收的緩沖區(qū)。因此,當(dāng)MCU具有 LCD/TFT 接口且?guī)彌_區(qū)只是 RAM 中的一個(gè)位置時(shí),這種方法的效果很好。
顯示驅(qū)動器:
一旦緩沖區(qū)初始化準(zhǔn)備就緒,就需要初始化顯示驅(qū)動程序。
lv_disp_drv_t的初始化,需要使用 lv_disp_drv_init(&disp_drv) 進(jìn)行初始化。最后,要為 LVGL 注冊顯示設(shè)備,需要調(diào)用lv_disp_drv_register(&disp_drv)。
在最簡單的情況下,僅需要設(shè)置 lv_disp_drv_t 的以下兩個(gè)字段:
?draw_buf 指向已初始化的 lv_disp_buf_t 變量的指針。
?flush_cb 回調(diào)函數(shù),用于將緩沖區(qū)的內(nèi)容復(fù)制到顯示的特定區(qū)域。刷新準(zhǔn)備就緒后,需要調(diào)用lv_disp_flush_ready()。LVGL可能會以多個(gè)塊呈現(xiàn)屏幕,因此多次調(diào)用flush_cb。使用 lv_disp_flush_is_last() 可以查看哪塊是最后渲染的。
其中,有一些可選的數(shù)據(jù)字段:
?hor_res 顯示器的水平分辨率。(默認(rèn)為 lv_conf.h 中的 LV_HOR_RES_MAX )
?ver_res 顯示器的垂直分辨率。(默認(rèn)為 lv_conf.h 中的 LV_VER_RES_MAX )
?color_chroma_key 色彩鍵控支持透明色。(默認(rèn)為 lv_conf.h 中的 LV_COLOR_TRANSP )
?user_data 驅(qū)動程序的自定義用戶數(shù)據(jù)。可以在 lv_conf.h 中修改其類型。
?anti-aliasing 使用抗鋸齒(anti-aliasing)(邊緣平滑)。缺省情況下默認(rèn)為 lv_conf.h 中的 LV_ANTIALIAS 。
?rotated 如果 1 交換 hor_res 和 ver_res 。兩種情況下 LVGL 的繪制方向相同(從上到下的線條),因此還需要重新配置驅(qū)動程序以更改顯示器的填充方向。
?screen_transp 如果為 1 ,則屏幕可以具有透明或不透明的樣式。需要在 lv_conf.h 中啟用 LV_COLOR_SCREEN_TRANSP 。
要使用GPU,可以使用以下回調(diào):
?gpu_fill_cb 用顏色填充內(nèi)存中的區(qū)域。
?gpu_blend_cb 使用不透明度混合兩個(gè)內(nèi)存緩沖區(qū)。
?gpu_wait_cb 如果在 GPU 仍在運(yùn)行 LVGL 的情況下返回了任何 GPU 函數(shù),則在需要確保GPU渲染就緒時(shí)將使用此函數(shù)。
其他一些可選的回調(diào),使單色、灰度或其他非標(biāo)準(zhǔn)RGB顯示一起使用時(shí)更輕松、優(yōu)化:
?rounder_cb 四舍五入要重繪的區(qū)域的坐標(biāo)。例如。2x2像素可以轉(zhuǎn)換為2x8。如果顯示控制器只能刷新特定高度或?qū)挾鹊膮^(qū)域(對于單色顯示器,通常為8 px高),則可以使用它。
?set_px_cb 編寫顯示緩沖區(qū)的自定義函數(shù)。如果顯示器具有特殊的顏色格式,則可用于更緊湊地存儲像素。(例如1位單色,2位灰度等)。這樣,lv_disp_buf_t中使用的緩沖區(qū)可以較小,以僅保留給定區(qū)域大小所需的位數(shù)。set_px_cb不能與兩個(gè)屏幕大小的緩沖區(qū)一起顯示緩沖區(qū)配置。
?monitor_cb 回調(diào)函數(shù)告訴在多少時(shí)間內(nèi)刷新了多少像素。
?clean_dcache_cb清除與顯示相關(guān)的所有緩存的回調(diào)
lv_drivers顯示接口:
要設(shè)置輸入設(shè)備,必須初始化 lv_indev_drv_t 變量,類型(indev_drv.type)可以是:
?LV_INDEV_TYPE_POINTER觸摸板或鼠標(biāo)
?LV_INDEV_TYPE_KEYPAD鍵盤或小鍵盤
?LV_INDEV_TYPE_ENCODER帶有左,右,推動選項(xiàng)的編碼器
?LV_INDEV_TYPE_BUTTON外部按鈕按下屏幕
3. 應(yīng)用開發(fā)
LVGL圖形庫功能控件有很多,這里不在詳細(xì)介紹,詳細(xì)API介紹查閱LVGL官網(wǎng)。
LVGL主要控件功能有:
使用 lvgl 圖形庫之前,我們還必須初始化 lvgl 以及相關(guān)其他組件。初始化的順序?yàn)椋?/strong>
?調(diào)用 lv_init() 初始化 lvgl 庫;
?初始化驅(qū)動程序;
?在 LVGL 中注冊顯示和輸入設(shè)備驅(qū)動程序;
?在中斷中每隔 x毫秒調(diào)用 lv_tick_inc(x)用以告知 lvgl 經(jīng)過的時(shí)間;
?每隔 x毫秒定期調(diào)用 lv_task_handler()用以處理與 lvgl 相關(guān)的任務(wù)。
SquareLine_Studio設(shè)計(jì)器:
(1)創(chuàng)建項(xiàng)目
(2)控件布局設(shè)計(jì)
(3)代碼生成
(4)代碼適配工程
(5)添加事件響應(yīng)代碼
運(yùn)行效果:
性能測試:
fps幀率:每秒鐘LCD圖形刷新的幀數(shù);
LVGL會通過內(nèi)部的tick,定時(shí)去刷屏幕;
10即1000ms/10ms=100FPS;
這個(gè)宏定義限定了LVGL刷屏幀率的上限,設(shè)定滿幀100幀;
使用全尺寸雙buffer。
實(shí)測結(jié)果:
總 結(jié)
本文介紹了 HPM6700/6400 LCD 控制器和2D圖形加速單元模塊,同時(shí)介紹了 LVGL 圖形界面庫功能及移植適配要點(diǎn),并基于 LVGL 圖形界面庫開發(fā)驅(qū)動點(diǎn)亮LCD屏的應(yīng)用示例。根據(jù)實(shí)測結(jié)果,LCD 幀率可達(dá)到60fps。官方 HPM-SDK 已將LVGL圖形庫移植適配完成,也提供了基于 LVGL 的demo示例,用戶可以非常便捷的使用HPM6700/6400 SDK 來完成LCD相關(guān)的應(yīng)用開發(fā)。
-
mcu
+關(guān)注
關(guān)注
146文章
17837瀏覽量
360430
發(fā)布評論請先 登錄
【強(qiáng)勢上新】HPM5E00:EtherCAT運(yùn)動控制MCU,先楫半導(dǎo)體再拓工業(yè)總線產(chǎn)品新版圖

先楫半導(dǎo)體MCU具有哪些優(yōu)勢?
先楫半導(dǎo)體發(fā)布高性能HPM6E8Y系列MCU
CES 2025:先楫半導(dǎo)體發(fā)布高性能機(jī)器人MCU
怎么從零基礎(chǔ)入門先楫
先楫HPM6E00技術(shù)日 | 百人研討共話工業(yè)應(yīng)用創(chuàng)新及發(fā)展趨勢
戰(zhàn)略合作丨華秋商城攜手先楫半導(dǎo)體,共創(chuàng)新篇

有動靜!先楫出了顆適用機(jī)器人的MCU!

有獎提問!先楫半導(dǎo)體HPM6E00系列新品發(fā)布會!!
先楫半導(dǎo)體亮相嵌入式盛會,強(qiáng)力賦能伺服控制與機(jī)器人領(lǐng)域

工業(yè)芯標(biāo)桿,邀您來圍觀——先楫HPM6E00新品上市在即

先楫半導(dǎo)體與您相約嵌入式盛會embedded world China Conference2024

評論