ZYNQ学习-GPIO-MIO

   日期:2021-03-28     浏览:109    评论:0    
核心提示:ZYNQ 共有三种GPIO:MIO、EMIO、AXI_GPIO。Ug585 MIO & EMIO1、MIOmultiuse I/O,多功能IO接口,分配在 GPIO 的 Bank0 和Bank1,属于Zynq的PS部分。在芯片外部有54个引脚,这些引脚可以用在GPIO、SPI、UART、TIMER、Ethernet、USB等功能上,每个引脚都同时具有多种功能,故叫多功能。这些 IO 与 PS 直接相连。不需要添加引脚约束,MIO 信号对 PL部分是透明的,不可见。所以对 MIO 的操

ZYNQ 共有三种GPIO:MIO、EMIO、AXI_GPIO。

Ug585 MIO & EMIO

1、MIO

multiuse I/O,多功能IO接口,分配在 GPIO 的 Bank0 和Bank1,属于Zynq的PS部分。在芯片外部有54个引脚,这些引脚可以用在GPIO、SPI、UART、TIMER、Ethernet、USB等功能上,每个引脚都同时具有多种功能,故叫多功能。这些 IO 与 PS 直接相连。不需要添加引脚约束,MIO 信号对 PL部分是透明的,不可见。所以对 MIO 的操作可以看作是纯 PS 的操作。

xparameters.h
#define XPAR_PS7_GPIO_0_DEVICE_ID 0
#define XPAR_PS7_GPIO_0_BASEADDR 0xE000A000
#define XPAR_PS7_GPIO_0_HIGHADDR 0xE000AFFF

GPIO 的控制和状态寄存器基地址为:0xE000_A000,我们 SDK 下软件操作底层都是对于内存地址空间的操作。
一个GPIO端口至少需要两个寄存器,一个控制用的通用IO口控制寄存器和一个存放数据的通用IO端口数据寄存器。
GPxCON寄存器为控制寄存器,它的每一位对应一个引脚,其某位设为0,相应的引脚为输出引脚,为1时为输入引脚。
GPxDAT为数据寄存器,当引脚设为输入时,读此寄存器可以知道相应的引脚的电平状态为高还是低,当引脚设为输出时,写此寄存器可令此引脚输出为高电平或者低电平。

Bank0有32个MIO引脚,Bank1有22个MIO引脚,54个引脚直接通过MIO连接到PS上,不需硬件配置,直接使用SDK软件进行编程。

 

对于GPIO的理解

1.GPIO是一种外设,用来对器件的引脚作观测和控制。

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

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

4.GPIO被分成了四个bank。

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

6.寄存器组:

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

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

(3)      MASK_DATA_LSW,用于屏蔽DATA的低16位。

(4)      MASK_DATA_MSW,用于屏蔽DATA的高16位。

(5)      DIRM,用于控制I/O引脚是作为输入还是输出,0为使能输入驱动,1为使能输出驱动。

(6)      OEN,当I/O被配置成输出时,该寄存器用于打开/关闭输出使能,0为关闭输入使能,1为打开输出使能。

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

 

如何启动GPIO

1.初始化GPIO驱动

2.把GPIO方向设置为输出。

3.设置输出使能 (给pin10赋值1)。

4.写输出给GPIO引脚。

 

 

MIO控制led灯代码

#include<stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#define GPIO_DEVICE_ID      XPAR_XGPIOPS_0_DEVICE_ID
#define MIO0_LED                  0
XGpioPs_Config *ConfigPtr;
XGpioPs Gpio;
main()
{
    printf("GPIO TEST\n");

    ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
    XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);

   
    XGpioPs_SetDirectionPin(&Gpio,MIO0_LED, 1);
    
    XGpioPs_SetOutputEnablePin(&Gpio,MIO0_LED, 1);

    
    XGpioPs_WritePin(&Gpio,MIO0_LED, 0x1);
}

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服