衡阳派盒市场营销有限公司

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

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

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

AMetal適配:以TIM為例來展示如何開發(fā)通用驅(qū)動(dòng)外設(shè)代碼

海闊天空的專欄 ? 來源:立功科技 ? 作者:立功科技 ? 2022-05-12 17:08 ? 次閱讀

基于定時(shí)器、RTC、WDT本質(zhì)上均是計(jì)數(shù)器的共性,本次將這三種通用外設(shè)統(tǒng)一為TIM。以TIM為例,來展示如何開發(fā)通用驅(qū)動(dòng)外設(shè)代碼。對(duì)于AMetal所提供的標(biāo)準(zhǔn)層驅(qū)動(dòng)文件,均存放于ametal\interface路徑下。

如下圖所示,開發(fā)通用外設(shè)驅(qū)動(dòng)主要包含以下步驟:了解通用外設(shè)標(biāo)準(zhǔn)接口層、外設(shè)硬件層開發(fā)、外設(shè)驅(qū)動(dòng)層開發(fā)、外設(shè)用戶配置文件開發(fā)、外設(shè)例程文件開發(fā)。

poYBAGJ8zF6AYggjAAEZC_YKIIg997.png

圖1 通用外設(shè)文件結(jié)構(gòu)

了解通用外設(shè)標(biāo)準(zhǔn)層

1、通用外設(shè)標(biāo)準(zhǔn)接口相關(guān)類型定義

以WDT為例,如下所示為WDT的標(biāo)準(zhǔn)接口文件中對(duì)每個(gè)結(jié)構(gòu)體和handle的詳細(xì)介紹。

poYBAGJ8zIGALf0_AACXP2U9aZQ008.png

圖2WDT標(biāo)準(zhǔn)接口文件結(jié)構(gòu)體定義

以此類推,對(duì)于定時(shí)器和RTC,其標(biāo)準(zhǔn)接口文件中均定義了驅(qū)動(dòng)函數(shù)結(jié)構(gòu)體、標(biāo)準(zhǔn)服務(wù)結(jié)構(gòu)體和外設(shè)標(biāo)準(zhǔn)服務(wù)操作句柄。

struct am_xxx_drv_funcs結(jié)構(gòu)體

該驅(qū)動(dòng)函數(shù)結(jié)構(gòu)體表明了驅(qū)動(dòng)層應(yīng)該提供對(duì)應(yīng)的函數(shù);

typedef struct am_xxx_serv結(jié)構(gòu)體

該標(biāo)準(zhǔn)服務(wù)結(jié)構(gòu)體定義了標(biāo)準(zhǔn)的通用外設(shè)服務(wù),從而包含了需要驅(qū)動(dòng)層為標(biāo)準(zhǔn)接口層提供的全部?jī)?nèi)容。驅(qū)動(dòng)層就只需定義這樣一個(gè)結(jié)構(gòu)體變量,然后賦好相應(yīng)的值,再以某種方式提供給標(biāo)準(zhǔn)接口層即可。

am_xxx_handle_t的定義

這是一個(gè)標(biāo)準(zhǔn)的操作句柄,本質(zhì)上就是標(biāo)準(zhǔn)服務(wù)結(jié)構(gòu)體指針類型,驅(qū)動(dòng)層的初始化函數(shù)需要返回該類型的handle給用戶。當(dāng)用戶在使用標(biāo)準(zhǔn)接口層函數(shù)時(shí),就可以將獲取到的handle傳遞給標(biāo)準(zhǔn)層。那么,標(biāo)準(zhǔn)接口層就可以通過該handle訪問到驅(qū)動(dòng)層提供的函數(shù)了。

2、標(biāo)準(zhǔn)接口函數(shù)

以WDT為例,如下所示為WDT標(biāo)準(zhǔn)接口函數(shù),通過內(nèi)聯(lián)函數(shù)來實(shí)現(xiàn)。這些函數(shù)就只是簡(jiǎn)單地調(diào)用驅(qū)動(dòng)層提供的函數(shù),本身并沒有做什么事情。每個(gè)函數(shù)都有對(duì)應(yīng)詳細(xì)的注釋,傳入參數(shù)和返回值。從中可以看到,在調(diào)用驅(qū)動(dòng)層提供的函數(shù)時(shí),就是將外設(shè)標(biāo)準(zhǔn)服務(wù)操作句柄(本質(zhì)上為標(biāo)準(zhǔn)服務(wù)結(jié)構(gòu)體)中的p_drv成員作為第一個(gè)參數(shù)傳遞。

pYYBAGJ8zM6AYbo3AADe5vWJxAs584.png

圖3WDT標(biāo)準(zhǔn)接口函數(shù)

外設(shè)HW層開發(fā)

