moerjielovecookie

Sawen_Blog

一个普通工科牲的博客网站
x
github
follow
email

ZYNQ中的GPIO

GPIO 原理#

GPIO 通过 MIO 提供 54 路接口,其中 16 路位于 bank 500,剩余位于 bank 501。还通过 EMIO 接口提供从 PL 来的 64 路输入和 128 路输出。GPIO 控制和状态寄存器内存映射在基址 $0xE000_A000$。
500
ZYNQ 的 GPIO 引脚分为 4 个 bank,共有 118 个 GPIO。

118GPIO=32MIObank0+22MIObank1+32EMIObank2+32EMIObank3118个GPIO=32个MIO(bank0)+22个MIO(bank1)+32个EMIO(bank2)+32个EMIO(bank3)

GPIO 内部结构#

|450
从图中可以看到 GPIO 有三个功能:输入、输出、中断。
其中 MIO 7 和 9 只能做输出。
一组寄存器只能控制一个 GPIO bank 的所有引脚。

器件引脚的 GPIO 控制#

输入 / 输出寄存器#

寄存器名称说明
DATA_ROGPIO 引脚的值存储在此寄存器中,无论 GPIO 被配置为输入或输出,都可以通过读此寄存器得到 GPIO 引脚的值。
因为是只读寄存器(对软件来说),软件向此寄存器的写入操作将被忽略。
DATA输出数据寄存器,当 GPIO 被配置为输出才起作用,此寄存器中的值就是输出到引脚的值。
向此寄存器写入就是在设置 GPIO 的输出值,
读此寄存器将返回 GPIO 前一时刻的输出值,而不是现在的值。
MASK_DATA_LSWMask Data Least Significant Words,输出数据低 16 位掩码寄存器,此寄存器只有低 16 位有效,
对应位为 1 表示 DATA 寄存器低 16 位中对应位的值可以更改,
若不为 1,则表示 DATA 寄存器低 16 位中对应位保持原值
MASK_DATA_MSWMask Data Most Significant Words,输出数据高 16 位掩码寄存器,
功能同 MASK_DATA_LSW,只是它对应 DATA 寄存器高 16 位
DIRMDirection Memory,方向寄存器,默认为 0 表示输入,设为 1 表示输出
注意,即使 DIRM 为 1,软件也可以像输入一样去读此引脚的电平
OENOutput Enable,输出使能寄存器,
仅当 DIRM 为 0 时有效,为 1 表示输出使能,
为 0 表示输出不使能,此时对应引脚上的值为三态值

中断控制寄存器#

寄存器名称说明
INT_TYPEInterrupt Type 中断类型寄存器,
控制 GPIO 中断是电平触发还是边缘触发
INT_POLARITYInterrupt Polarity 中断极性寄存器
控制 GPIO 中断是低电平 / 下降沿有效,还是高电平 / 上升沿有效
INT_ANYInterrupt Any,双边沿寄存器,
仅当 INT_TYPE 为边沿触发时,此寄存器才有效,控制是否双沿均可触发中断
INT_STATInterrupt State,中断状态寄存器,
此寄存器的值会被与之相连的 INT State D 触发器读取
D 触发器存储中断状态,软件通过读此 D 触发器输出来判断中断是否发生,
清除此 D 触发器来清除中断状态
INT_MASKInterrupt Mask,中断掩码寄存器,
显示当前哪些位被屏蔽,哪些位启用
INT_DISInterrupt Disable,中断失效寄存器,
向该寄存器的任何位写入 1 都会屏蔽该中断信号。
从该寄存器读取会返回不可预测的值
INT_ENInterrupt Enable,中断使能寄存器
向该寄存器的任何位写入 1,可以启用 / 解除中断信号的掩码。
从该寄存器读取将返回一个不不可预测的值

GPIO 的中断号为 ==52==,中断优先级是固定的,无需配置 GPIO 的中断优先级。GPIO 所有引脚共享同一个中断,即使能两个引脚的中断的话,软件无法判断中断来自哪个引脚。

EMIO 和 MIO#

MIO EMIO|500
MIO,Multiuse I/O,复用输入 / 输出,对应 PS 端的可配置的多功能引脚。
EMIO,Extent MIO,对应 PL 端的可配置多功能引脚。
MIO 是外设的基本引脚,由于 MIO 的引脚数量较少,ZYNQ 也提供 EMIO 接口作为 MIO 的扩展,外设通过 EMIO 接口连接到 PL 端的引脚,来实现和 MIO 几乎相同的功能。
MIO 和 EMIO 的不同点如下:

  1. MIO 对于 PL 端是透明的,PL 无法读取 MIO 引脚上的电平;PS 端可以通过 EMIO 与 PL 端通信。
  2. 外设与 MIO 是固定搭配的,初始化时要根据开发板原理图来选择引脚约束。EMIO 相对灵活,引脚可以任意指定,通过 xdc 文件约束指定到 PL 端的某个引脚。
  3. 因为 MIO 引脚更靠近外围电路,相较于 EMIO,一些外设使用 MIO 的性能更好,还有一些外设只能使用 MIO。
    |450

MIO bank 和封装的 bank 的区别与联系#

MIO 分为 Bank 0 和 Bank 1,Bank 0 是封装 Bank 500 中的部分引脚,Bank 1 是封装的 bank 501 的部分引脚。
Bank 0 包含 MIO 0~15 共 16 个 MIO,bank 1 包括 MIO 16~53 共 38 个 MIO,总共有 54 个 MIO。EMIO 一共有 64 个。
|550

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。