zedboard的GPIO学习笔记

这篇博客详细介绍了GPIO(通用输入输出)的配置过程,包括设置输出、输入模式,以及使用DATA、MASK_DATA寄存器生成输出波形。还讨论了中断功能,如中断类型、极性、使能和状态寄存器,以及中断事件的处理。此外,文章提到了DIRM和OEN寄存器在控制GPIO方向和输出启用中的作用。
摘要由CSDN通过智能技术生成

在这里插入图片描述

在这里插入图片描述
软件将GPIO配置为输出或输入。无论GPIO是设置为input(OE signal false)还是output(OE signal true),DATA_RO 寄存器始终返回GPIO引脚的状态。为了生成输出波形,软件反复写入一个或多个GPIO(通常使用MASK_DATA寄存器)。

寄存器(MIO或EMIO)

DATA_RO

  1. 此寄存器使软件能够观察设备引脚上的值。如果GPIO信号被配置为输出,那么这通常会反映输出上驱动的值。将忽略对此寄存器的写入。

  2. 如果MIO未配置为将此引脚作为GPIO引脚启用,则由于软件无法通过GPIO寄存器观察非GPIO引脚上的值,因此无法预测数据。

DATA

当GPIO信号被配置为输出时,该寄存器控制要输出的值。此寄存器的所有32位一次写入。从该寄存器读取返回写入DATA或MASK DATA的前一个值{LSW,MSW};它不返回设备引脚上的当前值。

MASK_DATA_LSW

此寄存器允许对所需的输出值进行更具选择性的更改。最多可写入16位的任意组合。未写入的位将保持不变并保持其以前的值。从该寄存器读取返回写入DATA或MASK DATA的前一个值{LSW,MSW};它不返回设备引脚上的当前值。此寄存器避免了对未更改位的读-修改-写序列的需要。

MASK_DATA_MSW

此寄存器与MASK_DATA_LSW相同,只是它控制组的16位高位。

DIRM

方向模式。这控制I/O引脚是作为输入还是输出。由于输入逻辑总是启用的,这有效地启用/禁用了输出驱动器。当DIRM[x]==0时,输出驱动器被禁用。

OEN

输出启用。当I/O配置为输出时,它控制是否启用输出。当输出被禁用时,引脚为3状态。当OEN[x]==0时,输出驱动器被禁用。

EMIO Signals(Bank2 & Bank3)

EMIO 组的寄存器接口与上一节中描述的MIO组的寄存器接口相同。但是,EMIO接口只是PS和PL之间的导线,因此有一些区别。

  1. 输入是来自PL的导线,与输出值或OEN寄存器无关。当DIRM设置为0时,可以从数据寄存器读取它们,使其成为输入。
  2. 输出线不支持3态,因此它们不受OEN的影响。要输出的值使用DATA、MASK_DATA_LSW和MASK_DATA_MSW寄存器进行编程。DIRM必须设置为1,使其成为输出。
  3. 输出使能线只是来自PS的输出。它们由DIRM/OEN寄存器控制,如下所示:EMIOGPIOTN[x]=DIRM[x]&OEN[x]
  4. EMIO I/O不以任何方式连接到MIO I/O。EMIO输入不能连接到MIO输出,MIO输入不能连接到EMIO输出。每个Bank是独立的,只能作为软件可观察/可控制的信号。

Bank0, Bits[8:7] are Outputs

Bank0的GPIO位[8:7]对应于用于在复位期间控制I/O缓冲器本身的电压模式的封装管脚。这些引脚被称为用于MIO组的VMODE引脚带(参见第166页引导模式引脚设置一节)。它们必须根据适当的电压模式由外部系统驱动。为了防止它们被其他系统逻辑驱动,它们不能用作通用输入。
这些位可以用作通用输出,因为输出驱动器在复位时被禁用。在系统引导期间读取电压模式后,系统可以开始使用这些作为输出。

中断功能

