0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AMetal开发:通用外设GPIO驱动的开发

海阔天空的专栏 来源: 立功科技 作者: 立功科技 2022-05-31 17:28 次阅读

上期讲述了开发通用外设之实战TIM的流程,让大家逐步深入了解如何开发通用外设的驱动。接下来将继续进行通用外设开发的实战篇,本次向大家介绍开发通用外设之GPIO。

按照如下步骤开发通用外设GPIO驱动:

了解通用外设标准接口层、外设硬件层开发、外设驱动层开发、外设用户配置文件开发。


图片

图1 通用外设文件结构

标准层了解

1、标准接口相关类型定义

如下所示为GPIO的标准接口文件中对GPIO引脚功能、引脚模式、输出电平以及中断触发方式等的定义。

图片

图2GPIO标准接口文件宏定义

2、标准接口函数

如下所示为GPIO标准层的函数接口,通过传入引脚编号、配置功能标志、回调函数等对应的参数,即可实现GPIO引脚的功能配置。在了解GPIO外设标准层数据类型和接口函数之后,就明确了驱动层需要为标准层所提供的内容。

图片

图3GPIO标准层函数接口

外设HW层开发

HW层对应到具体的外设,其提供的API基本上是直接操作寄存器的内联函数。根据芯片手册来添加外设的寄存器列表;并编写寄存器相关操作的内联函数。以某款芯片的GPIO为例,如下所示为GPIO的寄存器列表,从而来明确各个寄存器的功能。

图片

4GPIO寄存器列表

根据寄存器列表,我们了解并分析了各个寄存器功能以及要配置的各个功能,其他寄存器位该如何配合等。如下所示为GPIO寄存器结构体定义。

图片

5GPIO寄存器块结构体定义

接下来编写每个寄存器的功能操作函数即可完成外设硬件层的开发。以GPIO的端口位清除寄存器brr为例,来编写该寄存器的硬件层函数接口,如下所示:

图片

图6GPIO_BRR寄存器操作函数

在每个寄存器的操作函数编写完毕后,可能硬件层的接口还有所欠缺,需要提供一些方便用户使用的简单的功能性函数。在后续开发时,若发现有需要,可以反过来再添加。

外设驱动层开发

1、定义设备信息结构体和设备结构体

驱动层首先应该搭建好相关结构,再去实现外设的功能函数。在AMetal中,每个设备都应该有与之对应的设备结构体和设备信息结构体。

设备结构体主要用于内存分配,与设备相关的变量都应该定义在设备结构体中。

设备信息结构体通常至少包含一个硬件层定义的指向寄存器基地址的指针类型成员,除此之外,还包含一些设备的初始化配置信息,如中断号、外设信息等成员。

图片

图7 GPIO设备信息结构体和设备结构体定义

2、驱动函数实现

驱动函数主要包括两部分:一部分是提供给标准层的驱动函数,另一部分是面向用户的初始化、解初始化函数。

我们可根据标准接口层函数来搭建相应的GPIO外设的驱动层功能函数框架;进一步通过芯片用户手册中对应操作说明来完成GPIO的驱动层功能函数驱动。

如下所示为GPIO初始化函数和解初始化函数;初始化函数主要是为了初始化设备中的标准服务和硬件相关设置;解初始化函数是为了释放内存资源和硬件资源。

图片

图8GPIO初始化函数和解初始化函数

外设用户配置文件开发

开发完驱动层我们知道,用户使用一个外设的过程是,先调用驱动初始化函数,该函数返回一个handle,后续的所有操作,用户直接使用该handle作为参数调用标准接口层函数即可。

以某款芯片的GPIO为例,如下所示为GPIO的用户配置文件,主要包含设备信息结构体、设备实例结构体及其平台初始化函数与解初始化函数。

图片

图9GPIO用户配置文件

外设例程文件

外设的例程文件主要分为HW层示例和STD示例。

对于STD示例,调用标准层函数和实例初始化函数来实现外设功能。

对于HW示例,通过调用硬件层的函数完成相应的配置,以此实现功能。如下所示为通过硬件层驱动来实现按键切换LED状态的示例。

图片

图10GPIO_HW层示例

至此,我们完成了一个通用外设GPIO驱动的开发。

来源:立功科技

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • GPIO
    +关注

    关注

    16

    文章

    1191

    浏览量

    51875
  • ametal
    +关注

    关注

    2

    文章

    24

    浏览量

    11389
