RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

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

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

一、概述

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

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

來個效果:

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

二、開發(fā)方法

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

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

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

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

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

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

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

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

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

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

LCD的像素格式

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

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

(二)先楫LCDC外設(shè)介紹

對于先楫的LCDC外設(shè)硬件控制器

在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屏的單片機(jī)

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

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

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

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

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

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

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

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

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

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

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

1、init:初始化LCD設(shè)備

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

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

2、control:控制LCD設(shè)備

應(yīng)用程序也可以對LCD設(shè)備進(jìn)行控制,通過control方法完成。原型如下:

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

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

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

當(dāng)然在最新rtthread 5.0.2當(dāng)中也更新了幾個命令

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

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

(1)RTGRAPHIC_CTRL_RECT_UPDATE 更新顯存

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

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

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

故可以下實(shí)現(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設(shè)備

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

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

(六)驅(qū)動配置

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

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

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

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

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

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

(七)驅(qū)動驗(yàn)證

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

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

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

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

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

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

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





審核編輯:劉清

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

    關(guān)注

    112

    文章

    16332

    瀏覽量

    177800
  • RGB
    RGB
    +關(guān)注

    關(guān)注

    4

    文章

    798

    瀏覽量

    58460
  • LCD驅(qū)動
    +關(guān)注

    關(guān)注

    4

    文章

    88

    瀏覽量

    26639
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1285

    瀏覽量

    40077
  • 脈沖編碼器
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    8250

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    RT-Thread的代表性產(chǎn)品和服務(wù)。 同時,我們也邀請到的資深工程師楊帆,他將為開發(fā)者們帶來期待已久的熱門技術(shù)主題培訓(xùn),RT-Thread
    的頭像 發(fā)表于 11-03 19:10 ?759次閱讀
    上海線下培訓(xùn):<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ā)布

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

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

    公司最新技術(shù)和創(chuàng)新解決方案的機(jī)會。參與者將深入了解半導(dǎo)體和RT-Thread的代表性產(chǎn)品和服務(wù)。同時,我們也邀請到的資深工程師楊帆老
    的頭像 發(fā)表于 11-08 08:18 ?667次閱讀
    線下活動|<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ū)動基礎(chǔ)進(jìn)階篇-進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié)

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

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

    親愛的小伙伴們:我們很高興地通知您,RT-ThreadBSPv1.4.0正式發(fā)布了?。?個小轉(zhuǎn)變:從這個版本開始,我們將更側(cè)重于利用RT-Thread豐富的組件以及特色的在線包,基
    的頭像 發(fā)表于 02-19 12:20 ?619次閱讀
    <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ū)動基礎(chǔ)進(jìn)階篇-進(jìn)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)

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

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

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

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

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