在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

AMetal適配:以TIM為例來展示如何開發通用驅動外設代碼

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

基于定時器、RTC、WDT本質上均是計數器的共性,本次將這三種通用外設統一為TIM。以TIM為例,來展示如何開發通用驅動外設代碼。對于AMetal所提供的標準層驅動文件,均存放于ametal\interface路徑下。

如下圖所示,開發通用外設驅動主要包含以下步驟:了解通用外設標準接口層、外設硬件層開發、外設驅動層開發、外設用戶配置文件開發、外設例程文件開發。

poYBAGJ8zF6AYggjAAEZC_YKIIg997.png

圖1 通用外設文件結構

了解通用外設標準層

1、通用外設標準接口相關類型定義

以WDT為例,如下所示為WDT的標準接口文件中對每個結構體和handle的詳細介紹。

poYBAGJ8zIGALf0_AACXP2U9aZQ008.png

圖2WDT標準接口文件結構體定義

以此類推,對于定時器和RTC,其標準接口文件中均定義了驅動函數結構體、標準服務結構體和外設標準服務操作句柄。

struct am_xxx_drv_funcs結構體

該驅動函數結構體表明了驅動層應該提供對應的函數;

typedef struct am_xxx_serv結構體

該標準服務結構體定義了標準的通用外設服務,從而包含了需要驅動層為標準接口層提供的全部內容。驅動層就只需定義這樣一個結構體變量,然后賦好相應的值,再以某種方式提供給標準接口層即可。

am_xxx_handle_t的定義

這是一個標準的操作句柄,本質上就是標準服務結構體指針類型,驅動層的初始化函數需要返回該類型的handle給用戶。當用戶在使用標準接口層函數時,就可以將獲取到的handle傳遞給標準層。那么,標準接口層就可以通過該handle訪問到驅動層提供的函數了。

2、標準接口函數

以WDT為例,如下所示為WDT標準接口函數,通過內聯函數來實現。這些函數就只是簡單地調用驅動層提供的函數,本身并沒有做什么事情。每個函數都有對應詳細的注釋,傳入參數和返回值。從中可以看到,在調用驅動層提供的函數時,就是將外設標準服務操作句柄(本質上為標準服務結構體)中的p_drv成員作為第一個參數傳遞。

pYYBAGJ8zM6AYbo3AADe5vWJxAs584.png

圖3WDT標準接口函數

外設HW層開發

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

poYBAGJ8zRKAEZWHAABFIsY0h1k150.png

圖4WDT寄存器列表

根據寄存器列表,了解了各個寄存器需要配置的各項功能和其他寄存器位該如何配合等。如下所示為WDT寄存器結構體定義。

poYBAGJ8zUOAGc6wAAAipFDdAEY854.png

圖5WDT寄存器塊結構體定義

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

poYBAGJ8zWmATwQiAABU7VxlcfI928.png

圖6WDT_CR寄存器操作函數

對于定時器、RTC的硬件層驅動開發亦是通過芯片手冊來編寫寄存器操作函數來完成驅動。

外設驅動層開發

1、定義設備信息結構體和設備結構體

在AMetal中,每個設備都應該有與之對應的設備結構體和設備信息結構體。設備結構體主要用于內存分配,與設備相關的變量都應該定義在設備結構體中。設備信息結構體主要包含該設備的一些相關信息。

pYYBAGJ8zYyAXhy1AABfaxRBxX0382.png

圖7 WDT設備信息結構體和設備結構體定義

2、驅動函數實現

驅動函數主要包括兩部分:提供給標準層的驅動函數和初始化、解初始化函數。

以WDT為例,如下所示為WDT外設的驅動層應該給標準接口層提供的函數,按照芯片手冊中對應操作說明來完成看門狗的驅動層函數。

pYYBAGJ8zamAM-vuAABDAp1hnqs470.png

圖8WDT提供給標準層函數定義

如下所示為WDT初始化函數和解初始化函數;初始化函數主要是為了初始化設備中的標準服務和硬件相關設置;解初始化函數是為了釋放內存資源和硬件資源。

pYYBAGJ8zcuAPBCJAABZM1BE3-8482.png

圖9 WDT初始化函數和解初始化函數

對于定時器和RTC的驅動層開發,其大致流程亦是如此。

外設用戶配置文件開發

開發完驅動層我們知道,用戶使用一個外設的過程是,先調用驅動初始化函數,該函數返回一個handle,后續的所有操作,用戶直接使用該handle作為參數調用標準接口層函數即可。

以某款芯片的 WDT為例,如下所示為WDT的用戶配置文件,主要包含設備信息結構體、設備實例結構體及其平臺初始化函數與解初始化函數。定義好變量和函數后,在頭文件中添加函數聲明。用戶在使用時,只需調用外設實例初始化函數,并保存其返回的handle,后續直接使用該handle作為標準接口的第一個參數來調用標準接口函數即可。

poYBAGJ8zfWAcY5cAACMWlSQyx4011.png

圖10WDT用戶配置文件

對于定時器和RTC的用戶配置文件,配置其對應的設備信息,添加平臺初始化函數與解初始化函數即可。

外設例程文件開發

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

對于STD示例,調用標準層函數和實例初始化函數返回的handle作為參數傳入,來實現外設功能。

對于HW示例,可參考驅動層函數來添加硬件層示例功能函數,最終實現外設功能。

至此,我們完成了一個通用外設驅動的開發。

來源:立功科技

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

    關注

    0

    文章

    83

    瀏覽量

    18173
  • ametal
    +關注

    關注

    2

    文章

    24

    瀏覽量

    11506
