一、概述
(一)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è)備,分別是UART、PIN、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、USB、CAN。
(二)先楫hpmicro bsp
為了深入了解本書的內(nèi)容,得有一個單片機平臺進行案例剖析,除了本書籍以STM32的arm平臺進行介紹,還可以以先楫hpmicro單片機系列的riscv平臺進行講解。
剛好先楫在rtthread的bsp貢獻上,也是十分豐富。無論是在rtthread studio的bsp包上,還是rtthread倉庫的bsp支持上,都有提供了對應(yīng)的支持。
rtthread studio的SDK支持,包括了先楫目前所有的MCU系列。
而在RT-Thread上,bsp包的驅(qū)動支持上,也包括了rtthread大部分設(shè)備驅(qū)動。
二、開發(fā)方法
(一)層級結(jié)構(gòu)
RT-Thread 提供了一套簡單的 I/O 設(shè)備模型框架,如下圖所示,它位于硬件和應(yīng)用程序之間,共分成三層,從上到下分別是 I/O 設(shè)備管理層、設(shè)備驅(qū)動框架層、設(shè)備驅(qū)動層。
而作為單片機的定時器外設(shè)hwtimer功能,要對接到該IO設(shè)備框架,需要實現(xiàn)hwtimer設(shè)備的操作方法、設(shè)備的注冊、以及驅(qū)動的配置和驅(qū)動驗證。本文也是基于該開發(fā)方法進行闡述。
上述對應(yīng)的三層驅(qū)動層,在源碼上,可以device->hwtimer->drv_hwtimer,其中drv_hwtimer是先楫官方實現(xiàn)的對接框架的驅(qū)動層。
而設(shè)備驅(qū)動框架層,提供了ops操作接口,分別以下的接口需要驅(qū)動開發(fā)者實現(xiàn)注冊。
(二)創(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è)備。
當(dāng)然一個MCU也支持多個hwtimer,一個hwtimer驅(qū)動可以支持多個hwtimer設(shè)備,可以通過使能BSP_USING_GPTMRx進行開啟
(三)實現(xiàn)hwtimer設(shè)備的操作方法
該操作方法就是上述所說的ops操作結(jié)構(gòu),屬于驅(qū)動共用部分,也就是多個hwtimer設(shè)備可以共用一個ops操作。同樣先楫也實現(xiàn)了該操作方法,并且注冊到自身的hwtimer的父類hwtimer的ops中。
簡單舉例個操作方法的實現(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ù)值進行返回。
(四)注冊hwtimer設(shè)備
注冊hwtimer設(shè)備,rtthread的IO設(shè)備框架提供了一個API:rt_device_hwtimer_register
從傳參句柄可知道,注冊時需要提供設(shè)備句柄timer,設(shè)備名稱name,用戶自定義data作為傳參。
在先楫的drv_hwtimer的驅(qū)動中,創(chuàng)建了個全局的hwtimer設(shè)備數(shù)組,里面包含了hwtimer的所有信息,包括設(shè)備名稱。然后在注冊初始化當(dāng)中,輪詢該數(shù)組使能的定時器設(shè)備依次注冊到rtthread的hwtimer設(shè)備當(dāng)中。
在開發(fā)指南當(dāng)中,特別提到了一個注意點,hwtimer設(shè)備句柄需要實現(xiàn)rt_hwtimer_info,定義硬件定時器的特征信息,如計數(shù)的最大最小頻率,最大計數(shù)值以及計數(shù)方向,而先楫也同樣進行了實現(xiàn)。
(五)hwtimer設(shè)備中斷處理
在開發(fā)指南中,該部分也需要實現(xiàn),目的是將定時時間導(dǎo)致的中斷事件通知到hwtimer設(shè)備驅(qū)動框架,讓驅(qū)動框架完成后續(xù)的處理并通知應(yīng)用層。而該通知事件API則是rt_device_hwtimer_isr,該函數(shù)由rtthread的hwtimer設(shè)備驅(qū)動框架提供。
MCU下的hwtimer驅(qū)動,需要在中斷處理函數(shù)調(diào)用rt_device_hwtimer_isr函數(shù),以便通知hwtimer設(shè)備驅(qū)動框架對應(yīng)中斷的發(fā)生。
在先楫的hwtimer驅(qū)動中也是基于這個實現(xiàn)通知事件。
從以上代碼可知,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)選項如下:
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就會被添加到工程的源文件中。
三、驅(qū)動驗證
使用hpm6750evk2的bsp V1.4.1作為說明,新建timer_demo的示例工程。
編譯燒錄代碼,使用list_device查看設(shè)備,可以看到注冊的設(shè)備已經(jīng)包含了hwtimer這個設(shè)備。
運行自帶的shell命令hwtimer_sample,該命令會運行5s的定時,查看readme文檔
四、總結(jié)
1、基礎(chǔ)篇包含UART、PIN、SPI/QSPI、HWTIMER、PWM、RTC、ADC、DAC、WDT這些外設(shè),本文以先楫適配的HWTIMER驅(qū)動進行說明,能感受到先楫對于rtthread驅(qū)動適配的完整性。
2、除了本文闡述的外設(shè),其他基礎(chǔ)外設(shè)同樣適配完整。
審核編輯:劉清
-
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)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論