RM新时代网站-首页

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

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

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

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

先楫半導(dǎo)體HPMicro ? 2024-02-24 08:16 ? 次閱讀

一、概述


(一)RT-Thread設(shè)備驅(qū)動(dòng)


《RT-Thread設(shè)備驅(qū)動(dòng)開發(fā)指南》書籍是RT-thread官方出品撰寫,系統(tǒng)講解RT-thread IO設(shè)備驅(qū)動(dòng)開發(fā)方法,從三方面進(jìn)行講解。

基礎(chǔ)篇:對(duì)RT-thread以及設(shè)備框架進(jìn)行介紹,再分別介紹基于IO框架中常用的外設(shè)設(shè)備,分別是UART、PIN、SPI/QSPI、HWTIMER、PWM、RTC、ADC、DAC、WDT。

進(jìn)階篇:介紹基于IO框架中稍比基礎(chǔ)篇復(fù)雜的外設(shè)設(shè)備,分別是SDIO、Touch、LCD、sensor、MTD nor、MTD nand、脈沖編碼器、加解密設(shè)備、PM設(shè)備。

高級(jí)篇:介紹更為復(fù)雜的外設(shè)設(shè)備,分別是WLAN、ETH、audio mic、audio sound、USB、CAN


(二)先楫hpmicro bsp


為了深入了解本書的內(nèi)容,得有一個(gè)單片機(jī)平臺(tái)進(jìn)行案例剖析,除了本書籍以STM32arm平臺(tái)進(jìn)行介紹,還可以以先楫hpmicro單片機(jī)系列的riscv平臺(tái)進(jìn)行講解。

剛好先楫在rtthread的bsp貢獻(xiàn)上,也是十分豐富。無論是在rtthread studio的bsp包上,還是rtthread倉庫的bsp支持上,都有提供了對(duì)應(yīng)的支持。

rtthread studio的SDK支持,包括了先楫目前所有的MCU系列。


fb06ad0c-d2a9-11ee-9118-92fbcf53809c.png


而在RT-thread上,bsp包的驅(qū)動(dòng)支持上,也包括了rtthread大部分設(shè)備驅(qū)動(dòng)。


fb10119e-d2a9-11ee-9118-92fbcf53809c.png


二、開發(fā)方法


(一)層級(jí)結(jié)構(gòu)


RT-Thread 提供了一套簡(jiǎn)單的 I/O 設(shè)備模型框架,如下圖所示,它位于硬件和應(yīng)用程序之間,共分成三層,從上到下分別是 I/O 設(shè)備管理層、設(shè)備驅(qū)動(dòng)框架層、設(shè)備驅(qū)動(dòng)層。


fb152cec-d2a9-11ee-9118-92fbcf53809c.png


而作為單片機(jī)的定時(shí)器外設(shè)hwtimer功能,要對(duì)接到該IO設(shè)備框架,需要實(shí)現(xiàn)hwtimer設(shè)備的操作方法、設(shè)備的注冊(cè)、以及驅(qū)動(dòng)的配置和驅(qū)動(dòng)驗(yàn)證。本文也是基于該開發(fā)方法進(jìn)行闡述。

上述對(duì)應(yīng)的三層驅(qū)動(dòng)層,在源碼上,可以device->hwtimer->drv_hwtimer,其中drv_hwtimer是先楫官方實(shí)現(xiàn)的對(duì)接框架的驅(qū)動(dòng)層。


fb20ec6c-d2a9-11ee-9118-92fbcf53809c.png


而設(shè)備驅(qū)動(dòng)框架層,提供了ops操作接口,分別以下的接口需要驅(qū)動(dòng)開發(fā)者實(shí)現(xiàn)注冊(cè)。


fb24a9ce-d2a9-11ee-9118-92fbcf53809c.png


(二)創(chuàng)建hwtimer設(shè)備


對(duì)hwtimer設(shè)備來說,在驅(qū)動(dòng)開發(fā)時(shí),需要先從rt_hwtimer_t結(jié)構(gòu)中派生出新的hwtimer設(shè)備模型,然后根據(jù)自己的設(shè)備類型定義私有數(shù)據(jù)域。

