0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread驅(qū)動開發(fā)指南進階篇-動手驅(qū)動先楫未適配的外設LCD

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RCSN嵌入式 ? 2024-02-25 11:04 ? 次閱讀

一、概述

經(jīng)過上一篇的《《RT-Thread設備驅(qū)動開發(fā)指南》基礎篇--以先楫bsp的hwtimer設備為例》闡述,可以大致了解到RT-thread設備驅(qū)動開發(fā)的方法步驟,開發(fā)指南中的進階篇外設主要是比基礎篇外設復雜點的外設設備,分別是SDIO、Touch、LCD、sensor、MTD nor、MTD nand、脈沖編碼器、加解密設備、PM設備。

對于進階篇的外設,本文不對先楫已經(jīng)支持的進階外設進行闡述,而是進行一次動手實踐驅(qū)動一個先楫尚未適配的驅(qū)動外設-LCD,來更加深入開發(fā)RT-thread的設備驅(qū)動。

來個效果:

在官方示例的wifi_web_camera_demo基礎上加上lcd驅(qū)動顯示攝像頭

二、開發(fā)方法

(一)RT-thread的LCD驅(qū)動框架介紹

LCD驅(qū)動,跟其他外設也類似,無非就是IO設備管理框架-->LCD設備驅(qū)動框架->LCD設備驅(qū)動。

IO設備管理層主要為設備框架提供統(tǒng)一的操作接口,包括rt_device_read/write/open/close/control等。而做好一個外設驅(qū)動,最終的目標就是應用上使用這些統(tǒng)一操作接口,無需理會底層操作。

LCD設備驅(qū)動框架層是RT-thread對LCD基本功能的抽象,是一層通用的軟件層,和硬件平臺無關,抽象了LCD設備的類型定義和具體的操作方法,其框架源碼在rtdef.h中

LCD的信息結(jié)構(gòu) rt_device_graphic_info,定義了像素格式,位寬,寬高、顯存地址等。

50354092-d249-11ee-a297-92fbcf53809c.png

LCD的操作接口rt_device_graphic_ops,定義了LCD的繪圖操作,比如像素點、畫線等操作。

503e984a-d249-11ee-a297-92fbcf53809c.png

LCD的控制命令,比如更新顯存、開關LCD、獲取信息、等待VSYNC等。

504245a8-d249-11ee-a297-92fbcf53809c.png

LCD的像素格式

50471f42-d249-11ee-a297-92fbcf53809c.png

可見,RT-thread對于LCD的抽象操作還是比較直觀,完成以上的操作,再借助IO設備管理層提供的注冊接口rt_device_register進行注冊,即可使用IO設備管理接口操作LCD。

(二)先楫LCDC外設介紹

對于先楫的LCDC外設硬件控制器

在HPM6750上有RGB控制器,支持24位的RGB顯示接口

505e554a-d249-11ee-a297-92fbcf53809c.png

在HPM6800上,支持2 個 4 Lane MIPI-DSI/LVDS-Tx 顯示接口

5074e706-d249-11ee-a297-92fbcf53809c.png

對于在RT-thread上,也支持了hpm_sdk的panel組件,涵蓋了hpm6750和hpm6800的顯示適配。

508d7ac8-d249-11ee-a297-92fbcf53809c.png

對于hpm_sdk的panel組件介紹,可以參考文章《[hpm_application]選先楫!爽跑1080P or 720Pmipi屏的單片機

對于使用LCD硬件控制器(RGB,MIPI DSI)通信的屏幕,LCD設備驅(qū)動只需要實現(xiàn)LCD設備的操作方法struct rt_device_ops即可,比如control接口里更新硬件控制器的緩存區(qū)即可控制屏幕繪圖。

如此一來,配合先楫適配好的RT-thread BSP,可以很順手得適配好LCD的驅(qū)動,按先楫BSP的driver照葫蘆畫瓢個drv_lcd。

50a4b35a-d249-11ee-a297-92fbcf53809c.png

(三)創(chuàng)建LCD設備

下面來創(chuàng)建先楫的LCD設備。LCD設備模型從struct rt_device結(jié)構(gòu)體中派生,并添加自己的私有數(shù)據(jù)。