收藏 人收藏

    评论

    相关推荐

    关于ametal_led通用接口的设计技巧分享

    第八章为深入理解AMetal,本文内容为8.1 LED 通用接口。
    的头像 发表于 11-23 07:52 6609次阅读
    关于<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 2258次阅读
    RT-Thread<b class='flag-5'>驱动</b><b class='flag-5'>开发</b>指南进阶篇-动手<b class='flag-5'>驱动</b>先楫未适配的<b class='flag-5'>外设</b>LCD

    灵动微电子MM32 MCU正式入驻AMetal平台

    的本土通用MCU公司,可以为客户提供从优异芯片产品到核心算法、从完备参考设计方案到整机开发的全方位支持,真正为中国电子信息产业提供底层技术驱动和支持。立功科技与灵动微电子强强联合,开启MM32 MCU
    发表于 01-16 11:38

    灵动微课堂 (第122讲) | 基于MM32 MCU的OS移植与应用:AMetal平台新建工程

    做最原始封装;驱动层在硬件层的基础上进一步封装,简化对外设的操作;标准接口层提取出了一套标准API接口,不仅适用于AWorksOS开发平台也适用于其他操作系统。图1 AMetal构架同
    发表于 05-22 17:04

    灵动微课堂 (第123讲) | 基于MM32 MCU的OS移植与应用:AMetal LED灯控制

    ;drives 目录下包含了该开发板支持的驱动源文件及实现;libc 目录下是 AMetal 开发平台相关的库文件;service 目录下面为用户提供的一些标准服务接口;soc 目录下
    发表于 05-28 16:19

    灵动微课堂 (第123讲) | 基于MM32 MCU的OS移植与应用:AMetal LED灯控制

    ;drives 目录下包含了该开发板支持的驱动源文件及实现;libc 目录下是 AMetal 开发平台相关的库文件;service 目录下面为用户提供的一些标准服务接口;soc 目录下
    发表于 05-28 16:19

    ESP32外设入门GPIO 精选资料推荐

    前言最近开发用到了ESP32,乐鑫已经对接口进行比较深度的封装,但是还是看了下外设的参考手册,摘取了一部分结合自己的理解给记录下来。如有异议,欢迎指正概述ESP32芯片具有34个物理GPIO。每个
    发表于 07-30 06:00

    基于Ametal平台开发,快速完成开发设计!

    传统旋钮采用机械式结构,面板上需要开孔,长时间使用易磨损、进灰尘等,采用新型吸附式磁旋钮可以轻松解决上述问题。此磁旋钮采用ZLG品牌的32位ARM单片机ZLG116做主控,并且基于Ametal平台开发,能够快速完成开发设计。
    的头像 发表于 05-04 09:11 7115次阅读

    简要分析Thread的通用GPIO设备驱动

    为了给用户提供操作GPIO通用API,方便应用程序开发,RT-Thread中引入了通用GPIO设备驱动
    发表于 11-13 14:57 1468次阅读

    Linux应用开发【第九章】GPIO编程应用开发

    设置GPIO方向 9.4.3 GPIO输出实验-LED输出控制 9.4.4 GPIO输入试验-按键值读取 9.4.5 LED和按键控制实验   9 GPIO编程应用
    的头像 发表于 12-10 19:21 739次阅读
    Linux应用<b class='flag-5'>开发</b>【第九章】<b class='flag-5'>GPIO</b>编程应用<b class='flag-5'>开发</b>

    GPIO通用输入输出

    GPIO通用输入输出一、GPIO的功能概述用途:GPIO通用输入输出(General Purpose I/O)的简称,主要用于工业现场需要
    发表于 12-20 18:58 6次下载
    <b class='flag-5'>GPIO</b><b class='flag-5'>通用</b>输入输出

    AMetal开发通用外设的流程与规范

    上期讲述了搭建工程让MCU在AMetal平台运行起来,为后续开发外设驱动奠定基础。接下来可以进入下一步的通用
    的头像 发表于 04-27 16:58 1791次阅读
    <b class='flag-5'>AMetal</b><b class='flag-5'>开发</b><b class='flag-5'>通用</b><b class='flag-5'>外设</b>的流程与规范

    AMetal适配:以TIM为例来展示如何开发通用驱动外设代码

    基于定时器、RTC、WDT本质上均是计数器的共性,本次将这三种通用外设统一为TIM。以TIM为例,来展示如何开发通用驱动
    的头像 发表于 05-12 17:08 1802次阅读
    <b class='flag-5'>AMetal</b>适配:以TIM为例来展示如何<b class='flag-5'>开发</b><b class='flag-5'>通用</b><b class='flag-5'>驱动</b><b class='flag-5'>外设</b>代码

    AMetal代码仓库使用说明

    本文档简述了 AMetal 代码仓库的使用、 TortoiseGit 的使用以及版本控制等。AMetal 是芯片级的裸机软件包,定义了跨平台的通用接口(使得基于 AMetal 的应用程
    发表于 10-12 16:06 1次下载

    如何驱动Linux开发板LED灯

    Linux下的任何外设驱动,最终都是要配置相应的硬件寄存器。前面的文章中介绍了新旧字符设备的驱动开发框架,也介绍了IMX6ULL处理器GPIO
    的头像 发表于 04-14 11:41 922次阅读
    如何<b class='flag-5'>驱动</b>Linux<b class='flag-5'>开发</b>板LED灯