F280049C General-Purpose Input/Out(GPIO)

news2024/9/26 1:19:42


文章目录

  • GPIO
    • 8.1 简介
    • 8.2 配置概述
    • 8.3 ADC引脚上的数字输入(AIO)
    • 8.4 数字通用I/O控制
    • 8.5 输入限定
      • 8.5.1 异步输入
      • 8.5.2 仅与SYSCLKOUT同步
      • 8.5.3 使用采样窗口进行鉴定
    • 8.6 SPI信号
    • 8.7GPIO和外设引脚复用
      • 8.7.1GPIO复用
      • 8.7.2 外设复用
    • 8.8 内部上拉配置要求
  • 总结

GPIO

GPIO模块控制设备的数字和模拟I/O多路复用,使用共享引脚来最大化应用灵活性。引脚由其通用I/O名称命名(例如,GPIO0、GPIO25、GPIO58)。这些引脚可以单独选择作为数字I/O(也称为GPIO模式)操作,或连接到几个外围I/O信号之一。输入信号可以被限定为去除不需要的噪声。

8.1 简介

除了CPU控制的I/O能力外,多达12个独立的外围信号在单个GPIO使能引脚上复用。每个引脚输出可以由外围设备或两个CPU主机(CPU1、CPU1.CLA)之一控制。有两个I/O端口:

  • Port A: GPIO0~GPIO31
  • Port B: GPIO32~ GPIO59

该设备上的模拟信号与数字输入复用。这些模拟IO(AIO)引脚不具有数字输出能力。模拟IO(AIO)引脚分配给单个端口:

  • Port H: GPIO224~GPIO24

在这里插入图片描述
图8-1中有两个关键特征需要注意。第一个是输入和输出路径完全分开,只在引脚处连接。第二个是外设复用发生在远离引脚的地方。因此,CPU和CLA总是可以独立于CPU主控和外设复用读取管脚的物理状态。同样,外部中断也可以从外设活动中产生。所有引脚选项(如输入限定和漏极开路输出)均适用于所有主机和外围设备。然而,外设复用、CPU复用和引脚选项只能由CPU1配置。

8.2 配置概述

IO口配置步骤

  1. 规划设备引脚
    列出应用程序所需的所有外设。使用设备数据手册中的外设多路复用器信息,选择用于外围信号的GPIO。决定将剩余的GPIO中的哪一个用作每个CPU和CLA的输入和输出。
    一旦选择了外围复用,就可以通过将适当的值写入GPyMUX1/2和GPyMMUX1/2寄存器来实现复用。当更改引脚的GPyMUX值时,请始终先将相应的GPyMUX位设置为零,以避免多路复用器中出现故障。默认情况下,所有引脚都是通用I/O,而不是外设信号。
  2. (可选)启用内部上拉电阻器
    要启用或禁用上拉电阻器,请写入GPIO上拉禁用寄存器(GPyPUD)中的相应位。默认情况下禁用所有上拉。当没有外部信号驱动输入引脚时,可以使用引体向上将其保持在已知状态
  3. 选择输入限定
    如果引脚用作输入,请指定所需的输入资格(如果有)。输入限定采样周期在GPyCTRL寄存器中选择,而限定类型在GPyQSEL1和GPyQSEL 2寄存器中选择。默认情况下,所有资格与等于PLLSYSCLK的采样周期同步。
  4. 选择任何通用I/O引脚的方向
    对于配置为GPIO的每个引脚,使用GPyDIR寄存器将引脚的方向指定为输入或输出。默认情况下,所有GPIO引脚都是输入。在将引脚更改为输出之前,通过将要驱动的值写入GPySET、GPyCLEAR或GPyDAT寄存器来加载输出锁存器。加载锁存后,写入GPyDIR以更改引脚方向。默认情况下,所有输出锁存器均为零。
  5. 选择低功耗模式唤醒源
    GPIO 0-63可用于将系统从低功耗模式唤醒。要选择一个或多个GPIO进行唤醒,请写入GPIOLPMSEL0和GPIOLPMSEL1寄存器中的相应位。这些寄存器是CPU系统寄存器空间的一部分。有关低功耗模式和GPIO唤醒的更多信息,请参阅“系统控制和中断”一章中的“低功耗模式”部分
  6. 选择外部中断源
    配置外部中断是一个两步过程。首先,必须启用中断本身,并且必须使用XINTnCR寄存器配置其极性。其次,必须通过分别选择输入X-BAR信号4、5、6、13和14的源来设置XINT1-5 GPIO引脚。有关输入X-BAR架构的更多信息,请参阅Crossbar(X-BAR)一章。

