RM新时代网站-首页

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

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

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

AMetal開發(fā):通用外設(shè)GPIO驅(qū)動的開發(fā)

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

上期講述了開發(fā)通用外設(shè)之實戰(zhàn)TIM的流程,讓大家逐步深入了解如何開發(fā)通用外設(shè)的驅(qū)動。接下來將繼續(xù)進行通用外設(shè)開發(fā)的實戰(zhàn)篇,本次向大家介紹開發(fā)通用外設(shè)之GPIO。

按照如下步驟開發(fā)通用外設(shè)GPIO驅(qū)動:

了解通用外設(shè)標準接口層、外設(shè)硬件層開發(fā)、外設(shè)驅(qū)動層開發(fā)、外設(shè)用戶配置文件開發(fā)。


圖片

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

標準層了解

1、標準接口相關(guān)類型定義

如下所示為GPIO的標準接口文件中對GPIO引腳功能、引腳模式、輸出電平以及中斷觸發(fā)方式等的定義。

圖片

圖2GPIO標準接口文件宏定義

2、標準接口函數(shù)

如下所示為GPIO標準層的函數(shù)接口,通過傳入引腳編號、配置功能標志、回調(diào)函數(shù)等對應(yīng)的參數(shù),即可實現(xiàn)GPIO引腳的功能配置。在了解GPIO外設(shè)標準層數(shù)據(jù)類型和接口函數(shù)之后,就明確了驅(qū)動層需要為標準層所提供的內(nèi)容。

圖片

圖3GPIO標準層函數(shù)接口

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

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

圖片

4GPIO寄存器列表

根據(jù)寄存器列表,我們了解并分析了各個寄存器功能以及要配置的各個功能,其他寄存器位該如何配合等。如下所示為GPIO寄存器結(jié)構(gòu)體定義。

圖片

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

接下來編寫每個寄存器的功能操作函數(shù)即可完成外設(shè)硬件層的開發(fā)。以GPIO的端口位清除寄存器brr為例,來編寫該寄存器的硬件層函數(shù)接口,如下所示:

圖片

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

在每個寄存器的操作函數(shù)編寫完畢后,可能硬件層的接口還有所欠缺,需要提供一些方便用戶使用的簡單的功能性函數(shù)。在后續(xù)開發(fā)時,若發(fā)現(xiàn)有需要,可以反過來再添加。

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

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

驅(qū)動層首先應(yīng)該搭建好相關(guān)結(jié)構(gòu),再去實現(xiàn)外設(shè)的功能函數(shù)。在AMetal中,每個設(shè)備都應(yīng)該有與之對應(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è)備的初始化配置信息,如中斷號、外設(shè)信息等成員。

圖片

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

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

驅(qū)動函數(shù)主要包括兩部分:一部分是提供給標準層的驅(qū)動函數(shù),另一部分是面向用戶的初始化、解初始化函數(shù)。

我們可根據(jù)標準接口層函數(shù)來搭建相應(yīng)的GPIO外設(shè)的驅(qū)動層功能函數(shù)框架;進一步通過芯片用戶手冊中對應(yīng)操作說明來完成GPIO的驅(qū)動層功能函數(shù)驅(qū)動。

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

圖片

圖8GPIO初始化函數(shù)和解初始化函數(shù)

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

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

以某款芯片的GPIO為例,如下所示為GPIO的用戶配置文件,主要包含設(shè)備信息結(jié)構(gòu)體、設(shè)備實例結(jié)構(gòu)體及其平臺初始化函數(shù)與解初始化函數(shù)。

圖片

圖9GPIO用戶配置文件

外設(shè)例程文件

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

對于STD示例,調(diào)用標準層函數(shù)和實例初始化函數(shù)來實現(xiàn)外設(shè)功能。

對于HW示例,通過調(diào)用硬件層的函數(shù)完成相應(yīng)的配置,以此實現(xiàn)功能。如下所示為通過硬件層驅(qū)動來實現(xiàn)按鍵切換LED狀態(tài)的示例。

圖片

圖10GPIO_HW層示例

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