收藏 人收藏

    評論

    相關推薦

    EEPROM存儲器外設驅動代碼應用設計

    ZLG 用戶提供了大量標準的外設驅動與相關的協議組件,意在建立完整的生態系統。無論你選擇什么MCU,只要支持AMetal,都可實現“一次編程、終生使用”,其好處是你再也不要重新發明輪
    的頭像 發表于 12-20 06:28 ?1.2w次閱讀
    EEPROM存儲器<b class='flag-5'>外設</b>及<b class='flag-5'>驅動</b><b class='flag-5'>代碼</b>應用設計

    關于ametal_led通用接口的設計技巧分享

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

    RT-Thread驅動開發指南進階篇-動手驅動先楫未適配外設LCD

    經過上一篇的《《RT-Thread設備驅動開發指南》基礎篇--先楫bsp的hwtimer設備》闡述,可以大致了解到RT-thread設
    的頭像 發表于 02-25 11:04 ?3338次閱讀
    RT-Thread<b class='flag-5'>驅動</b><b class='flag-5'>開發</b>指南進階篇-動手<b class='flag-5'>驅動</b>先楫未<b class='flag-5'>適配</b>的<b class='flag-5'>外設</b>LCD

    【HAL庫每天一】第014TIM-通用定時器定時

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

    【HAL庫每天一】第017TIM-通用定時器呼吸燈

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

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

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

    靈動微電子MM32 MCU正式入駐AMetal平臺

    科技基于AMetal平臺靈動微電子MM32 MCU適配了底層驅動及標準接口,用戶使用時,可以完全脫離用戶手冊及繁雜的寄存器操作,直接調用AMeta
    發表于 01-16 11:38

    靈動微課堂 (第122講) | 基于MM32 MCU的OS移植與應用:AMetal平臺新建工程

    再重新發明輪子。我們今天將和大家一起實戰操作基于立功科技的AMetal平臺的MM32 MCU的新建工程。立功科技基于AMetal平臺靈動微電子MM32 MCU適配了底層
    發表于 05-22 17:04

    API設備驅動管理層與外設驅動適配層標準接口設計實現

    1、API 設備驅動管理層與外設驅動適配層標準接口實現bl_mcu_sdk 代碼層次結構主要分為以下幾層應用層:由用戶自己編寫的
    發表于 07-14 17:41

    SPI驅動展示如何使用ENV工具對BSP進行配置

    、SDIO、ADC 等,但是 BSP 工程默認沒有開啟這些外設驅動。RT-Thread 提供了 ENV 工具開啟或關閉 BSP 的外設驅動
    發表于 07-15 10:55

    AMetal開發通用外設的流程與規范

    上期講述了搭建工程讓MCU在AMetal平臺運行起來,后續開發外設驅動奠定基礎。接下來可以進入下一步的
    的頭像 發表于 04-27 16:58 ?2060次閱讀
    <b class='flag-5'>AMetal</b><b class='flag-5'>開發</b><b class='flag-5'>通用</b><b class='flag-5'>外設</b>的流程與規范

    AMetal開發通用外設GPIO驅動開發

    上期講述了開發通用外設之實戰TIM的流程,讓大家逐步深入了解如何開發通用
    的頭像 發表于 05-31 17:28 ?2311次閱讀

    AMetal代碼倉庫使用說明

    本文檔簡述了 AMetal 代碼倉庫的使用、 TortoiseGit 的使用以及版本控制等。AMetal 是芯片級的裸機軟件包,定義了跨平臺的通用接口(使得基于
    發表于 10-12 16:06 ?1次下載

    MindSDK應用基礎—TIM模塊樣

    MindSDKMM32使用星辰處理器內核的系列微控制器,實現了一組TIM工程,MindSDK中的TIM模塊對應硬件定時器TIM
    的頭像 發表于 06-29 17:16 ?1050次閱讀

    MindSDKMM32實現了一組TIM工程

    MindSDKMM32使用星辰處理器內核的系列微控制器,實現了一組TIM工程,MindSDK中的TIM模塊對應硬件定時器TIM
    的頭像 發表于 06-30 17:32 ?1021次閱讀
    主站蜘蛛池模板: 1000部啪啪未满十八勿入中国 | 日韩a级毛片免费观看 | 91在线视频观看 | 性欧美17一18sex性高清 | 速度与激情一 | 午夜黄色毛片 | jinv在线视频 | 综合天天| 日本一区不卡在线观看 | 影音先锋午夜资源网站 | 天天操天天插 | 久久久久久久国产精品影院 | 精品无码三级在线观看视频 | 午夜特片网 | av在线色| 日本不卡免费高清一级视频 | 亚洲女人小便 | 黄色午夜剧场 | 男人午夜禁片在线观看 | 日本在线播放一区 | 午夜在线视频观看版 | 91视频看看 | 午夜视频在线观看www中文 | 国产网站在线播放 | 国产人成午夜免视频网站 | 天堂最新版在线地址 | 日本三浦理惠子中文字幕 | 日本黄色片在线播放 | 热之国产| 五月婷婷综合在线 | 国产一级特黄全黄毛片 | 亚洲九色| 一级黄色录像视频 | 天天噜日日噜夜夜噜 | 网友偷自拍原创区 | 你懂的免费在线视频 | 日韩亚洲人成在线综合 | 深夜视频在线播放视频在线观看免费观看 | 四虎永久在线日韩精品观看 | 欧洲精品码一区二区三区免费看 | 特黄特级高清免费视频毛片 |