同樣先楫的hwtimer drivers也定義了自己的由rt_hwtimer_t派生出來的hwtimer設(shè)備。


fb2ab986-d2a9-11ee-9118-92fbcf53809c.png


當(dāng)然一個(gè)MCU也支持多個(gè)hwtimer,一個(gè)hwtimer驅(qū)動(dòng)可以支持多個(gè)hwtimer設(shè)備,可以通過使能BSP_USING_GPTMRx進(jìn)行開啟


fb30146c-d2a9-11ee-9118-92fbcf53809c.png


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


該操作方法就是上述所說的ops操作結(jié)構(gòu),屬于驅(qū)動(dòng)共用部分,也就是多個(gè)hwtimer設(shè)備可以共用一個(gè)ops操作。同樣先楫也實(shí)現(xiàn)了該操作方法,并且注冊(cè)到自身的hwtimer的父類hwtimer的ops中。


fb372504-d2a9-11ee-9118-92fbcf53809c.png

fb3ced4a-d2a9-11ee-9118-92fbcf53809c.png


簡(jiǎn)單舉例個(gè)操作方法的實(shí)現(xiàn),比如獲取設(shè)備當(dāng)前值count_get,原型如下:

rt_uint32_t (*count_get)(struct rt_hwtimer_device *timer);

而先楫實(shí)現(xiàn)的count_get是以上的hpm_hwtimer_count_get,可以看到,內(nèi)部是先從timer獲取廠家自身定義的hwtimer設(shè)備,再從里面獲取硬件定時(shí)器的基地址控制句柄,然后使用先楫自身的驅(qū)動(dòng)API獲取定時(shí)器的計(jì)數(shù)值進(jìn)行返回。



fb4a7cf8-d2a9-11ee-9118-92fbcf53809c.png



(四)注冊(cè)hwtimer設(shè)備


注冊(cè)hwtimer設(shè)備,rtthread的IO設(shè)備框架提供了一個(gè)API:rt_device_hwtimer_register


fb4e763c-d2a9-11ee-9118-92fbcf53809c.png


從傳參句柄可知道,注冊(cè)時(shí)需要提供設(shè)備句柄timer,設(shè)備名稱name,用戶自定義data作為傳參。

在先楫的drv_hwtimer的驅(qū)動(dòng)中,創(chuàng)建了個(gè)全局的hwtimer設(shè)備數(shù)組,里面包含了hwtimer的所有信息,包括設(shè)備名稱。然后在注冊(cè)初始化當(dāng)中,輪詢?cè)摂?shù)組使能的定時(shí)器設(shè)備依次注冊(cè)到rtthread的hwtimer設(shè)備當(dāng)中。


fb5aff6a-d2a9-11ee-9118-92fbcf53809c.png


在開發(fā)指南當(dāng)中,特別提到了一個(gè)注意點(diǎn),hwtimer設(shè)備句柄需要實(shí)現(xiàn)rt_hwtimer_info,定義硬件定時(shí)器的特征信息,如計(jì)數(shù)的最大最小頻率,最大計(jì)數(shù)值以及計(jì)數(shù)方向,而先楫也同樣進(jìn)行了實(shí)現(xiàn)。

fb624842-d2a9-11ee-9118-92fbcf53809c.png


(五)hwtimer設(shè)備中斷處理


在開發(fā)指南中,該部分也需要實(shí)現(xiàn),目的是將定時(shí)時(shí)間導(dǎo)致的中斷事件通知到hwtimer設(shè)備驅(qū)動(dòng)框架,讓驅(qū)動(dòng)框架完成后續(xù)的處理并通知應(yīng)用層。而該通知事件API則是rt_device_hwtimer_isr,該函數(shù)由rtthread的hwtimer設(shè)備驅(qū)動(dòng)框架提供。


fb69192e-d2a9-11ee-9118-92fbcf53809c.png


MCU下的hwtimer驅(qū)動(dòng),需要在中斷處理函數(shù)調(diào)用rt_device_hwtimer_isr函數(shù),以便通知hwtimer設(shè)備驅(qū)動(dòng)框架對(duì)應(yīng)中斷的發(fā)生。

