【zynq 7020管脚约束之GPIO】

GPIO定义

指的是general purpose I/O ,它是zynq7000系列中MIO的一部分,它是一个外设(peripheral),是用来对器件的引脚作观测(input)以及控制(output)。GPIO的起始地址在0XE000_A000。

AXI_GPIO

        AXI_GPIO相当于GPIO的IP核,是通过AXI总线挂在PS上的GPIO上。

MIO定义

是指multiuse I/O,即多路复用,将来自PS外设以及静态存储器接口进行多路复用到ps的引脚上去。属于Zynq的PS部分,Zynq7000 系列芯片有 54 个 MIO。它们分配在 GPIO 的 Bank0 和 Bank1 上,这些引脚可以用在GPIO、SPI、UART、TIMER、Ethernet、USB等功能上,每个引脚都同时具有多种功能,故叫多功能IO接口。这些 IO 与 PS 直接相连。不需要添加引脚约束,MIO 信号对 PL部分是透明的,不可见。所以对 MIO 的操作可以看作是纯 PS 的操作。GPIO 的控制和状态寄存器基地址为:0xE000_A000,我们 SDK 下软件操作底层都是对于内存地址空间的操作。

EMIO定义

是用来将ps连接到fpga的引脚,从而来扩展pl的引脚到ps端。

  EMIO(extendable multiuse I/O):扩展MIO,依然属于Zynq的PS部分,只是连接到了PL上,再从PL的引脚连到芯片外面实现数据输入输出。Zynq7000 系列芯片有 64 个 EMIO,它们分配在 GPIO 的 Bank2 和 Bank3 上,当 MIO 不够用时,PS 可以通过驱动 EMIO 控制 PL 部分的引脚,EMIO 的使用相当于,是一个 PS + PL 的结合使用的例子。所以,EMIO 需要分配引脚以及编译综合生成 bit文件。

PS:

  (1)由于总计有54个 MIO ,因此第1组 MIO 引脚限制为22位。

  (2)尽管 MIO 和 EMIO 组之间存在功能差异,但是对每组 GPIO 的控制是相同的。

ZYNQ引脚分为MIO和EMIO两中,MIO为PS端由ARM控制,EMIO为PL端由FPGA控制。MIO共有54个引脚,MIO引脚集中在Bank0和Bank1,功能基本都是固定了,例如选中SD0就会用到40-45五个引脚这是用到PS端的引脚,而PL端则有64个引脚集中在Bank2,Bank3,功能未固定做什么都行。

如图 1.4.1 所示, Zynq PS 实现了众多接口,既有 PS 和 PL 之间的,也有 PS 和外部部件之间的。
PS 和外部接口之间的通信主要是通过复用的输入/输出(Multiplexed Input/Output, MIO)实现
的,它提供了可以灵活配置的 54 个引脚,这表明外部设备和引脚之间的映射是可以按需定义的。当需要扩展超过 54 个引脚的时候可以通过扩展 MIO(Extended MIO, EMIO)来实现, EMIO 并不是 PS 和外部连接之间的直接通路,而是通过共用了 PL 的 I/O 资源来实现的。

举例 用户可以用软件控制是UART还是I2C连接到MIO,软件控制MIO给哪个外设使用外部引脚


PS 中可用的 I/O 包括标准通信接口和通用输入/输出(General Purpose Input/Output,
GPIO), GPIO 可以用做各种用途,包括简单的按键、开关和 LED。GPIO不针对某种特殊的设备,也可以模拟一些协议,比如I2C协议

如下图所示:

图 1.4.3 PS 的外部接口

ZYNQ引脚分为MIO和EMIO两中,MIO为PS端由ARM控制,EMIO为PL端由FPGA控制。MIO共有54个引脚,MIO引脚集中在Bank0和Bank1,功能基本都是固定了,例如选中SD0就会用到40-45五个引脚这是用到PS端的引脚,而PL端则有64个引脚集中在Bank2,Bank3,功能未固定做什么都行。

 

 有的MIO功能已经固定

 MIO在zynq上的管脚是固定的,而EMIO,是通过PL部分扩展的,所以使用EMIO时候需要在约束文件中分配管脚,所以设计EMIO的程序时,需要生成PL部分的bit文件,烧写到FPGA中。

 1.GPIO是一个外设,通过MIO模块来对器件的引脚作观测(作为input 一般观测高低电平 比如按键)以及控制(output 比如LED或者蜂鸣器)

2.MIO(Multiuse I/O),将来自PS外设和静态存储器接口的访问多路复用到PS的引脚上

3.GPIO可以独立且动态的编程,作为输入/输出以及中断模式。

4.GPIO被分成了4个bank,bank0/bank1通过MIO连接到PS的引脚,bank2/bank3通过EMIO连接到PL

5.软件通过一组存储映射的寄存器来控制GPIO。

存储映射是指 Session 会话 指一次读写操作 需要一个地址来指明读写操作寄存器的位置

存储指操作对象位于存储器空间里面 映射指读写操作的同时给定一个地址

给已分配好地址(通过存储器映射实现)的有特定功能的内存单元取别名的过程就叫寄存器映射

【嵌入式系统】存储器映射与寄存器映射原理_Mr.Winter`的博客-CSDN博客_存储器映射

 502已经固定只能连接到DDR存储器,在ps端能使用的引脚只有54个

GPIO被分成4个bank。

软件通过一组存储映射的寄存器来控制GPIO。

 

 6.寄存器组:

DATA_RO,用来反映器件引脚的状态。

DATA,在GPIO被配置成输出的时候,该寄存器可以控制输出的数值。

MASK_DATA_LSW,屏蔽DATA低十六位。

比如有一个数值,16个LED亮灭,如果只想翻转0101,

DATA: 1010_0101_1010_0101_xxxx_xxxx_xxxx_xxxx

  (1) 先把DATA的值读出来 (read

(2)改变需要更改的数值   (modify)

(3)修改之后的数值写到DATA中 (write)

如果有mask寄存器,不需要修改的位就可以不进行read_modify_write这个操作

DATA:  1010_0101_1010_0101_xxxx_xxxx_xxxx_xxxx

MASK_DATA_MSW: 1111_0000_1111_1111_xxxx_xxxx_xxxx_xxxx  1 屏蔽掉不需要更改的信号

DATA:  0000_1010_0000_0000_xxxx_xxxx_xxxx_xxxx

MASK_DATA_MSW,屏蔽DATA高16位。
DIRM,用于控制I/O引脚作为输入还是输出。0:关闭输出驱动;1:使能输出驱动
OEN,当I/O被配置成输出时,该寄存器用于打开/关闭输出使能。0:关闭输出使能;1:打开输出使能

DIRM和OEN是与的关系

 7.MIO[8:7]在系统复位过程中作为VMODE引脚(作为输入),用于配置MIO Bank的电压。复位结束后,只能作为输出信号。

参考视频:12_GPIO之EMIO简介_哔哩哔哩_bilibili

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值