第2.6讲 GPIO之MIO控制LED实验程序设计 36:24

对gpio操作
vivado2019.2 vitis
下载【2_领航者ZYNQ之嵌入式SDK开发指南_V2.0】文档

正点原子视频添加链接描述

读取的xsa文件是vivado生成的wrapper,每次生成的都不一样
在这里插入图片描述
在这里插入图片描述
然后新建一个application
![

](https://img-blog.csdnimg.cn/direct/4e8c29fc2aff42a6a85bbbe213af5f1f.png)

pynqz2原理图
参考了这个网页
原子的视频
在这里插入图片描述

没有编译报错,Xilinx Vitis运行报错executables selected for download on to the following processors doesn‘t exist的解决方法

视频15:30的时刻运行对。
需要注意板子上的跳线帽,启动不是SD启动,是JTAG启动
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

zynq一共118个io
在这里插入图片描述
在这里插入图片描述

0-117 in Zynq
查看【XGpioPs_SetDirectionPin】函数,在【xgpiops.c里面】
*

  • Set the Direction of the specified pin.
  • @param InstancePtr is a pointer to the XGpioPs instance.
  • @param Pin is the pin number to which the Data is to be written.
  •   Valid values are 0-117 in Zynq and 0-173 in Zynq Ultrascale+ MP.
    
  • @param Direction is the direction to be set for the specified pin.
  •   Valid values are 0 for Input Direction, 1 for Output Direction.
    
  • @return None.
    MIO有 0-53 一共54个
    在这里插入图片描述
    EMIO 有两个bank 每个32b
    编程思路就是:1.先根据器件的ID查找器件的配置信息;2.然后初始化GPIO的驱动3.把GPIO的方向设置为输出;4.设置输出使能;5.写数据到GPIO的输出引脚。
#include "stdio.h"
#include "xparameters.h" //器件参数信息
#include "xstatus.h"     //包含XST_FAILURE和XST_SUCCESS的宏定义
#include "xil_printf.h"  //包含print()函数
#include "xgpiops.h"     //包含PS GPIO的函数
#include "sleep.h"       //包含sleep()函数

#define GPIO_DEVICE_ID      XPAR_XGPIOPS_0_DEVICE_ID
#define MIO0_PIN 0  	//板上的MIO的位置是MIO0 0-117 in Zynq

XGpioPs Gpio;            // GPIO设备的驱动程序实例



int main()
{
	printf("GPIO MIO TEST!\n\r");

	XGpioPs_Config *ConfigPtr;
	int Status;
	//根据器件ID查询【配置信息】
    ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
    //初始化GPIO【驱动】
    Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
                        ConfigPtr->BaseAddr);
    if (Status != XST_SUCCESS){
        return XST_FAILURE;
    }

    //设置指定GPIO引脚的【方向】:0输入,1输出
    XGpioPs_SetDirectionPin(&Gpio, MIO0_PIN, 1);

    //【使能】指定引脚输出:0禁止输出使能,1使能输出
     XGpioPs_SetOutputEnablePin(&Gpio, MIO0_PIN, 1);

     //写数据到GPIO引脚
     XGpioPs_WritePin(&Gpio, MIO0_PIN, 0x1);


	return 0;
}

解读MIO-EMIO

在这里插入图片描述

视频
右键,端口,选择make external
在这里插入图片描述

ZYNQ7020 芯片的 BANK35 内,该 BANK 的供电电压为 3.3V

bank电压分配的问题
然后Bank500有16个IO口,Bank501有38个IO口,共54个;

在这里插入图片描述
分出来5个EMIO
在这里插入图片描述

在这里插入图片描述
使用PL端资源,必须生成bit文件

在这里插入图片描述

用的vitis 2019.2 步骤不一样,要新建一个工程,读入xsa,上面生成的
在这里插入图片描述
在这里插入图片描述
一个空的src
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#include "stdio.h"
#include "xparameters.h" //器件参数信息
#include "xstatus.h"     //包含XST_FAILURE和XST_SUCCESS的宏定义
#include "xil_printf.h"  //包含print()函数
#include "xgpiops.h"     //包含PS GPIO的函数
#include "sleep.h"       //包含sleep()函数

#define GPIO_DEVICE_ID      XPAR_XGPIOPS_0_DEVICE_ID
#define LED0_PIN 58 	//板上的EMIO的位置 0-117 in Zynq
#define LED1_PIN 57
#define LED2_PIN 56
#define LED3_PIN 55
#define LED5_G_PIN 54	//bank2 开始54

XGpioPs Gpio;            // GPIO设备的驱动程序实例



int main()
{
	printf("GPIO MIO TEST!\n\r");

	XGpioPs_Config *ConfigPtr;
	int Status;

	//根据器件ID查询【配置信息】
    ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
    //初始化GPIO【驱动】
    Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
                        ConfigPtr->BaseAddr);
    if (Status != XST_SUCCESS){
        return XST_FAILURE;
    }

    //设置指定GPIO引脚的【方向】:0输入,1输出
    XGpioPs_SetDirectionPin(&Gpio, LED0_PIN, 1);
    XGpioPs_SetDirectionPin(&Gpio, LED1_PIN, 1);
    XGpioPs_SetDirectionPin(&Gpio, LED2_PIN, 1);
    XGpioPs_SetDirectionPin(&Gpio, LED3_PIN, 1);
    XGpioPs_SetDirectionPin(&Gpio, LED5_G_PIN, 1);

    //【使能】指定引脚输出:0禁止输出使能,1使能输出
     XGpioPs_SetOutputEnablePin(&Gpio, LED0_PIN, 1);
     XGpioPs_SetOutputEnablePin(&Gpio, LED1_PIN, 1);
     XGpioPs_SetOutputEnablePin(&Gpio, LED2_PIN, 1);
     XGpioPs_SetOutputEnablePin(&Gpio, LED3_PIN, 1);
     XGpioPs_SetOutputEnablePin(&Gpio, LED5_G_PIN, 1);


     while(1){
     //写数据到GPIO引脚
     XGpioPs_WritePin(&Gpio, LED0_PIN, 0x1);
     XGpioPs_WritePin(&Gpio, LED1_PIN, 0x1);
     XGpioPs_WritePin(&Gpio, LED2_PIN, 0x1);
     XGpioPs_WritePin(&Gpio, LED3_PIN, 0x1);
     XGpioPs_WritePin(&Gpio, LED5_G_PIN, 0x1);
     sleep(1);
     XGpioPs_WritePin(&Gpio, LED0_PIN, 0x0);
     XGpioPs_WritePin(&Gpio, LED1_PIN, 0x0);
     XGpioPs_WritePin(&Gpio, LED2_PIN, 0x0);
     XGpioPs_WritePin(&Gpio, LED3_PIN, 0x0);
     XGpioPs_WritePin(&Gpio, LED5_G_PIN, 0x0);
     sleep(1);

     }

	return XST_SUCCESS;
}


5个led亮

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44781508

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值