Xilinx zynq 7010/7020 GPIO - EMIO,MIO

在这里插入图片描述
有条件的可以买一块xilinx zc702官方开发板,能够从中受益匪浅。
EMIO 是Exrended IO 如上图所示,当PS端的通过MIO分配物理引脚不够用的时候,EMIO也是属于PS端的,但是它连接的是PL端的内部引脚,PL端要输出到物理引脚是需要管脚约束的。所以PL端是要生成Bit 流文件的。
所谓多路复用在英文上叫Routing 或者mapping,下表所示的表示外设的多路复用情况。
在这里插入图片描述
在这里插入图片描述

例如GPIO可以复用到MIO最多有54个,也可以多路复用到EMIO 使用的是PL 端的BANK2,BANK3.有64个三态IO。
同理有些外设是不能复用到EMIO的,例如USB,QSPI。

在这里插入图片描述

其映射关系如上图所示,EMIO序号和实际的物理引脚的指定方式是通过FPGA的管脚约束进行的。

在这里插入图片描述
EMIO实际上的控制只有三个种,EMIOGPIOI(输入),EMIOGPIOO(输出),EMIOGPIOTN( DIRM[x] & OEN[x] )
上上图所示,EMIO给到PL每部的信号是一条数据线,所以只有两种状态 1或者0.
同理输入也是一条来自PL的数据线,只有1或者0.
在这里插入图片描述

然后GPIO的寄存器控制不了这两条数据线的值,只能控制数据是否到达GPIO的寄存器里(DATA_RO).
这里关键是看,GPIO是GPIO,他的寄存器控制的这个外设内部的逻辑。他的输入输出是被动的,无法控制的。

在这里插入图片描述

在PL中开启两个每部引脚。
在这里插入图片描述
在PL管脚约束步骤上,指定PL内部引脚连接到BANK2,BANK3的哪个物理引脚上。

MIO序号是0~53 ,EMIO从54开始
SDK中的代码如下

/*
 * main.c
 *
 *  Created on: 2022年10月22日
 *      Author: Administrator
 */


#include "xparameters.h"
#include "xstatus.h"
#include "xil_printf.h"
#include "xgpiops.h"
#include "sleep.h"

#define GPIO_DEVICE_ID      XPAR_XGPIOPS_0_DEVICE_ID

//这里使用的是黑金7020 开发板
#define PIN_LED0 (13)
#define PS_KEY_1 (50)

#define PL_LED_1 (54)
#define PL_KEY_1 (55)

XGpioPs Gpio;
int main(void)
{
    int Status;
	XGpioPs_Config *ConfigPtr;

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

    if (Status != XST_SUCCESS) {
    return XST_FAILURE;
	}

    //PS output
    XGpioPs_SetDirectionPin(&Gpio, PIN_LED0, 1);
    XGpioPs_SetOutputEnablePin(&Gpio, PIN_LED0, 1);

    //PL output
    XGpioPs_SetDirectionPin(&Gpio, PL_LED_1, 1);
    XGpioPs_SetOutputEnablePin(&Gpio, PL_LED_1, 1);

    // key Direction
    XGpioPs_SetDirectionPin(&Gpio, PS_KEY_1, 0);
    XGpioPs_SetDirectionPin(&Gpio, PL_KEY_1, 0);


    while (1)
    {
        if(XGpioPs_ReadPin(&Gpio,PS_KEY_1))
        {
            XGpioPs_WritePin(&Gpio,PIN_LED0,0x01);
        }
        else
        {
            XGpioPs_WritePin(&Gpio,PIN_LED0,0x00);
        }



        if(XGpioPs_ReadPin(&Gpio,PL_KEY_1))
        {
            XGpioPs_WritePin(&Gpio,PL_LED_1,0x01);
        }
        else
        {
            XGpioPs_WritePin(&Gpio,PL_LED_1,0x00);
        }
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值