成員主要有LCD的基地址,中斷號,互斥鎖,LCD名稱等。

50b981ae-d249-11ee-a297-92fbcf53809c.png

實例化一個lcd的設備數(shù)組,可以存在多個lcd設備,里面包含設備的初始化參數(shù)。

50d0a0dc-d249-11ee-a297-92fbcf53809c.png

(四)實現(xiàn)LCD設備的操作方法

按照以上的定義,已經(jīng)實例化了一個hpm_lcd_ops結(jié)構(gòu)體,然后需要實現(xiàn)對應的操作函數(shù),也就是LCD設備定義操作方法。對于LCD設備來說,只有其中的init和control操作方法才有意義,而本文實現(xiàn)的也是這兩個接口,分別是hpm_lcd_init、hpm_lcd_control。

1、init:初始化LCD設備

對于該操作方法,先楫的LCD驅(qū)動代碼不需要執(zhí)行任何操作,只需要在注冊初始化LCD即可。

50d469ec-d249-11ee-a297-92fbcf53809c.png

2、control:控制LCD設備

應用程序也可以對LCD設備進行控制,通過control方法完成。原型如下:

50ed2a40-d249-11ee-a297-92fbcf53809c.png

其中參數(shù)cmd包含了控制LCD的方式,通用設備命令可取以下宏定義:

50f4fc34-d249-11ee-a297-92fbcf53809c.png

當然在最新rtthread 5.0.2當中也更新了幾個命令

50f8a82a-d249-11ee-a297-92fbcf53809c.png

本文在這里主要實現(xiàn)以下幾個命令

(1)RTGRAPHIC_CTRL_RECT_UPDATE 更新顯存

對于顯存的更新,可以使用控制器自身定義的顯存也可以使用傳入的顯存地址,在先楫的手冊中有提到影子寄存器加載使能功能,也就是顯存會在下一個VSYNC到達加載,這樣可以做到顯示的完整更新。

51019f34-d249-11ee-a297-92fbcf53809c.png

而在hpmicro的驅(qū)動中也提供了該API:lcdc_layer_set_next_buffer,這里適配的驅(qū)動使用第一層layer。

故可以下實現(xiàn):

51132a2e-d249-11ee-a297-92fbcf53809c.png

(2)RTGRAPHIC_CTRL_WAIT_VSYNC 等待幀完成

為了保證傳輸?shù)母咝Ш头浪毫?,這里使用中斷方式傳輸一幀,再下一幀更新之前等待VSYNC完畢。

512a9cf4-d249-11ee-a297-92fbcf53809c.png

(3)RTGRAPHIC_CTRL_GET_INFO 獲取LCD信息

主要獲取LCD的像素格式、寬高等,傳遞給args參數(shù)

512f54e2-d249-11ee-a297-92fbcf53809c.png

(4)RTGRAPHIC_CTRL_POWERON亮屏

RTGRAPHIC_CTRL_POWEROFF 息屏

調(diào)用hpm_sdk的panel組件接口即可。

51580b44-d249-11ee-a297-92fbcf53809c.png

(五)注冊LCD設備

使用IO設備框架的rt_device_register完成注冊,主要關注設備操作方法的賦值部分,以及保存lcd設備示例賦值給lcd的user_data成員。

515c18ba-d249-11ee-a297-92fbcf53809c.png

(六)驅(qū)動配置

在board的Kconfig中使能LCD,該宏控制LCD驅(qū)動相關代碼是否添加到工程中

5160178a-d249-11ee-a297-92fbcf53809c.png

另外添加panel組件,該宏先楫已經(jīng)實現(xiàn),這里使用的是hpm6750,故只有RGB接口。

516d6476-d249-11ee-a297-92fbcf53809c.png

在驅(qū)動drivers的SConscript文件添加LCD驅(qū)動的判斷選項,如果使能,drv_lcd.c則會被添加到工程中。

518bedba-d249-11ee-a297-92fbcf53809c.png

(七)驅(qū)動驗證

注冊設備之后,LCD設備將會在IO設備管理器中出現(xiàn),我們使用hpm6750evkmini的wifi_web_camera_demo這個官方示例作為驗證,燒錄驗證,使用list device命令查看到注冊的設備已經(jīng)包含了LCD設備。