HW 層對(duì)應(yīng)到具體的外設(shè),其提供的API基本上是直接操作寄存器的內(nèi)聯(lián)函數(shù),效率最高,內(nèi)聯(lián)函數(shù)直接定義在.h 文件中。根據(jù)芯片手冊(cè),來添加外設(shè)的寄存器列表;并編寫寄存器相關(guān)操作的內(nèi)聯(lián)函數(shù)。以某款芯片的WDT為例,如下所示為WDT的寄存器列表,從而來明確各個(gè)寄存器的功能。

poYBAGJ8zRKAEZWHAABFIsY0h1k150.png

圖4WDT寄存器列表

根據(jù)寄存器列表,了解了各個(gè)寄存器需要配置的各項(xiàng)功能和其他寄存器位該如何配合等。如下所示為WDT寄存器結(jié)構(gòu)體定義。

poYBAGJ8zUOAGc6wAAAipFDdAEY854.png

圖5WDT寄存器塊結(jié)構(gòu)體定義

接下來需要編寫每個(gè)寄存器的功能操作函數(shù)即可完成外設(shè)硬件層的開發(fā)。以WDT的控制寄存器cr為例,來編寫該寄存器的硬件層函數(shù)接口,如下所示:

poYBAGJ8zWmATwQiAABU7VxlcfI928.png

圖6WDT_CR寄存器操作函數(shù)

對(duì)于定時(shí)器、RTC的硬件層驅(qū)動(dòng)開發(fā)亦是通過芯片手冊(cè)來編寫寄存器操作函數(shù)來完成驅(qū)動(dòng)。

外設(shè)驅(qū)動(dòng)層開發(fā)

1、定義設(shè)備信息結(jié)構(gòu)體和設(shè)備結(jié)構(gòu)體

在AMetal中,每個(gè)設(shè)備都應(yīng)該有與之對(duì)應(yīng)的設(shè)備結(jié)構(gòu)體和設(shè)備信息結(jié)構(gòu)體。設(shè)備結(jié)構(gòu)體主要用于內(nèi)存分配,與設(shè)備相關(guān)的變量都應(yīng)該定義在設(shè)備結(jié)構(gòu)體中。設(shè)備信息結(jié)構(gòu)體主要包含該設(shè)備的一些相關(guān)信息。

pYYBAGJ8zYyAXhy1AABfaxRBxX0382.png

圖7 WDT設(shè)備信息結(jié)構(gòu)體和設(shè)備結(jié)構(gòu)體定義

2、驅(qū)動(dòng)函數(shù)實(shí)現(xiàn)

驅(qū)動(dòng)函數(shù)主要包括兩部分:提供給標(biāo)準(zhǔn)層的驅(qū)動(dòng)函數(shù)和初始化、解初始化函數(shù)。

以WDT為例,如下所示為WDT外設(shè)的驅(qū)動(dòng)層應(yīng)該給標(biāo)準(zhǔn)接口層提供的函數(shù),按照芯片手冊(cè)中對(duì)應(yīng)操作說明來完成看門狗的驅(qū)動(dòng)層函數(shù)。

pYYBAGJ8zamAM-vuAABDAp1hnqs470.png

圖8WDT提供給標(biāo)準(zhǔn)層函數(shù)定義

如下所示為WDT初始化函數(shù)和解初始化函數(shù);初始化函數(shù)主要是為了初始化設(shè)備中的標(biāo)準(zhǔn)服務(wù)和硬件相關(guān)設(shè)置;解初始化函數(shù)是為了釋放內(nèi)存資源和硬件資源。

pYYBAGJ8zcuAPBCJAABZM1BE3-8482.png

圖9 WDT初始化函數(shù)和解初始化函數(shù)

對(duì)于定時(shí)器和RTC的驅(qū)動(dòng)層開發(fā),其大致流程亦是如此。

外設(shè)用戶配置文件開發(fā)

開發(fā)完驅(qū)動(dòng)層我們知道,用戶使用一個(gè)外設(shè)的過程是,先調(diào)用驅(qū)動(dòng)初始化函數(shù),該函數(shù)返回一個(gè)handle,后續(xù)的所有操作,用戶直接使用該handle作為參數(shù)調(diào)用標(biāo)準(zhǔn)接口層函數(shù)即可。

以某款芯片的 WDT為例,如下所示為WDT的用戶配置文件,主要包含設(shè)備信息結(jié)構(gòu)體、設(shè)備實(shí)例結(jié)構(gòu)體及其平臺(tái)初始化函數(shù)與解初始化函數(shù)。定義好變量和函數(shù)后,在頭文件中添加函數(shù)聲明。用戶在使用時(shí),只需調(diào)用外設(shè)實(shí)例初始化函數(shù),并保存其返回的handle,后續(xù)直接使用該handle作為標(biāo)準(zhǔn)接口的第一個(gè)參數(shù)來調(diào)用標(biāo)準(zhǔn)接口函數(shù)即可。

