HPM6750系列--第九篇 GPIO详解(基本操作)

一、目的

        在之前的博文中我们主要介绍了不同系统不同开发编译调试环境的配置和操作(命令行方式、Visual Studio Code、Segger Embedded Studio for RISC-V),以帮助大家准备好学习环境为目的,但是未涉及到芯片本身以及外设的讲解。

        从本篇开始我们将逐一介绍一些常用的芯片外设模块(GPIO、串口、SPI、网口等等),首当其中的就是最基础的GPIO操作(设置IO方向,进行IO读写操作)。

HPM6750evkmini

二、介绍

        在先楫官网的文档中对GPIO做了相当详细的描述,大家可以参考阅读,下文会针对官网文档进行一个总结性的说明。

        

        ​​​​​​​先楫半导体icon-default.png?t=N7T8http://www.hpmicro.com/resources/resources.html


        GPIO在系统框图中的位置 
系统框图

 

        HPM6750芯片将整个系统划分为三个电源域(系统电源域、电源管理域、电池备份域)。 

        1.IO控制器说明
IO控制器说明
IOC

通用IO控制器

位于系统电源域

管理PA(0-31)、PB(0-31)、PC(0-31)、PD(0-31)、PE(0-31)、PF(0-10)

PIOC

电源管理域IO控制器,功能和通用IOC一致

管理PY(0-11)

BIOC电池备份域IO控制器,功能和通用IOC一致,管理PZ(0-11)

        PIOC和BIOC可以把电源管理域IO(PY)和电池备份域IO(PZ)中的一个或者多个IO映射到系统电源域,之后这些IO就可以由IOC控制。这个我们在以后章节介绍UART时讲解。

        ​​​​​​​

电源管理域IO GPIO控制选择

        IO控制器主要控制这些参数:

  • 外设复用功能映射
  • 输出回送控制(loopback)
  • 模拟功能配置
  • 电压模式控制
  • 开漏设置
  • 施密特触发器
  • 上下拉配置
  • 驱动能力配置

        每个IOC控制的pin都有两个寄存器参数,分别为叫做FUNC_CTL、PAD_CTL,具体的寄存器字段信息如下:

寄存器字段描述
寄存器名称字段功能
FUNC_CTLALT_SELECT[4:0]

外设复用功能映射选择,具体每个IO的映射关系从芯片手册或者SDK源码中可以查阅

ANALOG[8:8]

引脚切换至模拟输入输出功能开关

LOOPBACK[16:16]

输出回送开关

PAD_CTLDS[2:0]

驱动强度选择

PE[4:4]

内部上下拉功能开关

PS[11:11]

内部上下拉电阻选择

SMT[12:12]

输入施密特触发器使能, 此位只对高速引脚可用

OD[13:13]

开漏输出开关

MS[14:14]

引脚供电电压选择, 此位只对高速引脚可用

关于这些描述可以查看官方文档中更加详细的描述,并且在进行在线调试时我们也可以看到这些信息。

        在SDK中我们可以查看每个IO的复用设置信息,例如下图是PB18这个引脚的复用选项。

PB18复用功能
​​​​​​​

        看过我之前文章的小伙伴肯定也看到过下图中调试窗口中各个外设寄存器信息。 

        有了上面的基本知识后,我们再来看下hpm-sdk中关于IO控制器的定义:

        ​​​​​​​ 

 

        HPM_IOC/HPM_PIOC/HPM_BIOC都是IOC_Type类型的结构体指针,IOC_Type结构体内部又是PAD结构体数组,每个数组元素则对应一个IO引脚,每个引脚都有FUNC_CTL和PAD_CTL寄存器。

        从上图可以看到PB.18引脚对应于IOC_Type中的第32+18=50个引脚,即PAD[50]。


        2.GPIO控制说明

        GPIO控制器包括GPIO0/1、FGPIO0/1、PGPIO、BGPIO,其主要功能:

  • 配置IO作为输入或者输出
  • 读取IO的输入状态
  • 设置IO的输出
  • 原子化操作设置IO输出高、低、翻转

        其中GPIO0/1,PGIO,BGPIO 支持配置 GPIO 中断,FGPIO0 和 FGPIO1 不支持生成中断。

        下图是各个GPIO对应的地址信息:

       


 

        上图定义了GPIO_Type结构体类型,其中包括DI(输入寄存器)、DO(输出寄存器)、OE(输入输出方向寄存器)等等。注意DI/DO/OE等都是结构体数组,分别对应着PA/PB/PC等。

         

        DO结构体数组中又定义了VALUE、SET、CLEAR、TOGGLE寄存器,每个寄存器都是32位,每一个bit代表一个引脚。 

         关于VALUE/SET/CLEAR/TOGGLE寄存器描述如下:

        

         

 

         


        3.读取引脚输入高低电平 
