一、前言
給 Hi3861 適配了硬件 spi ,master 模式下最高 spi 速率可以達到 40M,用來驅動 oled 屏幕。適配過程遇到了一個芯片bug,困擾了很久,clk 管腳驅動能力差,需要外接一個上拉電阻才能正常運行。適配完成移植 lvgl 8,分享適配的過程。
二、LVGL移植
上lvgl開源倉搞代碼,https://github.com/lvgl/lvgl
2.1 適配 Porting 層
關鍵點在于將 oled 的畫點函數和 lvgl 代碼 disp_flush 關聯起來。參考如下我的移植,此處 draw point 將畫點數據放到一個軟件 buff 里面不會刷新硬件,硬件的刷新我單獨創建一個線程干這活,所以使用 for 循環遍歷,簡單!
因為只有一個顯示,沒有適配輸入以及文件系統,這兩個 port 的適配之后再做。
2.2 頭文件適配
因為是 oled,只有單色,所以顏色我選了最低8 位色,同時將 lvgl 字體調整為 8 位。
除此之外就是調整 lv_conf.h 里面的屏幕寬度了,其他的可以再后續修改。
2.3 liteos 線程適配
首先適配 lvgl tick 心跳,創建一個軟件定時器,1ms 自加 1:
再創建一個軟件定時器周期性的調用 lvgl 的 周期處理函數:
前面說的我的 oled 的 spi 硬件刷新在單獨的線程里面執行,中斷回調的方式,每次刷新256字節,刷新器件,刷新線程會被掛起,釋放 cpu 資源,線程設計如下:
三、簡單的 Demo
寫一個簡單的 buttom demo:
static void lvgl_ui_init(void) { static lv_style_t style; lv_style_init(&style); lv_style_set_radius(&style, 2); lv_style_set_outline_width(&style, 2); lv_style_set_outline_color(&style, lv_palette_main(LV_PALETTE_BLUE)); lv_style_set_outline_pad(&style, 0); lv_obj_t *bkg_obj = lv_obj_create(lv_scr_act()); /*創建 obj*/ lv_obj_set_style_bg_color(bkg_obj , lv_color_hex(0x0),0); lv_obj_set_pos(bkg_obj ,0, 0); lv_obj_set_size(bkg_obj, 128, 64); lv_obj_t *btn = lv_btn_create(lv_scr_act()); /*Add a button to the current screen*/ lv_obj_set_style_bg_color(btn , lv_color_hex(0x0),0); lv_obj_set_size(btn, 70, 24); /*Set its size*/ lv_obj_add_style(btn, &style, 0); lv_obj_center(btn); lv_obj_t * label = lv_label_create(btn); /*Add a label to the button*/ lv_label_set_text(label, "Button"); /*Set the labels text*/ } |
四、下載運行
可以看到 oled 顯示創建好的按鍵。
審核編輯:湯梓紅
-
芯片
+關注
關注
455文章
50714瀏覽量
423137 -
上拉電阻
+關注
關注
5文章
359瀏覽量
30606 -
移植
+關注
關注
1文章
379瀏覽量
28124 -
Hi3861
+關注
關注
1文章
59瀏覽量
6491 -
LVGL
+關注
關注
1文章
83瀏覽量
2957
原文標題:四、下載運行
文章出處:【微信號:嵌入式Share,微信公眾號:嵌入式Share】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論