<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

RT-Thread設備驅動開發指南基礎篇—以先楫bsp的hwtimer設備為例

RTThread物聯網操作系統 ? 來源:RCSN嵌入式 ? 2024-02-20 16:01 ? 次閱讀

一、概述

(一)RT-Thread設備驅動

RT-Thread設備驅動開發指南》書籍是RT-thread官方出品撰寫,系統講解RT-thread IO設備驅動開發方法,從三方面進行講解。

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

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

高級篇:介紹更為復雜的外設設備,分別是WLAN、ETH、audio mic、audio sound、USB、CAN。

(二)先楫hpmicro bsp

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

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

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

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

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

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

二、開發方法

(一)層級結構

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

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

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

上述對應的三層驅動層,在源碼上,可以device->hwtimer->drv_hwtimer,其中drv_hwtimer是先楫官方實現的對接框架的驅動層。

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

而設備驅動框架層,提供了ops操作接口,分別以下的接口需要驅動開發者實現注冊。

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

(二)創建hwtimer設備

對hwtimer設備來說,在驅動開發時,需要先從rt_hwtimer_t結構中派生出新的hwtimer設備模型,然后根據自己的設備類型定義私有數據域。

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

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

當然一個MCU也支持多個hwtimer,一個hwtimer驅動可以支持多個hwtimer設備,可以通過使能BSP_USING_GPTMRx進行開啟

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

(三)實現hwtimer設備的操作方法

該操作方法就是上述所說的ops操作結構,屬于驅動共用部分,也就是多個hwtimer設備可以共用一個ops操作。同樣先楫也實現了該操作方法,并且注冊到自身的hwtimer的父類hwtimer的ops中。

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

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

簡單舉例個操作方法的實現,比如獲取設備當前值count_get,原型如下:

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

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

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

(四)注冊hwtimer設備

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

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

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

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

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

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

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

(五)hwtimer設備中斷處理

在開發指南中,該部分也需要實現,目的是將定時時間導致的中斷事件通知到hwtimer設備驅動框架,讓驅動框架完成后續的處理并通知應用層。而該通知事件API則是rt_device_hwtimer_isr,該函數由rtthread的hwtimer設備驅動框架提供。

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

MCU下的hwtimer驅動,需要在中斷處理函數調用rt_device_hwtimer_isr函數,以便通知hwtimer設備驅動框架對應中斷的發生。

在先楫的hwtimer驅動中也是基于這個實現通知事件。

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

從以上代碼可知,hpmicro實現的hwtimer設備驅動接管了定時器的通用中斷服務函數hpm_hwtmr_isr,然后內部調用了rtthread的hwtimer設備驅動框架提供的rt_device_hwtimer_isr中斷處理函數,通知設備框架對應的定時器定時時間到達。

(六)驅動配置

1、Kconfig配置

驅動配置主要通過Kconfig實現,這里使用hpm6750evk2的bsp V1.4.1作為說明。

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

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

RT_USING_HWTIMER:RT-thread的hwtimer設備驅動框架下的代碼對應的宏定義,控制hwtimer的驅動框架的相關代碼是否會添加到工程中

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

BSP_USING_GPTMR1: 使用先楫的定時器1

2、SConscript配置

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

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

三、驅動驗證

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

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

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

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

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

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

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

四、總結

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

2、除了本文闡述的外設,其他基礎外設同樣適配完整。

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




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • WLAN
    +關注

    關注

    2

    文章

    644

    瀏覽量

    72607
  • 中斷處理
    +關注

    關注

    0

    文章

    94

    瀏覽量

    10895
  • PWM波
    +關注

    關注

    0

    文章

    98

    瀏覽量

    16734
  • RT-Thread
    +關注

    關注

    31

    文章

    1165

    瀏覽量

    38973
  • 脈沖編碼器
    +關注

    關注

    0

    文章

    13

    瀏覽量

    8192

原文標題:RT-Thread設備驅動開發指南基礎篇——以先楫bsp的hwtimer設備為例

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

    RT-Thread支持各式各樣的BSP

    一. 前言大家知道,RT-Thread 已經支持了各式各樣的 BSP 了, STM32 ,RT-T
    發表于 08-04 09:08

    RT-Thread 架構圖

    RT-Thread 架構圖:RT-Thread開發指南開源地址內核層:RT-Thread 內核,是 RT-Thread 的核心部分,包括了內
    發表于 12-16 08:15

    【原創精選】RT-Thread征文精選技術文章合集

    rt-thread 驅動(六)serialX弊端及解決方法rt-thread 驅動(七)GP
    發表于 07-26 14:56

    如何使用RT-Thread的串口設備

    )交互。RT-Thread 提供給上層應用的是一個抽象的設備操作接口,給下層設備提供的是底層驅動框架。那么用戶如何使用設備操作接口
    發表于 10-25 11:05

    如何使用RT-Thread SPI設備驅動

    摘要本應用筆記驅動SPI接口的OLED顯示屏,說明了如何添加SPI設備驅動框架及底層硬件
    發表于 10-25 14:20

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

    本期書籍評測名單如下:大菠蘿Alpha 《RT-Thread設備驅動開發指南》學習之UART設備驅動
    發表于 02-22 15:30

    RT-Thread設備驅動開發指南》讀書筆記

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

    RT-Thread設備驅動開發指南》讀書測評

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

    RT-Thread設備驅動開發指南》學習之UART設備驅動開發學習

    首先感謝發燒友社區提供的機會,感謝RT-Thread社區。一、I/O設備模型RT-Thread 提供了一套簡單的 I/O 設備模型框架,如下圖所示,它位于硬件和應用程序之間,共分成三層
    發表于 04-14 23:13

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發組(2015-03-31)。RT-Thread做為國內有較大影響力的開源實時操作系統,本
    發表于 11-26 16:06 ?0次下載

    RT-Thread文檔_Nordic BSP 上手指南

    RT-Thread文檔_Nordic BSP 上手指南
    發表于 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 設備

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

    送《RT-Thread設備驅動開發指南》,手慢無!

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

    電子工程專輯放福利啦!免費領取500本《RT-Thread設備驅動開發指南

    6月面包板社區新用戶注冊 免費領取物聯學習大禮包! 大禮包包含: 1、《RT-Thread設備驅動開發指南》 2、RT-Thread線上教學
    的頭像 發表于 06-28 19:25 ?436次閱讀
    電子工程專輯放福利啦!免費領取500本《<b class='flag-5'>RT-Thread</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>開發指南</b>》
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>