在先楫的hwtimer驅(qū)動(dòng)中也是基于這個(gè)實(shí)現(xiàn)通知事件。


fb6e4d72-d2a9-11ee-9118-92fbcf53809c.png


從以上代碼可知,hpmicro實(shí)現(xiàn)的hwtimer設(shè)備驅(qū)動(dòng)接管了定時(shí)器的通用中斷服務(wù)函數(shù)hpm_hwtmr_isr,然后內(nèi)部調(diào)用了rtthread的hwtimer設(shè)備驅(qū)動(dòng)框架提供的rt_device_hwtimer_isr中斷處理函數(shù),通

知設(shè)備框架對(duì)應(yīng)的定時(shí)器定時(shí)時(shí)間到達(dá)。


(六)驅(qū)動(dòng)配置


1、Kconfig配置

驅(qū)動(dòng)配置主要通過Kconfig實(shí)現(xiàn),這里使用hpm6750evk2的bsp V1.4.1作為說明。

在board文件夾中,有個(gè)Kconfig配置了hpm6750evk2的板載驅(qū)動(dòng)信息。對(duì)于定時(shí)器驅(qū)動(dòng)的相關(guān)選項(xiàng)如下:

fb7928be-d2a9-11ee-9118-92fbcf53809c.png


RT_USING_HWTIMER:RT-thread的hwtimer設(shè)備驅(qū)動(dòng)框架下的代碼對(duì)應(yīng)的宏定義,控制hwtimer的驅(qū)動(dòng)框架的相關(guān)代碼是否會(huì)添加到工程中

BSP_USING_GPTMR:先楫的hwtimer驅(qū)動(dòng)下的代碼對(duì)應(yīng)的宏定義,控制先楫的hwtimer驅(qū)動(dòng)是否會(huì)添加到工程中

BSP_USING_GPTMR1: 使用先楫的定時(shí)器1


2、SConscript配置


libraries/drivers/SConscript文件為hwtimer驅(qū)動(dòng)添加判斷選項(xiàng),如果定義了BSP_USING_GPTMR,則對(duì)應(yīng)的驅(qū)動(dòng)文件drv_hwtimer就會(huì)被添加到工程的源文件中。

fb7e150e-d2a9-11ee-9118-92fbcf53809c.png


三、驅(qū)動(dòng)驗(yàn)證


使用hpm6750evk2的bsp V1.4.1作為說明,新建timer_demo的示例工程。


fb8395e2-d2a9-11ee-9118-92fbcf53809c.png


編譯燒錄代碼,使用list_device查看設(shè)備,可以看到注冊(cè)的設(shè)備已經(jīng)包含了hwtimer這個(gè)設(shè)備。


fb888624-d2a9-11ee-9118-92fbcf53809c.png


運(yùn)行自帶的shell命令hwtimer_sample,該命令會(huì)運(yùn)行5s的定時(shí),查看readme文檔


fb8cd5ee-d2a9-11ee-9118-92fbcf53809c.png

fb912f4a-d2a9-11ee-9118-92fbcf53809c.png


四、總結(jié)


1、基礎(chǔ)篇包含UART、PIN、SPI/QSPI、HWTIMER、PWM、RTC、ADC、DAC、WDT這些外設(shè),本文以先楫適配的HWTIMER驅(qū)動(dòng)進(jìn)行說明,能感受到先楫對(duì)于rtthread驅(qū)動(dòng)適配的完整性。

2、除了本文闡述的外設(shè),其他基礎(chǔ)外設(shè)同樣適配完整。



fb958928-d2a9-11ee-9118-92fbcf53809c.png

以上內(nèi)容來自先楫開發(fā)者原創(chuàng)分享。