8.3 ADC引脚上的数字输入(AIO)

端口H上的GPIO(GPIO224–GPIO253)与模拟引脚复用。这些也被称为AIO。这些引脚只能在输入模式下工作。默认情况下,这些引脚用作模拟引脚,GPIO处于高阻抗状态。GPHAMSEL寄存器用于为数字或模拟操作配置这些引脚。

8.4 数字通用I/O控制

通过使用以下寄存器,可以更改配置为GPIO的引脚上数字电平。

  • GPyDAT寄存器
    每个I/O端口都有一个数据寄存器。数据寄存器中的每个位对应于一个GPIO引脚。无论管脚如何配置(GPIO或外围功能),数据寄存器中的相应位都反映了限定后管脚的当前状态。写入GPyDAT寄存器会清除或置位相应的输出锁存器,如果该引脚被启用为通用输出(GPIO输出),则该引脚也会被驱动为低电平或高电平。如果引脚未配置为GPIO输出,则该值被锁存,但引脚未被驱动。只有当该引脚后来被配置为GPIO输出时,锁存值才被驱动到该引脚上。
    使用GPyDAT寄存器更改输出引脚的电平时,请小心不要意外更改另一个引脚的电平。例如,为了通过使用读-修改-写指令写入GPADAT寄存器位0来改变GPIOA1的输出锁存器电平,如果另一个I/O端口a信号在指令的读和写阶段之间改变电平,则会出现问题。以下是发生这种情况的原因分析:
    GPyDAT寄存器反映引脚的状态,而不是锁存器的状态。这意味着寄存器反映实际引脚值。然而,当寄存器被写入时,新的管脚值被反映回寄存器时,两者之间存在延迟。当在随后的程序语句中使用该寄存器来改变GPIO引脚的状态时,这可能会造成问题。下面显示了一个示例,其中两个程序语句试图驱动两个不同的GPIO引脚,这两个引脚当前处于低到高状态。
    如果在GPyDAT寄存器上使用读-修改-写操作,由于第一条指令(I1)的输出和输入之间的延迟,第二条指令(I2)读取旧值并将值写回。
    GpioDataRegs.GPADAT.bit.GPIO1 = 1; //I1 performs read-modify-write of GPADAT
    GpioDataRegs.GPADAT.bit.GPIO2 = 1; //I2 also a read-modify-write of GPADAT
    //GPADAT gets the old value of GPIO1 due to the delay
    第二条指令等待第一条指令完成写入,这是因为在该外围帧上进行了写入之后进行了读取保护。然而, 在写入(I1)到GPyDAT位这反映了上的新值(1)存在一定的延迟。在此滞后期间,第二条指令读取GPIO1(0)的旧值,并将该值与GPIO2(1)的新值一起写回。因此,GPIO1引脚保持低位。
    一个答案是在指令之间插入一些NOP。更好的答案是使用GPySET/GPYLEAR/GPyTOGGLE寄存器而不是GPyDAT寄存器。这些寄存器总是读取0并写入0无效。仅可指定需要更改的位,而不干扰目前正在改变其他位。
  • GPySET寄存器
    该寄存器用于在不干扰其他引脚的情况下将指定的GPIO引脚驱动为高电平。每个I/O端口有一个设置寄存器,每个位对应一个GPIO引脚。设置寄存器总是读回0。如果相应的引脚被配置为输出,则将1写入设置寄存器中的该位,将输出锁存器设置为高电平,相应的引脚将被驱动为高电平。**如果引脚未配置为GPIO输出,则该值被锁存,但引脚未被驱动。只有当该引脚后来被配置为GPIO输出时,锁存值才被驱动到该引脚上。**将0写入设置寄存器中的任何位都无效。
  • GPyCLEAR寄存器
    该寄存器用于在不干扰其他引脚的情况下将指定的GPIO引脚驱动为低电平。每个I/O端口都有一个清除寄存器。清除寄存器总是读回0。如果相应的引脚被配置为通用输出,则向清除寄存器中的相应位写入1将清除输出锁存器,引脚被驱动为低电平。如果引脚未配置为GPIO输出,则该值被锁存,但引脚未被驱动。只有当该引脚后来被配置为GPIO输出时,锁存值才被驱动到该引脚上。将0写入清除寄存器中的任何位都无效。
  • GPyTOGGLE寄存器
    触发寄存器用于将指定的GPIO引脚驱动到相反的电平,而不会干扰其他引脚。每个I/O端口都有一个切换寄存器。切换寄存器总是读回0。如果相应的管脚被配置为输出,则将1写入触发寄存器中的该位会翻转输出锁存器,并沿相反方向拉动相应的管。也就是说,如果输出引脚被驱动为低电平,那么将1写入触发寄存器中的相应位会将引脚拉高。同样,如果输出引脚为高,则向触发寄存器中的相应位写入1将引脚拉低。如果引脚未配置为GPIO输出,则该值被锁存,但引脚未被驱动。只有当该引脚后来被配置为GPIO输出时,锁存值才被驱动到该引脚上。将0写入切换寄存器中的任何位都无效