中断检测逻辑监视GPIO输入信号。中断触发器可以是正边缘、负边缘、边缘、低电平或高电平。触发器的灵敏度是使用INT_TYPE、INT_POLARITY和INT_ANY寄存器编程的。
如果检测到中断,GPIO的INT_STAT状态由中断检测逻辑设置为真。
如果INT_STAT状态为enabled(unmasked),则中断会传播到一个大的OR函数。此函数将所有四个组中所有GPIO的所有中断合并到中断控制器的一个输出(IRQ ID#52)。如果中断被禁用(屏蔽),那INT_STAT状态会一直保持到清除为止,但是它不会传播到中断控制器,除非稍后写入INT_EN以禁用屏蔽。由于所有GPIO共享相同的中断,软件必须同时考虑INT_MASK和INT_STAT来确定哪个GPIO导致了中断。

中断掩码状态是通过向INT_EN和INT_DIS寄存器写入1来控制的。
将1写入INT_EN寄存器将禁用允许活动中断传播到中断控制器的掩码。
将1写入INT_DIS寄存器将启用掩码。
中断掩码的状态可以使用INT_MASK寄存器读取。

INT_MASK

该寄存器是只读的,显示当前哪些位被屏蔽,哪些位未被屏蔽/启用。

INT_EN

将1写入该寄存器的任何位可启用/取消该中断信号的屏蔽。从这个寄存器读取返回一个不可预测的值。

INT_DIS

将1写入该寄存器的任何位都会屏蔽该中断信号。从这个寄存器读取返回一个不可预测的值。

INT_STAT

该寄存器显示是否发生了中断事件。将1写入该寄存器中的某个位将清除该位的中断状态。将0写入该寄存器中的某个位将被忽略。

INT_TYPE

该寄存器控制中断是边缘敏感还是电平敏感。

INT_POLARITY

该寄存器控制中断是低电平有效还是高电平有效(或下降沿敏感还是上升沿敏感)。

INT_ON_ANY

如果INT_TYPE设置为边敏感,则该寄存器在上升沿和下降沿上都启用中断事件。如果INT_TYPE设置为level sensitive,则忽略此寄存器。

GPIO 引脚配置

首先配置PIN脚为GPIO信号
Example:

  1. Select MIO pin as GPIO: Set L0_SEL, L1_SEL, L2_SEL, L3_SEL =0.
  2. Set TRI_ENABLE = 0.
  3. LVCMOS18 (refer to the register definition for other voltage options)。
  4. Slow CMOS edge.
  5. Enable internal pull-up resistor.6. Disable HSTL receiver.

Example: 配置引脚为output

  1. Set the direction as output
    写DIRM_0寄存器为1
  2. Set the output enable
    写OEN_0寄存器为1

Example: 配置引脚为input

  1. Set the direction as input
    写DIRM_0为0

引脚配置寄存器

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

其他寄存器

寄存器DIRM_0

这个寄存器控制IO引脚是作为输入还是输出。由于输入逻辑总是启用的,这有效地启用/禁用了输出驱动器。
该寄存器控制bank0,对应于MIO[31:0]。

在这里插入图片描述

寄存器DIRM_1

这个寄存器的操作方式与DIRM_0完全相同,只是它反映了bank1,它对应于MIO[53:32]。

OEN_0

当IO配置为输出时,这将控制是否启用输出。当输出被禁用时,引脚是三态的。注意:MIO驱动器设置(slcr.MIO_pin_xx.tri_ENABLE字段)必须被禁用(即设置为0)此字段才能工作。当MIO三态被启用时,无论GPIO设置如何,驱动程序都被禁用。该寄存器控制与MIO[31:0]相对应的bank0。
在这里插入图片描述

DATA_0_RO

此寄存器使软件能够观察设备引脚上的值。
如果GPIO信号被配置为输出,那么这通常会反映输出上驱动的值。
忽略对此寄存器的写入。
此寄存器反映与MIO[31:0]相对应的bank0的输入值。
注意:如果MIO未配置为将此pin作为GPIO pin启用,则数据DATA_0_RO是不可预测的。换句话说,软件无法通过GPIO寄存器观察非GPIO引脚上的值。
在这里插入图片描述

DATA_0

当GPIO信号配置为输出时,该寄存器控制输出的值。
此寄存器的所有32位一次写入。
从该寄存器读取返回写入DATA或MASK DATA的前一个值{LSW,MSW};它不返回设备引脚上的值。
注意:此寄存器不影响输出驱动器的启用。参见DIRM_0和OEN_0寄存器。该寄存器控制bank0的输出值,对应于MIO[31:0]。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝冰露

感谢老板打赏~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值