RM_Chapter14:General Purpose I/O (GPIO)

Chapter 14:General Purpose I/O (GPIO)

14.1 Introduction

在这里插入图片描述

  • 通用I/O(GPIO)外设通过MIO模块为软件提供最多54个设备插脚的观察和控制。它还提供从可编程逻辑(PL)到PL的64个输入和通过EMIO接口到PL的128个输出的访问。GPIO被组织成四组寄存器,它们对相关的接口信号进行分组
  • 每个GPIO都独立地动态地编程为输入、输出或中断感测。软件可以使用单个加载指令读取银行中的所有GPIO值,或者使用单个存储指令将数据写入一个或多个GPIO(在GPIO范围内)。GPIO控制寄存器和状态寄存器是内存映射在基址0xe000_a000
    在这里插入图片描述
    GPIO外围设备的主要特点总结如下:
  • 设备引脚54 gpio信号(通过mio多路复用器路由)
  • 输出具有三态功能
  • PS和PL之间通过EMIO接口的192 gpio信号
  • 64个输入,128个输出(64个真实输出和64个输出启用)
  • 每个GPIO的功能可以在单个或组的基础上动态编程。
  • 启用、位或银行数据写入、输出启用和方向控制
  • 基于单个GPIO的可编程中断
  • 原始和屏蔽中断的状态读取
  • 可选灵敏度:电平敏感(高或低)或边缘敏感(正、负或两者都有)

14.2 Block Diagram

在这里插入图片描述
在这里插入图片描述
如图14-1所示,GPIO模块分为四组:

  • BANK0:32位BANK控制MIO管脚[31:0]
  • BANK1:22位BANK控制MIO管脚[53:32]
    Note:由于MIO总共有54个管脚,因此Bank1限制为22位。
  • BANK2:32位BANK控制EMIO信号[31:0]
  • BANK3:32位BANK控制EMIO信号[63:32]

GPIO由软件通过一系列内存映射寄存器控制。控制每个BANK都是相同的,尽管MIOBANK和EMIOBANK之间的微小差异,由于它们的不同功能
在这里插入图片描述
在这里插入图片描述

14.3 GPIO Control of Device Pins

在这里插入图片描述
在这里插入图片描述

  • 软件将GPIO配置为输出或输入。数据寄存器总是返回GPIO引脚的状态,不管GPIO是设置为输入(OE信号错误)还是输出(OE信号真)。为了产生一个输出波形,软件会重复地写入一个或多个GPIO。(通常使用屏蔽数据寄存器)
  • 应用程序可能需要同时切换多个GPIO(少于少量
    两个I/O缓冲区之间的固有倾斜时间)。在这种情况下,需要切换的所有GPIO同时必须来自同一个16位半字节组(即,最高有效16位或最低有效16位)的gpios,使屏蔽数据寄存器能够在一个存储器中写入它们指令
    在这里插入图片描述
    MIO bank控制(针对bank0和bank1)总结如下:
  • DATA_RO:此寄存器使软件能够观察设备管脚上的值。如果将GPIO信号配置为输出,则这通常会反映输出上驱动的值。忽略对此寄存器的写入

注意:如果MIO未配置为将此管脚启用为GPIO管脚,则数据不可预测,因为软件无法通过GPIO寄存器观察非GPIO管脚上的值

  • DATA:当GPIO信号配置为输出时,此寄存器控制要输出的值。该寄存器的所有32位都是一次性写入的。从这个寄存器读取返回先前写入数据或屏蔽数据LSW,MSW的值;它不返回设备管脚上的当前值
  • MASK_DATA_LSW:此寄存器允许对所需输出值进行更选择性的更改。最多可写入16位的任意组合。未写入的位不变并保持它们以前的值。从这个寄存器中读取返回以前写入的值无论是数据还是屏蔽LSW,MSW,它都不会返回设备管脚上的当前值。该寄存器避免了对不变位进行读-修改-写序列的需要
  • MASK_DATA_MSW:此寄存器允许对所需输出值进行更选择性的更改。最多可写入16位的任意组合。未写入的位不变并保持它们以前的值。从这个寄存器中读取返回以前写入的值无论是数据还是屏蔽LSW,MSW,它都不会返回设备管脚上的当前值
    ,该寄存器避免了对不变位进行读-修改-写序列的需要
  • DIRM:方向模式。这控制I/O引脚是作为输入还是输出。由于输入逻辑总是被启用的,这有效地启用/禁用了输出驱动程序。当dirm[x]==0时,输出驱动程序被禁用
  • OEN:输出使能。当I/O配置为输出时,它控制是否启用输出。当输出被禁用时,管脚为3状态。当oen[x]==0时,输出驱动器被禁用