8.5 输入限定

输入确认方案设计得非常灵活。通过配置GPyQSEL1和GPyQSEL 2寄存器,为每个GPIO引脚选择输入资格类型。在GPIO输入引脚的情况下,可以将鉴定指定为仅与SYSCLKOUT同步或通过采样窗口进行鉴定。对于配置为外围输入的引脚,除了与SYSCLKOUT同步或由采样窗口限定外,输入也可以是异步的。

8.5.1 异步输入

此模式用于不需要输入同步或由外围设备本身执行同步的外围设备。示例包括通信端口McBSP、SCI、SPI和I2C。此外,ePWM跳闸区(TZn)信号的功能与SYSCLKOUT的存在无关。

注意:当外围设备本身执行同步时,使用输入同步可能会导致意外结果。在这种情况下,用户必须确保GPIO引脚配置为异步。

8.5.2 仅与SYSCLKOUT同步

这是复位时所有引脚的默认确认模式。在此模式下,输入信号仅与系统时钟(SYSCLKOUT)同步。因为输入信号是异步的,所以需要一个SYSCLKOUT延迟周期来改变设备的输入。未对信号进行进一步鉴定。

8.5.3 使用采样窗口进行鉴定

在此模式下,信号首先与系统时钟(SYSCLKOUT)同步,然后在允许输入改变之前,通过指定的周期数进行限定。图8-2和图8-3显示了如何执行输入确认以消除不需要的噪声。用户为此类鉴定指定了两个参数:

  • 采样周期或信号采样频率
  • 采样数量。
    在这里插入图片描述

原文To qualify the signal,感觉不知道怎么翻译才更妥帖一点)为了使采集到的信号真正是外部输入的电平值,CPU以规则的周期采样输入信号。采样周期由用户指定,并确定采样之间的持续时间,或相对于CPU时钟(SYSCLKOUT)采样信号的频率。以下使是几个关键指标:

  • 采样率
    采样周期由GPxCTRL寄存器中的限定周期(QUALPRDn)位指定。采样周期可配置为8个输入信号的组。例如,GPIO0至GPIO7使用GPATRL[QUALPRD0]设置,GPIO8至GPIO15使用GPATRL[QUALPRD 1]。表8-1和表8-2显示了采样周期或采样频率与GPxCTRL[QUALPRDn]设置之间的关系。
    在这里插入图片描述
  • 采样次数
    信号的采样次数是限定选择(GPAQSEL1、GPAQSEL2、GPBQSEL1和GPBQSSEL2)寄存器中指定的三次采样或六次采样。当三个或六个连续采样的结果相同时,输入变化将传递到设备。
  • 总采样窗宽
    采样窗口是对输入信号进行采样的时间,如图8-3所示。通过使用采样周期的方程以及要采集的样本数量,可以确定窗口的总宽度。
    为了使输入限定符检测输入中的变化,信号的电平必须在采样窗口宽度的持续时间内稳定或更长。
    窗口内的采样周期数总是比采样的数量少一个。对于三个采样窗口,采样窗口宽度为两个采样周期宽度,采样周期定义见表8-1。同样,对于六个采样窗口,采样窗口宽度为五个采样周期宽。表8-3和表8-4显示了用于根据GPxCTRL[QUALPRDn]和采样数量确定总采样窗口宽度的计算结果。
    在这里插入图片描述

在这里插入图片描述
A处的扰动比采样窗口短,所以被滤除了。

8.6 SPI信号

该设备上的SPI模块具有高速模式,可实现40 Mbps通信。为了实现最高可能的速度,在每个SPI的单个GPIO多路复用器选项上使用特殊的GPIO配置。当不处于高速模式(HS_mode=0)时,SPI也可以使用这些GPIO。

8.7GPIO和外设引脚复用

8.7.1GPIO复用

多达12个不同的外围功能与通用输入/输出(GPIO)功能一起复用到每个引脚。这允许您选择最适合特定应用程序的外围设备混合和引脚输出。复用组合和定义请参见表8-5。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.7.2 外设复用