/*** @brief   Read target pin level** @param ptr GPIO base address* @param port Port index* @param pin Pin index** @return Pin status mask*/
static inline uint8_t gpio_read_pin(GPIO_Type *ptr, uint32_t port, uint8_t pin)
{return (ptr->DI[port].VALUE & (1 << pin)) >> pin;
}

        假如我们使用GPIO0读取PB.18的值,应该这样调用

uint8_t val = gpio_read_pin(HPM_GPIO0, GPIO_DI_GPIOB, 18);

 


三、实战

        通过上面的介绍大家应该对GPIO有了一个基本印象,下面我们使用代码调试功能帮助大家加深理解。

cd ~/workspace/work/hpm/hello_world
code .

 

        定位到board_turnoff_rgb_led函数,我们查看PB18引脚的FUNC_CTL默认值为0x0;PAD_CTL默认值为0x1010。

         

        在执行过HPM_IOC->PAD[IOC_PAD_PB18].PAD_CTL = pad_ctl;这行代码后PAD_CTL变成了0x810。

        自此GPIO的基本知识点就讲解完毕,大家对着官方文档和调试器调试代码可以进一步加深理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/218666.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果计划将全球1/4的IPhone产能转移至印度

KlipC报道&#xff1a;据相关人士报道&#xff0c;苹果希望在未来2到3年内每年在印度生产超过5000万部iphone&#xff0c;要是该计划得以实现&#xff0c;印度将占领全球iPhone产量的四分之一。 KlipC的分析师Alex Su表示&#xff1a;“此次iPhone15推出是苹果印度制造计划的一…

设计模式详解---策略模式

1. 策略模式简介 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;用于在运行时根据不同的情境选择不同的算法或策略。该模式将算法封装成独立的类&#xff0c;使得它们可以相互替换&#xff0c;而且可以独立于客户端使用它们的方式。 1.1.…

m_map导入本地地形数据

m_map绘制地形图时&#xff0c;虽然自带有1的地形图以及从NOAA下载的1分的地形图&#xff08;详见&#xff1a;Matlab下地形图绘图包m_map安装与使用&#xff09;&#xff0c;但有时需要对地形图分辨率的要求更高&#xff0c;便无法满足。 此时&#xff0c;需要导入本地地形数…

二蛋赠书十一期:《TypeScript入门与区块链项目实战》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…

Toyota Programming Contest 2023#8(AtCoder Beginner Contest 333)

A - Three Threes 题目大意&#xff1a;给你一个整数n&#xff0c;将这个数n输出n次。 呃呃 B - Pentagon 题目大意&#xff1a;给你一个正五边形ABCDE&#xff0c;给你任意两条边&#xff0c;判断是否相等 主要问题要判断一下内边&#xff1a;AD&#xff0c;AC&#xff0c;…

MIT6.5840-2023-Lab2C: Raft-Persistence

前置知识 见上一篇 Lab2A。 实验内容 实现 RAFT&#xff0c;分为四个 part&#xff1a;leader election、log、persistence、log compaction。 实验环境 OS&#xff1a;WSL-Ubuntu-18.04 golang&#xff1a;go1.17.6 linux/amd64 Part 2C: persistence 大部分的bug都与这…

KubeKey 离线部署 KubeSphere v3.4.1 和 K8s v1.26 实战指南

作者&#xff1a;运维有术 前言 知识点 定级&#xff1a;入门级了解清单 (manifest) 和制品 (artifact) 的概念掌握 manifest 清单的编写方法根据 manifest 清单制作 artifactKubeKey 离线集群配置文件编写KubeKey 离线部署 HarborKubeKey 离线部署 KubeSphere 和 K8sKubeKey…

C++初阶-list类的模拟实现

list类的模拟实现 一、基本框架1.1 节点类1.2 迭代器类1.3 list类 二、构造函数和析构函数2.1 构造函数2.2 析构函数 三、operator的重载和拷贝构造3.1 operator的重载3.2 拷贝构造 四、迭代器的实现4.1 迭代器类中的各种操作4.1 list类中的迭代器 五、list的增容和删除5.1 尾插…

javacv的视频截图功能

之前做了一个资源库的小项目&#xff0c;因为上传资源文件包含视频等附件&#xff0c;所以就需要时用到这个功能。通过对视频截图&#xff0c;然后作为封面缩略图&#xff0c;达到美观效果。 首先呢&#xff0c;需要准备相关的jar包&#xff0c;之前我用的是低版本的1.4.2&…