我們始終相信開發(fā)者共創(chuàng)的力量。先楫社區(qū)堅(jiān)持開源共享、互惠互利,貼近每一個(gè)開發(fā)者,一步一個(gè)腳印,一點(diǎn)一滴積累,為成為更好的我們而不斷努力。

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

    關(guān)注

    0

    文章

    68

    瀏覽量

    10883
  • BSP
    BSP
    +關(guān)注

    關(guān)注

    1

    文章

    87

    瀏覽量

    26147
  • RTThread
    +關(guān)注

    關(guān)注

    8

    文章

    132

    瀏覽量

    40858
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread使用未默認(rèn)啟用的timer作為硬件定時(shí)器HWTIMER的步驟

    初學(xué) RT-Thread,在 RT-Thread studio 環(huán)境下,使用手里的 nucleo_L476 開發(fā)板來學(xué)習(xí) HWTimer 的使用,運(yùn)行官方
    的頭像 發(fā)表于 07-19 15:17 ?1792次閱讀
    <b class='flag-5'>RT-Thread</b>使用未默認(rèn)啟用的timer作為硬件定時(shí)器<b class='flag-5'>HWTIMER</b>的步驟

    RT-Thread設(shè)備驅(qū)動(dòng)開發(fā)指南基礎(chǔ)bsphwtimer設(shè)備

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

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

    經(jīng)過上一的《《RT-Thread設(shè)備驅(qū)動(dòng)開發(fā)指南》基礎(chǔ)--
    的頭像 發(fā)表于 02-25 11:04 ?2512次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)指南</b>進(jìn)階<b class='flag-5'>篇</b>-動(dòng)手<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>先</b><b class='flag-5'>楫</b>未適配的外設(shè)LCD

    開發(fā)者分享 | 基于RT-Thread BSP,使用CLion開發(fā)應(yīng)用

    本期開發(fā)者:朱彥祖RT-Thread資深工程師,HPM6700/6400元老級(jí)開發(fā)者及骨灰級(jí)用戶,輯生態(tài)社區(qū)常駐優(yōu)秀開發(fā)者,江湖人稱杭州吳
    的頭像 發(fā)表于 06-07 08:17 ?2799次閱讀
    <b class='flag-5'>開發(fā)</b>者分享 | 基于<b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>RT-Thread</b> <b class='flag-5'>BSP</b>,使用CLion<b class='flag-5'>開發(fā)</b>應(yīng)用

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

    本期書籍評(píng)測(cè)名單如下:大菠蘿Alpha 《RT-Thread設(shè)備驅(qū)動(dòng)開發(fā)指南》學(xué)習(xí)之UART設(shè)備驅(qū)動(dòng)
    發(fā)表于 02-22 15:30

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

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

    RT-Thread設(shè)備驅(qū)動(dòng)開發(fā)指南》學(xué)習(xí)之UART設(shè)備驅(qū)動(dòng)開發(fā)學(xué)習(xí)

    首先感謝發(fā)燒友社區(qū)提供的機(jī)會(huì),感謝RT-Thread社區(qū)。一、I/O設(shè)備模型RT-Thread 提供了一套簡(jiǎn)單的 I/O 設(shè)備模型框架,如下圖所示,它位于硬件和應(yīng)用程序之間,共分成三層
    發(fā)表于 04-14 23:13

    RT-Thread文檔_Nordic BSP 上手指南

    RT-Thread文檔_Nordic BSP 上手指南
    發(fā)表于 02-22 18:26 ?7次下載
    <b class='flag-5'>RT-Thread</b>文檔_Nordic <b class='flag-5'>BSP</b> 上手<b class='flag-5'>指南</b>

    RT-Thread文檔_HWTIMER 設(shè)備

    RT-Thread文檔_HWTIMER 設(shè)備
    發(fā)表于 02-22 18:34 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>HWTIMER</b> <b class='flag-5'>設(shè)備</b>

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

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

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

    RT-Thread的代表性產(chǎn)品和服務(wù)。 同時(shí),我們也邀請(qǐng)到的資深工程師楊帆,他將為開發(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 平臺(tái)<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> <b class='flag-5'>BSP</b> v1.3.0 發(fā)布

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

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

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

    親愛的小伙伴們:我們很高興地通知您,RT-ThreadBSPv1.4.0正式發(fā)布了!!1個(gè)小轉(zhuǎn)變:從這個(gè)版本開始,我們將更側(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> <b class='flag-5'>BSP</b> v1.4.0 正式發(fā)布

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

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