來源:立功科技

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

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52051
  • ametal
    +關(guān)注

    關(guān)注

    2

    文章

    24

    瀏覽量

    11398
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

    經(jīng)過上一篇的《《RT-Thread設(shè)備驅(qū)動開發(fā)指南》基礎(chǔ)篇--以先楫bsp的hwtimer設(shè)備為例》闡述,可以大致了解到RT-thread設(shè)備驅(qū)動開發(fā)的方法步驟,
    的頭像 發(fā)表于 02-25 11:04 ?2515次閱讀
    RT-Thread<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>指南進階篇-動手<b class='flag-5'>驅(qū)動</b>先楫未適配的<b class='flag-5'>外設(shè)</b>LCD

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

    的本土通用MCU公司,可以為客戶提供從優(yōu)異芯片產(chǎn)品到核心算法、從完備參考設(shè)計方案到整機開發(fā)的全方位支持,真正為中國電子信息產(chǎn)業(yè)提供底層技術(shù)驅(qū)動和支持。立功科技與靈動微電子強強聯(lián)合,開啟MM32 MCU
    發(fā)表于 01-16 11:38

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

    做最原始封裝;驅(qū)動層在硬件層的基礎(chǔ)上進一步封裝,簡化對外設(shè)的操作;標準接口層提取出了一套標準API接口,不僅適用于AWorksOS開發(fā)平臺也適用于其他操作系統(tǒng)。圖1 AMetal構(gòu)架同
    發(fā)表于 05-22 17:04

    靈動微課堂 (第123講) | 基于MM32 MCU的OS移植與應(yīng)用:AMetal LED燈控制

    ;drives 目錄下包含了該開發(fā)板支持的驅(qū)動源文件及實現(xiàn);libc 目錄下是 AMetal 開發(fā)平臺相關(guān)的庫文件;service 目錄下面為用戶提供的一些標準服務(wù)接口;soc 目錄下
    發(fā)表于 05-28 16:19

    靈動微課堂 (第123講) | 基于MM32 MCU的OS移植與應(yīng)用:AMetal LED燈控制

    ;drives 目錄下包含了該開發(fā)板支持的驅(qū)動源文件及實現(xiàn);libc 目錄下是 AMetal 開發(fā)平臺相關(guān)的庫文件;service 目錄下面為用戶提供的一些標準服務(wù)接口;soc 目錄下
    發(fā)表于 05-28 16:19

    ESP32外設(shè)入門GPIO 精選資料推薦

    前言最近開發(fā)用到了ESP32,樂鑫已經(jīng)對接口進行比較深度的封裝,但是還是看了下外設(shè)的參考手冊,摘取了一部分結(jié)合自己的理解給記錄下來。如有異議,歡迎指正概述ESP32芯片具有34個物理GPIO。每個
    發(fā)表于 07-30 06:00

    基于Ametal平臺開發(fā),快速完成開發(fā)設(shè)計!

    傳統(tǒng)旋鈕采用機械式結(jié)構(gòu),面板上需要開孔,長時間使用易磨損、進灰塵等,采用新型吸附式磁旋鈕可以輕松解決上述問題。此磁旋鈕采用ZLG品牌的32位ARM單片機ZLG116做主控,并且基于Ametal平臺開發(fā),能夠快速完成開發(fā)設(shè)計。
    的頭像 發(fā)表于 05-04 09:11 ?7152次閱讀

    簡要分析Thread的通用GPIO設(shè)備驅(qū)動

    為了給用戶提供操作GPIO通用API,方便應(yīng)用程序開發(fā),RT-Thread中引入了通用GPIO設(shè)備驅(qū)動
    發(fā)表于 11-13 14:57 ?1483次閱讀

    Linux應(yīng)用開發(fā)【第九章】GPIO編程應(yīng)用開發(fā)

    設(shè)置GPIO方向 9.4.3 GPIO輸出實驗-LED輸出控制 9.4.4 GPIO輸入試驗-按鍵值讀取 9.4.5 LED和按鍵控制實驗 ? 9 GPIO編程應(yīng)用
    的頭像 發(fā)表于 12-10 19:21 ?788次閱讀
    Linux應(yīng)用<b class='flag-5'>開發(fā)</b>【第九章】<b class='flag-5'>GPIO</b>編程應(yīng)用<b class='flag-5'>開發(fā)</b>

    GPIO通用輸入輸出

    GPIO通用輸入輸出一、GPIO的功能概述用途:GPIO通用輸入輸出(General Purpose I/O)的簡稱,主要用于工業(yè)現(xiàn)場需要
    發(fā)表于 12-20 18:58 ?6次下載
    <b class='flag-5'>GPIO</b><b class='flag-5'>通用</b>輸入輸出

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

    上期講述了搭建工程讓MCU在AMetal平臺運行起來,為后續(xù)開發(fā)外設(shè)驅(qū)動奠定基礎(chǔ)。接下來可以進入下一步的通用
    的頭像 發(fā)表于 04-27 16:58 ?1839次閱讀
    <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適配:以TIM為例來展示如何開發(fā)通用驅(qū)動外設(shè)代碼

    基于定時器、RTC、WDT本質(zhì)上均是計數(shù)器的共性,本次將這三種通用外設(shè)統(tǒng)一為TIM。以TIM為例,來展示如何開發(fā)通用驅(qū)動
    的頭像 發(fā)表于 05-12 17:08 ?1847次閱讀
    <b class='flag-5'>AMetal</b>適配:以TIM為例來展示如何<b class='flag-5'>開發(fā)</b><b class='flag-5'>通用</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>外設(shè)</b>代碼

    AMetal代碼倉庫使用說明

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

    如何驅(qū)動Linux開發(fā)板LED燈

    Linux下的任何外設(shè)驅(qū)動,最終都是要配置相應(yīng)的硬件寄存器。前面的文章中介紹了新舊字符設(shè)備的驅(qū)動開發(fā)框架,也介紹了IMX6ULL處理器GPIO
    的頭像 發(fā)表于 04-14 11:41 ?955次閱讀
    如何<b class='flag-5'>驅(qū)動</b>Linux<b class='flag-5'>開發(fā)</b>板LED燈
    RM新时代网站-首页