Tomcat-安装部署(源码包安装)

一、简介 Tomcat 是由 Apache 开发的一个 Servlet 容器&#xff0c;实现了对 Servlet 和 JSP 的支持&#xff0c;并提供了作为Web服务器的一些特有功能&#xff0c;如Tomcat管理和控制平台、安全域管理和Tomcat阀等。 简单来说&#xff0c;Tomcat是一个WEB应用程序的托管平台…

基于Nexus搭建Maven私服基础入门

什么是Nexus&#xff1f;它有什么优势&#xff1f; 要了解为什么需要nexus的存在&#xff0c;我们不妨从以下几个问题来简单了解一下: 为什么需要搭建私服&#xff1f;如果没有私服会出现什么问题&#xff1f; 对于企业开发而言&#xff0c;如果没有私服&#xff0c;我们所有…

十九)Stable Diffusion使用教程:ai室内设计案例

今天我们聊聊如何通过SD进行室内设计装修。 方式一:controlnet的seg模型 基础起手式: 选择常用算法,抽卡: 抽到喜欢的图片之后,拖到controlnet里: 选择seg的ade20k预处理器,点击爆炸按钮,得到seg语义分割图,下载下来: 根据语义分割表里的颜色值,到PS里进行修改: 语…

SoloLinker第一次使用记录,解决新手拿到板子的无所适从

本文目录 一、简介二、进群获取资料2.1 需要下载资料2.2 SDK 包解压 三、SDK 编译3.1 依赖安装3.2 编译配置3.3 启动编译3.4 编译后的固件目录 四、固件烧录4.1 RV1106 驱动安装4.2 打开烧录工具4.3 进入boot 模式&#xff08;烧录模式&#xff09;4.4 烧录启动固件4.5 烧录升级…

大型网站架构演进过程

架构演进 大型网站的技术挑战主要来自于庞大的用户&#xff0c;高并发的访问和海量的数据&#xff0c;任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户&#xff0c;问题就会变得很棘手。大型网站架构主要就是解决这类问题。 架构选型是根据当前业务需要来的&…

RRC下的NAS层

无线资源控制&#xff08;Radio Resource Control&#xff0c;RRC&#xff09;&#xff0c;又称为无线资源管理&#xff08;RRM&#xff09;或者无线资源分配&#xff08;RRA&#xff09;&#xff0c;是指通过一定的策略和手段进行无线资源管理、控制和调度&#xff0c;在满足服…

数据库 02-03 补充 SQL的子查询(where,from),子查询作为集合来比较some,exists,all(某一个,存在,所有)

子查询&#xff1a; where字句的子查询&#xff1a; 通常用in关键字&#xff1a; 举个例子&#xff1a; in关键字&#xff1a; not in 关键字&#xff1a; in 也可以用于枚举集合&#xff1a; where中可以用子查询来作为集合来筛选元祖。 some&#xff0c;all的运算符号…

Spring cloud - 断路器 Resilience4J

其实文章的标题应该叫 Resilience4J&#xff0c;而不是Spring Cloud Resilience4J&#xff0c;不过由于正在对Spring cloud的一系列组件进行学习&#xff0c;为了统一&#xff0c;就这样吧。 概念区分 首先区分几个概念 Spring cloud 断路器&#xff1a;Spring Cloud的官网对…

elementui + vue2实现表格行的上下移动

场景&#xff1a; 如上&#xff0c;要实现表格行的上下移动 实现&#xff1a; <el-dialogappend-to-bodytitle"条件编辑":visible.sync"dialogVisible"width"60%"><el-table :data"data1" border style"width: 100%&q…

Flutter在Visual Studio Code上首次创建运行应用

一、创建Flutter应用 1、前提条件 安装Visual Studio Code并配置好运行环境 2、开始创建Flutter应用 1)、打开Visual Studio Code 2)、打开 View > Command Palette。 3)、在搜索框中输入“flutter”&#xff0c;弹出内容如下图所示&#xff0c;选择“ Flutter: New Pr…

12345、ABCDE项目符号列表文字视频怎么制作?重点内容介绍PR标题模板项目工程文件

Premiere模板&#xff0c;包含10个要点标题12345、ABCDE项目符号列表文字模板PR项目工程文件。可以根据自己的需要定制颜色。在视频的开头、中间和结尾使用。包括视频教程。 适用软件&#xff1a;Premiere Pro 2019 | 分辨率&#xff1a;19201080 (HD) | 文件大小&#xff1a;9…