14.3.1 Special Consideration for EMIO Signals

在这里插入图片描述
在这里插入图片描述
本节描述了bank2和bank3的操作(见图14-2)
EMIO bank的寄存器接口与上一节中描述的MIO bank的寄存器接口相同。然而,EMIO接口只是PS和PL之间的电线,
所以有一些不同之处:

  • 输入是来自pl的电线,与输出值或dirm/oen寄存器无关。它们可以从数据寄存器中读取
  • 输出线不支持3态,因此它们也不受dirm/oen的影响。要输出的值使用数据、屏蔽数据寄存器和屏蔽数据寄存器进行编程
  • 输出使能线只是来自PS的输出。这些由DIRM/OEN寄存器控制。如下:emiogpiotn[x]=dirm[x]&oen[x]

14.3.2 Special Treatment of Bank0[8:7]

在这里插入图片描述

  • Bank0的gpio位[8:7]对应于用于在重置期间控制I/O缓冲器自身电压模式的封装管脚。因此,它们必须由外部系统根据适当的电压模式驱动。为了防止它们被其他系统逻辑驱动,它们不能用作通用输入
  • 这些位可以用作通用输出,因为输出在复位时被禁用。在系统引导期间读取电压模式后,系统可以开始使用这些作为输出

14.4 Interrupt Function

在这里插入图片描述

  • 中断检测逻辑监控GPIO输入信号。中断触发器可以是正边缘、负边缘、边缘、低级别或高级别。触发灵敏度使用int_类型、int_极性和int_任何寄存器进行编程
  • 如果检测到中断,则通过中断检测逻辑将GPIO的int_stat状态设置为真。如果启用了int_stat状态(未屏蔽),则中断会传播到一个大的或函数。此函数将所有四个银行中所有GPIO的所有中断合并为一个输出(IRQ ID 52)到中断控制器。如果中断被禁用(屏蔽),那么int_stat状态将保持到清除为止,但它不会传播到中断控制器,除非int_en稍后被写入以禁用该屏蔽。由于所有的GPIO共享相同的中断,软件必须同时考虑int_mask和int_stat以确定哪个GPIO导致了中断
  • 中断屏蔽状态通过向int_en和int_dis寄存器写入1来控制。将1写入内部寄存器将禁用允许活动中断传播到中断控制器的屏蔽。将1写入int-dis寄存器将启用掩码。中断屏蔽的状态可以使用int-mask寄存器读取
  • 如果gpio中断是边缘敏感的,那么int状态由检测逻辑锁存。通过将1写入int_stat寄存器来清除int闩锁。对于电平敏感的中断,源为清除中断信号,必须清除GPIO的中断输入。或者,软件可以使用int-dis寄存器屏蔽该输入
  • 进入中断控制器的中断信号的状态可以通过读取int-stat和int-mask寄存器。如果int_stat=1且int_mask=0,则断言该中断信号
    在这里插入图片描述
    在这里插入图片描述
    MIObank控制(针对bank2和bank3)总结如下:
  • INT_MASK:这个寄存器是只读的,显示当前被屏蔽的位和未被屏蔽/启用的位
  • INT_EN:将1写入该寄存器的任何位可以启用/取消该中断信号的显示。从这个寄存器中读取将返回一个不可预测的值
  • INT_DIS:将1写入该寄存器的任何位都会屏蔽中断信号。从阅读此寄存器返回不可预测的值
  • INT_STAT:此寄存器显示是否发生中断事件。在该寄存器中将1写入一位将清除该位的中断状态。将0写入此寄存器中的一位将被忽略
  • INT_TYPE:此寄存器控制中断是边缘敏感还是级别敏感
  • INT_POLARITY:该寄存器控制中断是低激活还是高激活(或对下降沿敏感还是对上升沿敏感)
  • INT_ON_ANY:如果int_类型设置为边缘敏感,则该寄存器在上升和下降边缘上启用中断事件。如果int_类型设置为级别敏感,则忽略此寄存器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值