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的电压。复位结束后,只能作为输出信号。