519bbac4-d249-11ee-a297-92fbcf53809c.png

在wifi_web_camera_demo的示例上,在獲取camera圖像的接口中,添加lcd的設備操作,把圖像顯示到LCD上,只需要先打開lcd,然后進行control,兩條語句就可以實現(xiàn)顯示,特別方便操作。

51a05598-d249-11ee-a297-92fbcf53809c.png

最終可以實現(xiàn)使用簡單的IO設備即可操作LCD

52b2112e-d249-11ee-a297-92fbcf53809c.png

52b5c422-d249-11ee-a297-92fbcf53809c.png





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16411

    瀏覽量

    178701
  • RGB
    RGB
    +關注

    關注

    4

    文章

    800

    瀏覽量

    58594
  • LCD驅(qū)動
    +關注

    關注

    4

    文章

    88

    瀏覽量

    26661
  • RT-Thread
    +關注

    關注

    31

    文章

    1299

    瀏覽量

    40257
  • 脈沖編碼器
    +關注

    關注

    0

    文章

    13

    瀏覽量

    8260

原文標題:RT-Thread設備驅(qū)動開發(fā)指南進階篇--動手驅(qū)動先楫LCD外設

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RT-Thread設備驅(qū)動開發(fā)指南基礎—以bsp的hwtimer設備為例

    RT-Thread設備驅(qū)動開發(fā)指南》書籍是RT-thread官方出品撰寫,系統(tǒng)講解RT-thread IO設備
    的頭像 發(fā)表于 02-20 16:01 ?1753次閱讀
    <b class='flag-5'>RT-Thread</b>設備<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)指南</b>基礎<b class='flag-5'>篇</b>—以<b class='flag-5'>先</b><b class='flag-5'>楫</b>bsp的hwtimer設備為例

    已結(jié)束-【書籍評測活動NO.4】RT-Thread官方撰寫,涵蓋26種設備驅(qū)動開發(fā)指南

    設備驅(qū)動開發(fā)技能。本書內(nèi)容分為三:基礎、進階篇與高級?;A
    發(fā)表于 02-22 15:30

    RT-Thread設備驅(qū)動開發(fā)指南》讀書筆記

    的內(nèi)容,熟悉了驅(qū)動開發(fā)的基本流程之后,就可以根據(jù)自己的需要,選擇對應的章節(jié)學習。(3) 書上還說了,閱讀本書要求讀者具備了RT-Thread的基礎知識,因此建議與大家學習《嵌入式實時
    發(fā)表于 03-23 10:35

    RT-Thread設備驅(qū)動開發(fā)指南》讀書測評

    驅(qū)動開發(fā)指南》這本書主要分了三個部分,由基礎進階篇,高級組成,適用不同層次的開發(fā)者,對于不
    發(fā)表于 03-26 21:04

    送《RT-Thread設備驅(qū)動開發(fā)指南》,手慢無!

    迫切地希望有一本可以指導他們在RT-Thread開發(fā)驅(qū)動指南。 為了解決開發(fā)者的燃眉之急, 《RT
    的頭像 發(fā)表于 03-19 23:00 ?1415次閱讀

    【讀書分享】《RT-Thread設備驅(qū)動開發(fā)指南》讀書筆記

    基礎進階篇,高級三個部分。每個部分都有很多章節(jié),每一個章節(jié)都對應一個驅(qū)動類型,全書涉及的驅(qū)動如下圖: (2) 看下來,這本書其實更像是
    的頭像 發(fā)表于 03-28 13:05 ?1114次閱讀

    RT-Thread設備驅(qū)動開發(fā)指南》讀書筆記

    基礎,進階篇,高級三個部分。每個部分都有很多章節(jié),每一個章節(jié)都對應一個驅(qū)動類型,全書涉及的驅(qū)動如下圖: (2) 看下來,這本書其實更像是
    的頭像 發(fā)表于 04-01 01:45 ?2041次閱讀

    上海線下培訓:RT-Thread× HPM5300 for RT-Thread ,高性能 RISC-V 平臺開發(fā)快速上手

    RT-Thread的代表性產(chǎn)品和服務。 同時,我們也邀請到的資深工程師楊帆,他將為開發(fā)者們帶來期待已久的熱門技術主題培訓,RT-Thread
    的頭像 發(fā)表于 11-03 19:10 ?790次閱讀
    上海線下培訓:<b class='flag-5'>RT-Thread</b>×<b class='flag-5'>先</b><b class='flag-5'>楫</b>  HPM5300 for <b class='flag-5'>RT-Thread</b> ,高性能 RISC-V 平臺<b class='flag-5'>開發(fā)</b>快速上手

    RT-Thread BSP v1.3.0 發(fā)布

    各位的小伙伴們,我們很高興地通知您,半導體最新的RT-ThreadBSPv1.3.0正式發(fā)布了!!(該圖片來源于網(wǎng)絡)提供的主要功能
    的頭像 發(fā)表于 11-08 08:17 ?622次閱讀
    <b class='flag-5'>RT-Thread</b> BSP v1.3.0 發(fā)布

    線下活動|HPM5300 for RT-Thread ,高性能 RISC-V 平臺開發(fā)快速上手

    公司最新技術和創(chuàng)新解決方案的機會。參與者將深入了解半導體和RT-Thread的代表性產(chǎn)品和服務。同時,我們也邀請到的資深工程師楊帆老
    的頭像 發(fā)表于 11-08 08:18 ?683次閱讀
    線下活動|<b class='flag-5'>先</b><b class='flag-5'>楫</b>HPM5300 for <b class='flag-5'>RT-Thread</b> ,高性能 RISC-V 平臺<b class='flag-5'>開發(fā)</b>快速上手

    RK3568驅(qū)動指南驅(qū)動基礎進階篇-進階8 內(nèi)核運行ko文件總結(jié)

    RK3568驅(qū)動指南驅(qū)動基礎進階篇-進階8 內(nèi)核運行ko文件總結(jié)
    的頭像 發(fā)表于 01-31 14:58 ?1183次閱讀
    RK3568<b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b>|<b class='flag-5'>驅(qū)動</b>基礎<b class='flag-5'>進階篇</b>-<b class='flag-5'>進階</b>8 內(nèi)核運行ko文件總結(jié)

    RT-Thread BSP v1.4.0 正式發(fā)布

    親愛的小伙伴們:我們很高興地通知您,RT-ThreadBSPv1.4.0正式發(fā)布了??!1個小轉(zhuǎn)變:從這個版本開始,我們將更側(cè)重于利用RT-Thread豐富的組件以及特色的在線包,基
    的頭像 發(fā)表于 02-19 12:20 ?638次閱讀
    <b class='flag-5'>先</b><b class='flag-5'>楫</b> <b class='flag-5'>RT-Thread</b> BSP v1.4.0 正式發(fā)布

    RK3568驅(qū)動指南驅(qū)動基礎進階篇-進階5 自定義實現(xiàn)insmod命令實驗

    RK3568驅(qū)動指南驅(qū)動基礎進階篇-進階5 自定義實現(xiàn)insmod命令實驗
    的頭像 發(fā)表于 02-20 14:10 ?728次閱讀
    RK3568<b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b>|<b class='flag-5'>驅(qū)動</b>基礎<b class='flag-5'>進階篇</b>-<b class='flag-5'>進階</b>5 自定義實現(xiàn)insmod命令實驗

    RT-Thread設備驅(qū)動開發(fā)指南》基礎--以bsp的hwtimer設備為例

    一、概述(一)RT-Thread設備驅(qū)動RT-Thread設備驅(qū)動開發(fā)指南》書籍是RT-thread
    的頭像 發(fā)表于 02-24 08:16 ?1733次閱讀
    《<b class='flag-5'>RT-Thread</b>設備<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)指南</b>》基礎<b class='flag-5'>篇</b>--以<b class='flag-5'>先</b><b class='flag-5'>楫</b>bsp的hwtimer設備為例

    【好書推薦】RT-Thread設備驅(qū)動開發(fā)指南

    強烈,他們迫切地希望有一本可以指導他們在RT-Thread開發(fā)驅(qū)動指南。為了解決開發(fā)者的燃眉之急,《
    的頭像 發(fā)表于 08-01 08:35 ?675次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設備<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)指南</b>