ZYNQ学习之旅--PS_EMIO

简介

ZYNQ GPIO 接口信号被分成四组,分别是从 BANK0 到 BANK3。其中 BANK0 和 BANK1 中共计 54
个信号通过 MIO 连接到 ZYNQ 器件的引脚上,这些引脚属于 PS 端;而 BANK2 和 BANK3 中共计 64 个信号则通过 EMIO 连接到了 ZYNQ 器件的 PL 端。如下图所示:
在这里插入图片描述
在大多数情况下,PS 端经由 EMIO 引出的接口会直接连接到 PL 端的器件引脚上,通过 IO 管脚约束来
指定所连接 PL 引脚的位置。通过这种方式,EMIO 可以为 PS 端实现额外的 64 个输入引脚或 64 个带有输出使能的输出引脚。EMIO 还有一种使用方式,就是用于连接 PL 内实现的功能模块(IP 核),此时 PL 端的 IP 作为 PS 端的一个外部设备。
在这里插入图片描述

BD设计

在这里插入图片描述
这里用到了PL端的资源,所以需要对PL端的引脚进行绑定。

软件设计

/*
 *   uartns550   9600
 *   uartlite    Configurable only in HW design
 *   ps7_uart    115200 (configured by bootrom/bsp)
 */

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include <xparameters.h>
#include "xgpiops.h"
#include <xil_types.h>
#include <time.h>
#include "sleep.h"
#define		LED1	54
#define		LED2	55
#define		LED3	56
#define		LED4	57
#define		GPIO_ID	XPAR_XGPIOPS_0_DEVICE_ID
#define		input	0
#define		output	1

XGpioPs Inst_gpio;

int main()
{
	u32 data = 0x0;
    init_platform();
    XGpioPs_Config *xps_config;
    int status;
    print("Hello World\n\r");
    xps_config = XGpioPs_LookupConfig(GPIO_ID);
    status = XGpioPs_CfgInitialize(&Inst_gpio,xps_config,
    		xps_config->BaseAddr);
    if(status!=XST_SUCCESS){
    	print("failed\n");
    	return XST_FAILURE;
    }
    XGpioPs_SetDirectionPin(&Inst_gpio, LED1, output);
    XGpioPs_SetDirectionPin(&Inst_gpio, LED2, output);
    XGpioPs_SetDirectionPin(&Inst_gpio, LED3, output);
    XGpioPs_SetDirectionPin(&Inst_gpio, LED4, output);
    XGpioPs_SetOutputEnablePin(&Inst_gpio, LED1, 0x1);
    XGpioPs_SetOutputEnablePin(&Inst_gpio, LED2, 0x1);
    XGpioPs_SetOutputEnablePin(&Inst_gpio, LED3, 0x1);
    XGpioPs_SetOutputEnablePin(&Inst_gpio, LED4, 0x1);
    XGpioPs_WritePin(&Inst_gpio, LED1, data);
    XGpioPs_WritePin(&Inst_gpio, LED2, data);
    XGpioPs_WritePin(&Inst_gpio, LED3, data);
    XGpioPs_WritePin(&Inst_gpio, LED4, data);
    while(1){
    	usleep(200000);
        XGpioPs_WritePin(&Inst_gpio, LED1,data );
        XGpioPs_WritePin(&Inst_gpio, LED2, data);
        XGpioPs_WritePin(&Inst_gpio, LED3, data);
        XGpioPs_WritePin(&Inst_gpio, LED4, data);
    	usleep(200000);
        XGpioPs_WritePin(&Inst_gpio, LED1, ~data);
        XGpioPs_WritePin(&Inst_gpio, LED2, ~data);
        XGpioPs_WritePin(&Inst_gpio, LED3, ~data);
        XGpioPs_WritePin(&Inst_gpio, LED4, ~data);
    }
    cleanup_platform();
    return 0;
}

这里实现了利用EMIO控制PL端的LED。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值