例如,通过向GPAGMUX[13:12]和GPAMUX[13:12]写入来控制GPIO6引脚的多路复用。通过写入这些位,GPIO6被配置为通用数字I/O或四种不同外围在这里插入图片描述
这些设备具有不同的复用方案。如果外围设备在特定设备上不可用,则该多路复用器选择将保留在该设备上,无法使用。

一些外围设备可以通过多路复用寄存器分配给多个引脚。例如,OUTPUTXBAR1可以分配给GPIO 2、24、34或58,具体取决于各个系统要求。表8-7显示了一个示例。
在这里插入图片描述

8.8 内部上拉配置要求

复位时,GPIO处于输入模式,并禁用内部上拉。未驱动的输入可以浮动到中轨电压,并在输入缓冲器上造成浪费的直通电流,或者说电平不确定。用户应始终将每个GPIO置于以下配置之一:

  • 输入模式,由另一个组件在板上驱动至高于Vih或低于Vil的水平,即确定的高电平或低电平
  • 启用GPIO内部上拉的输入模式,使电平确定
  • 输出模式

在具有较少引脚数封装的设备上,默认启用未绑定GPIO上的上拉,以防止浮动输入。用户应注意避免在应用程序代码中禁用这些下拉菜单。

在176 PTP封装中的设备上,必须启用任何内部未绑定GPIO的上拉,以防止浮动输入。TI在controlSUITE/C2000Ware中提供了一些函数,用户可以调用这些函数来启用所使用封装的任何未绑定GPIO上的上拉。此函数GPIO_EnabledUnboundIOPullups()位于(Device)_Sysctrl.c文件中,默认情况下从InitSysCtrl()调用。用户应注意避免在应用程序代码中禁用这些下拉菜单。

总结

  • GPIO有数字GPIO和模拟GPIO之分,通常称前者为GPIO,后者为AIO以作区分。
  • GPIO具有输入输出两种功能,并且每一个GPIO都能进行引脚复用,选择性地工作在简单IO以输出电平或外设如ePWM、eCAP、SPI、I2C等。
  • 手册上说AIO只能工作在输入模式,感觉这里有点欠妥。AIO231,也就是A0/B15/C15/DACA_OUT。这个引脚就是能输出DACA_OUT信号的。不知道是不是我理解的有点问题。
    在这里插入图片描述
  • GPIO输出模式时,可以通过写GPxSET,GPxCLEAR,GPxTOGGLE以设置引脚的电平值。
  • GPIO输入模式时,必须使能内部上拉,并选择输入限定方式。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础架构:一条SQL查询语句是如何执行的?

这是专栏的第一篇文章,我想来跟你聊聊 MySQL 的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表…

DML语句

DML语句目录概述需求:设计思路实现思路分析1.SQL 实例2.UPDATE3.DELETE4.SELECT5.是TRUNCATE参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wai…

数字DNA盗窃可能会在2023年到来

攻击者总是在不断发展并寻找访问数字系统的方法。随着人工智能的使用越来越多,量子计算有望很快成为现实,网络威胁格局的变化比以往任何时候都快。 当谈到网络安全时,我们应该始终尝试着眼于即将发生的事情以及它将产生的影响。我们不能只是…

操作系统实验7:终端设备字符显示的控制

实验目的 加深对操作系统设备管理基本原理的认识,实践键盘中断、扫描码等概念;通过实践掌握Linux 0.11对键盘终端和显示器终端的处理过程。 实验内容 本实验的基本内容是修改Linux 0.11的终端设备处理代码,对键盘输入和字符显示进行非常规…

2022-我的年终总结

去年年末,我也写了一篇年终总结。去年这一年是极度繁忙的一年,因各种原因,过年没回家,一个人在宿舍度过了凄凉的春节。而今年是丰收的一年,去年所付出的一切都在今年获得了回报,我也迎来新的生活。 新的生活…

过年春联不可少,python带你制作春联,体验不一样的过年氛围

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 每逢春节,无论城市还是农村, 家家户户都要挑漂亮的红春联贴于门上,辞旧迎新,增加喜庆的节日气氛。 据说这一习俗起于宋代,在明代开始盛…

我是阿豪我的2022年年终总结.

时光如白驹过隙般,飞逝而过,来不及细品岁月的美好。一晃,2022年就过去了! 明天新的一年就来了。回忆一下2022一年都干了什么。 3月份背了大概200多道的前端面试题,疯狂的刷面试题,一天不刷几道面试题心里…

ffmpeg从某站提取视频、音频、详解