poYBAGJ8zfWAcY5cAACMWlSQyx4011.png

圖10WDT用戶配置文件

對(duì)于定時(shí)器和RTC的用戶配置文件,配置其對(duì)應(yīng)的設(shè)備信息,添加平臺(tái)初始化函數(shù)與解初始化函數(shù)即可。

外設(shè)例程文件開發(fā)

外設(shè)的例程文件主要分為HW層示例和STD示例。

對(duì)于STD示例,調(diào)用標(biāo)準(zhǔn)層函數(shù)和實(shí)例初始化函數(shù)返回的handle作為參數(shù)傳入,來實(shí)現(xiàn)外設(shè)功能。

對(duì)于HW示例,可參考驅(qū)動(dòng)層函數(shù)來添加硬件層示例功能函數(shù),最終實(shí)現(xiàn)外設(shè)功能。

至此,我們完成了一個(gè)通用外設(shè)驅(qū)動(dòng)的開發(fā)。

來源:立功科技

聲明:本文內(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)投訴
  • Tim
    Tim
    +關(guān)注

    關(guān)注

    0

    文章

    81

    瀏覽量

    17953
  • ametal
    +關(guān)注

    關(guān)注

    2

    文章

    24

    瀏覽量

    11421
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EEPROM存儲(chǔ)器外設(shè)驅(qū)動(dòng)代碼應(yīng)用設(shè)計(jì)

    ZLG 用戶提供了大量標(biāo)準(zhǔn)的外設(shè)驅(qū)動(dòng)與相關(guān)的協(xié)議組件,意在建立完整的生態(tài)系統(tǒng)。無論你選擇什么MCU,只要支持AMetal,都可實(shí)現(xiàn)“一次編程、終生使用”,其好處是你再也不要重新發(fā)明輪
    的頭像 發(fā)表于 12-20 06:28 ?1.2w次閱讀
    EEPROM存儲(chǔ)器<b class='flag-5'>外設(shè)</b>及<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>代碼</b>應(yīng)用設(shè)計(jì)

    關(guān)于ametal_led通用接口的設(shè)計(jì)技巧分享

    第八章深入理解AMetal,本文內(nèi)容8.1 LED 通用接口。
    的頭像 發(fā)表于 11-23 07:52 ?6665次閱讀
    關(guān)于<b class='flag-5'>ametal</b>_led<b class='flag-5'>通用</b>接口的設(shè)計(jì)技巧分享

    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ǔ)篇--先楫bsp的hwtimer設(shè)備》闡述,可以大致了解到RT-thread設(shè)
    的頭像 發(fā)表于 02-25 11:04 ?2782次閱讀
    RT-Thread<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>指南進(jìn)階篇-動(dòng)手<b class='flag-5'>驅(qū)動(dòng)</b>先楫未<b class='flag-5'>適配</b>的<b class='flag-5'>外設(shè)</b>LCD

    【HAL庫(kù)每天一】第014TIM-通用定時(shí)器定時(shí)

    /1i574oPv 密碼:r3s3(硬石YS-F1Pro開發(fā)板HAL庫(kù)例程持續(xù)更新\1. 軟件設(shè)計(jì)之基本裸機(jī)例程(HAL庫(kù)版本)\YSF1_HAL-014. TIM-通用定時(shí)器定時(shí)
    發(fā)表于 05-19 08:53

    【HAL庫(kù)每天一】第017TIM-通用定時(shí)器呼吸燈

    /1i574oPv 密碼:r3s3(硬石YS-F1Pro開發(fā)板HAL庫(kù)例程持續(xù)更新\1. 軟件設(shè)計(jì)之基本裸機(jī)例程(HAL庫(kù)版本)\YSF1_HAL-017. TIM-通用定時(shí)器呼吸燈
    發(fā)表于 05-22 10:42

    【HAL庫(kù)每天一】第018TIM-通用定時(shí)器輸入捕獲(脈沖測(cè)量)

    /1i574oPv 密碼:r3s3(硬石YS-F1Pro開發(fā)板HAL庫(kù)例程持續(xù)更新\1. 軟件設(shè)計(jì)之基本裸機(jī)例程(HAL庫(kù)版本)\TIM-通用定時(shí)器輸入捕獲(脈沖測(cè)量
    發(fā)表于 05-23 08:48

    靈動(dòng)微電子MM32 MCU正式入駐AMetal平臺(tái)

    科技基于AMetal平臺(tái)靈動(dòng)微電子MM32 MCU適配了底層驅(qū)動(dòng)及標(biāo)準(zhǔn)接口,用戶使用時(shí),可以完全脫離用戶手冊(cè)及繁雜的寄存器操作,直接調(diào)用AMeta
    發(fā)表于 01-16 11:38

    靈動(dòng)微課堂 (第122講) | 基于MM32 MCU的OS移植與應(yīng)用:AMetal平臺(tái)新建工程

    再重新發(fā)明輪子。我們今天將和大家一起實(shí)戰(zhàn)操作基于立功科技的AMetal平臺(tái)的MM32 MCU的新建工程。立功科技基于AMetal平臺(tái)靈動(dòng)微電子MM32 MCU適配了底層
    發(fā)表于 05-22 17:04

    API設(shè)備驅(qū)動(dòng)管理層與外設(shè)驅(qū)動(dòng)適配層標(biāo)準(zhǔn)接口設(shè)計(jì)實(shí)現(xiàn)

    1、API 設(shè)備驅(qū)動(dòng)管理層與外設(shè)驅(qū)動(dòng)適配層標(biāo)準(zhǔn)接口實(shí)現(xiàn)bl_mcu_sdk 代碼層次結(jié)構(gòu)主要分為以下幾層應(yīng)用層:由用戶自己編寫的
    發(fā)表于 07-14 17:41

    SPI驅(qū)動(dòng)展示如何使用ENV工具對(duì)BSP進(jìn)行配置

    、SDIO、ADC 等,但是 BSP 工程默認(rèn)沒有開啟這些外設(shè)驅(qū)動(dòng)。RT-Thread 提供了 ENV 工具開啟或關(guān)閉 BSP 的外設(shè)驅(qū)動(dòng)
    發(fā)表于 07-15 10:55

    AMetal開發(fā)通用外設(shè)的流程與規(guī)范

    上期講述了搭建工程讓MCU在AMetal平臺(tái)運(yùn)行起來,后續(xù)開發(fā)外設(shè)驅(qū)動(dòng)奠定基礎(chǔ)。接下來可以進(jìn)入下一步的
    的頭像 發(fā)表于 04-27 16:58 ?1935次閱讀
    <b class='flag-5'>AMetal</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>通用</b><b class='flag-5'>外設(shè)</b>的流程與規(guī)范

    AMetal開發(fā)通用外設(shè)GPIO驅(qū)動(dòng)開發(fā)

    上期講述了開發(fā)通用外設(shè)之實(shí)戰(zhàn)TIM的流程,讓大家逐步深入了解如何開發(fā)通用
    的頭像 發(fā)表于 05-31 17:28 ?2196次閱讀

    AMetal代碼倉(cāng)庫(kù)使用說明

    本文檔簡(jiǎn)述了 AMetal 代碼倉(cāng)庫(kù)的使用、 TortoiseGit 的使用以及版本控制等。AMetal 是芯片級(jí)的裸機(jī)軟件包,定義了跨平臺(tái)的通用接口(使得基于
    發(fā)表于 10-12 16:06 ?1次下載

    MindSDK應(yīng)用基礎(chǔ)—TIM模塊樣

    MindSDKMM32使用星辰處理器內(nèi)核的系列微控制器,實(shí)現(xiàn)了一組TIM工程,MindSDK中的TIM模塊對(duì)應(yīng)硬件定時(shí)器TIM
    的頭像 發(fā)表于 06-29 17:16 ?912次閱讀

    MindSDKMM32實(shí)現(xiàn)了一組TIM工程

    MindSDKMM32使用星辰處理器內(nèi)核的系列微控制器,實(shí)現(xiàn)了一組TIM工程,MindSDK中的TIM模塊對(duì)應(yīng)硬件定時(shí)器TIM
    的頭像 發(fā)表于 06-30 17:32 ?930次閱讀
    做生意大门方位风水| 百家乐官网筹码防伪| 百家乐官网长龙有几个| 明升娱乐 | 全讯网址| 高科技百家乐牌具| 澳门百家乐官网长赢打| 澳门百家乐官网娱乐城送体验金| 鸿运娱乐| 大发888手机游戏| 豪享博百家乐的玩法技巧和规则 | 网络棋牌室| 北京太阳城医院怎么样| 基础百家乐博牌| 百家乐投注网站是多少| 真人版百家乐官网试玩| 玩百家乐官网技巧巧| 叶城县| 足球现金网| 亲朋棋牌官网| 南非太阳城皇宫酒店| 乐天堂百家乐娱乐场| 香港百家乐赌场| 百家乐园搏彩论坛| 24山水口决阳宅| 嘉禾百家乐官网的玩法技巧和规则 | 电子百家乐技巧| 百家乐桌布橡胶| 泰山百家乐官网的玩法技巧和规则 | 永利博百家乐官网现金网| 百家乐官网注册赠金| 长汀县| 来安县| 桓台县| 百家乐官网网站出售| 百家乐官网赌场国际| 盘锦市| 霍城县| 防城港市| 百家乐官网视频世界| 百家乐官网看单技术|