RM新时代网站-首页

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

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

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

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

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

一、概述

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

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

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

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

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

(二)先楫hpmicro bsp

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

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

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

d8dc6370-cfc5-11ee-a297-92fbcf53809c.png

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

d8f1876e-cfc5-11ee-a297-92fbcf53809c.png

二、開發(fā)方法

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

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

d909bfaa-cfc5-11ee-a297-92fbcf53809c.png

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

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

d90d8874-cfc5-11ee-a297-92fbcf53809c.png

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

d9191676-cfc5-11ee-a297-92fbcf53809c.png

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

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

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

d91d7220-cfc5-11ee-a297-92fbcf53809c.png

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

d921175e-cfc5-11ee-a297-92fbcf53809c.png

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

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

d92769c4-cfc5-11ee-a297-92fbcf53809c.png

d9353e32-cfc5-11ee-a297-92fbcf53809c.png

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

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

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

d938b684-cfc5-11ee-a297-92fbcf53809c.png

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

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

d93c4132-cfc5-11ee-a297-92fbcf53809c.png

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

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

d949363a-cfc5-11ee-a297-92fbcf53809c.png

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

d96632ee-cfc5-11ee-a297-92fbcf53809c.png

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

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

d96a84c0-cfc5-11ee-a297-92fbcf53809c.png

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

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

d97a123c-cfc5-11ee-a297-92fbcf53809c.png

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

(六)驅(qū)動配置

1、Kconfig配置

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

在board文件夾中,有個Kconfig配置了hpm6750evk2的板載驅(qū)動信息。對于定時器驅(qū)動的相關(guān)選項如下:

d97e96cc-cfc5-11ee-a297-92fbcf53809c.png

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

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

BSP_USING_GPTMR1: 使用先楫的定時器1

2、SConscript配置

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

d9822aee-cfc5-11ee-a297-92fbcf53809c.png

三、驅(qū)動驗證

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

d98f8d1a-cfc5-11ee-a297-92fbcf53809c.png

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

d994fb42-cfc5-11ee-a297-92fbcf53809c.png

運行自帶的shell命令hwtimer_sample,該命令會運行5s的定時,查看readme文檔

d99898e2-cfc5-11ee-a297-92fbcf53809c.png

d99cce6c-cfc5-11ee-a297-92fbcf53809c.png

四、總結(jié)

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

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

d9adee2c-cfc5-11ee-a297-92fbcf53809c.png




審核編輯:劉清

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

    關(guān)注

    2

    文章

    657

    瀏覽量

    73083
  • 中斷處理
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    10967
  • PWM波
    +關(guān)注

    關(guān)注

    0

    文章

    99

    瀏覽量

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

    關(guān)注

    31

    文章

    1285

    瀏覽量

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

    關(guān)注

    0

    文章

    13

    瀏覽量

    8250

原文標(biāo)題:RT-Thread設(shè)備驅(qū)動開發(fā)指南基礎(chǔ)篇——以先楫bsp的hwtimer設(shè)備為例

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

    經(jīng)過上一的《《RT-Thread設(shè)備驅(qū)動開發(fā)指南》基礎(chǔ)--
    的頭像 發(fā)表于 02-25 11:04 ?2513次閱讀
    <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'>驅(qū)動</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元老級開發(fā)者及骨灰級用戶,輯生態(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é)束-【書籍評測活動NO.4】RT-Thread官方撰寫,涵蓋26種設(shè)備驅(qū)動開發(fā)指南

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

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

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

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

    首先感謝發(fā)燒友社區(qū)提供的機會,感謝RT-Thread社區(qū)。一、I/O設(shè)備模型RT-Thread 提供了一套簡單的 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ū)動開發(fā)指南》,手慢無!

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

    上海線下培訓(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 ?588次閱讀
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>BSP</b> v1.3.0 發(fā)布

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

    公司最新技術(shù)和創(chuàng)新解決方案的機會。參與者將深入了解半導(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>快速上手

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

    親愛的小伙伴們:我們很高興地通知您,RT-ThreadBSPv1.4.0正式發(fā)布了??!1個小轉(zhuǎn)變:從這個版本開始,我們將更側(cè)重于利用RT-Thread豐富的組件以及特色的在線包,基
    的頭像 發(fā)表于 02-19 12:20 ?620次閱讀
    <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ū)動開發(fā)指南》基礎(chǔ)--bsphwtimer設(shè)備

    一、概述(一)RT-Thread設(shè)備驅(qū)動RT-Thread設(shè)備驅(qū)動
    的頭像 發(fā)表于 02-24 08:16 ?1627次閱讀
    《<b class='flag-5'>RT-Thread</b><b class='flag-5'>設(shè)備</b><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><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設(shè)備驅(qū)動開發(fā)指南

    強烈,他們迫切地希望有一本可以指導(dǎo)他們在RT-Thread開發(fā)驅(qū)動指南。為了解決開發(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ū)動</b><b class='flag-5'>開發(fā)指南</b>
    RM新时代网站-首页