ffmpeg从某站提取视频、音频、详解 事件背景 准备链接 第一步安装下载 ffmpeg是开源软件,安装网址http://ffmpeg.org/download.html#build-windows 本人用的windows10系统 打开网址后随便你怎么下载都行,Git、或者直接下等等 按图片输入上述网址也…

【攻防世界】Web very_easy_sql

做了web才发现,原来自己是真的什么都不懂啊,不过也好,说明我有很大的进步空间呢 不闲聊了,来看题目 打开是一个登录界面,我们抓包看看返回些什么 返回包有三个需要注意的地方,我都用框框圈起来了 有一个S…

【C++】map 与 set 的介绍与使用、力扣:692. 前K个高频单词

目录 一、关联式容器 二、键值对 三、set 3.1 set 的介绍 3.2 set 的使用 3.3. set 的使用举例 四、map 4.1 map的介绍 3.2 map 的使用 4.3 map的使用举例 五、经典练习题 1.set的使用 2.map的使用 思路一(稳定排序): 思路二(priority_queue)&#x…

jvm参数说明

-Xmx3550m:设置JVM最大堆内存为3550M。 -Xms3550m:设置JVM初始堆内存为3550M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xss128k:设置每个线程的栈大小。JDK5.0以后每个线程栈大小为1M,之…

新式 AIMD 拥塞控制

周三晚上发了一则朋友圈,今天整理一下: ​ AIMD 过程可推导出 TCP 吞吐公式: TaRTTbpT\dfrac{a}{RTT}\dfrac{b}{\sqrt{p}}TRTTa​p​b​ a,b 分别为与 AIMD 参数和过程有关,该公式结论内置公平性。设 MSS 1460&…

【MySQL】九,MySQL逻辑架构剖析

服务器处理客户端请求 Connectors 外部的各种类型的连接客户端。 第一层:连接层 客户端访问 MySQL 服务器前,首先要建立 TCP 连接。 经过三次握手成功建立连接后,MySQL对传输过来的账号密码做身份认证、权限获取。 如果用户名密码错误&am…

【Iava】抽象类和接口

祝早日驱散阴霾 文章目录1. 抽象类1.1 抽象类的概念1.2 抽象类的使用注意事项1.3 抽象类的作用2. 接口2.1 接口的定义2.2 接口的使用规则2.3 创建对象拷贝,实现Cloneable3. 抽象类和接口的区别1. 抽象类 1.1 抽象类的概念 抽象类,顾名思义,这是不是一个具体的类,没有实际的功…

四旋翼无人机学习第17节--封装上传github与gitee

0 前言 经过一段时间的绘制,终于绘制完项目所需的封装。为了更好的管理封装,我准备把封装与焊盘上传到github与gitee,方便之后的管理工作。 1 文件上传gitee 注册这里就不作介绍咯。 1、首先点击新建仓库。 2、设置仓库的名称与项目介绍&…

GO语言初始化数据结构的方法你知道吗?

xdm 我是阿兵云原生 使用 golang 进行编码过程中,你们都是如何初始化数据结构的呢 GO 里面提供了 2 个关键字来进行初始化数据结构 newmake 不过有时候我也会直接使用花括号的方式直接就初始化,例如这样: name : []string{"xiaomot…

电源PCB布局要点

本次已常用的集成电源IC芯片TPS 5430.讲解一下布局要求。 在手册中可以看到官方已给出的详细布局。 这是我们原理图设计的TPS 5430。 通过以上了解到了连接关系以及布局要求。那么我们再看看官方要求是如何硬性要求布局的。 总结: 1.输入电容要靠近Vin 管脚 2.电…

图像简单运算

图像运算是以图像为单位对图像进行数学操作,运算对象以像素点为基本单位,运算结果为一幅灰度分布与原图像不同的新图像。 算术运算与逻辑运算 算术运算与逻辑运算中每次只涉及一个空间像素的位置,所以可以”原地操作“(在&#xf…

【微服务笔记02】微服务组件之Eureka常见的几个配置属性及其常见的几个概念

这篇文章,主要介绍微服务组件中Eureka常见的几个配置属性及其常见的几个概念【源代码地址】。 目录 一、Eureka常见配置属性 1.1、instance配置项 1.2、client配置项 1.3、server配置项 二、eureka常见概念 2.1、服务注册 2.2、服务发现 2.3、服务续约 2.4…

CSS常见标签知识回顾

学前端的一点css笔记,参考的是黑马程序员pink老师的教程。 一.行内元素 1.一行可以显示多个 2.宽度核高度默认由内容撑开 3.不可以设置宽高 代表标签: a、span、b、ui、s、strong、ins、em、del 二、行内块元素 1.一行可以显示多个 2.可以设置宽高…