文章目录

  • ZYNQ AC7020
    • 一.简介
    • 二.MIO和EMIO/AXI_GPIO
      • 1.MIO
      • 2.EMIO
      • 3.AXI_GPIO
    • 三.开发板IO口
    • 四.裸机开发点灯
      • 1.代码部分
      • 2.测试
    • 五.linux系统GPIO控制
    • 六.总结

ZYNQ AC7020

一.简介

不管学习哪一个开发板,都是从点灯开始,就如同软件起源于hello world一样,这里我使用的是7000系列的AC7020的开发板,今天就说一下7000系列的GPIO的控制

注意这里的GPIO分为三类,GPIOMIO/EMIO/AXI_GPIO

二.MIO和EMIO/AXI_GPIO

下图EMIO和MIO的结构,可以看到

  • MIO总共有54个(0-53),
  • 而EMIO总共有64个(54-117)

其中MIO分布在BANK0,BANK1,而EMIO则分布在BANK2、BANK3。总的个数为118个GPIO,这118个GPIO都属于PS的资源

Bank0:MI0[31:0]
Bank1:MI0[53:32]
Bank2:EMI0[31:0]
Bank3:EMI0[63:32]

1.MIO

首先、MIO在zynq上的管脚是固定的,如下图在vivado软件中可以对其进行配置,可以作为USB,SD卡,UART等等外设。

注意:MIO不占用PL的资源,也不需要进行管脚的约束配置,上电后就可以进行加载使用

2.EMIO

EMIO,是通过PL部分扩展的,所以使用EMIO时候需要在约束文件中分配管脚,所以设计EMIO的程序时,需要生成PL部分的bit文件,烧写到FPGA中

注意:EMIO占用PL的资源


3.AXI_GPIO

AXI_GPIO是通过AXI总线挂在PS上的GPIO上,AXI_GPIO相当于GPIO的IP核,我们调用时是占用相应AXI总线地址空间,如下图,占用地址为0x41200000和0x41210000

注意

EMIO和IP方式在vivado都需要绑定管脚

三.开发板IO口

再来看一下AC7020的用户可使用的IO口,3组34个IO总共112个

  • PL的IO 94个
  • PS的IO 8个


本章的实验是点亮开发板上的LED,先看一LED的电路

PS LED接到了MIO0


PL端的LED是接到R19的 (IO_0_34)

四.裸机开发点灯

这里控制IO可以直接使用 xgpiops.h库函数,注意PL端需要进行管脚约束

1.代码部分

#include <stdio.h>
#include "xil_printf.h"
#include "xgpiops.h"
#include "sleep.h"//MIO共有54个,编号从0-53,所以54即是第一个EMIO口
//此宏定义对应于MIO led的编号
#define led1    0  //电源指示灯
#define led2    54  //
XGpioPs gpio_mio;int MIO_Config(void)
{XGpioPs_Config *gpioPtr;int status;//每个外设都有一个ID,GPIO的ID在xparameters.h中定义gpioPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);status = XGpioPs_CfgInitialize(&gpio_mio, gpioPtr, gpioPtr->BaseAddr);if(status != XST_SUCCESS){xil_printf("can't config gpio\n\r");return XST_FAILURE;}//配置led1为输出模式XGpioPs_SetDirectionPin(&gpio_mio, led1, 1);XGpioPs_SetDirectionPin(&gpio_mio, led2, 1);//输出使能XGpioPs_SetOutputEnablePin(&gpio_mio, led1, 1);XGpioPs_SetOutputEnablePin(&gpio_mio, led2, 1);//配置输入模式//XGpioPs_SetDirectionPin(&gpio_mio, key, 0);return XST_SUCCESS;
}//写gpio
void MIO_LED(int led, int status)
{//写GPIO的输出值XGpioPs_WritePin(&gpio_mio, led, status);
}//读gpio
int MIO_KEY( int key1 )
{//读GPIO的值int value = XGpioPs_ReadPin(&gpio_mio, key1);return value;
}int main()
{print("====led test====\n\r");MIO_Config();while(1){MIO_LED(led1, 0);sleep(1);MIO_LED(led1, 1);sleep(1);MIO_LED(led2, 0);sleep(1);MIO_LED(led2, 1);sleep(1);}return 0;
}

2.测试

先用SDK添加fsbl生成fsbl.elf文件,然后vivado工程生成bit文件,再用上面代码编译生成led.elf文件三者合成为BOOT.bin文件,放到sd卡,选择sd卡启动就可以看到LED1和lLED2交替闪烁

五.linux系统GPIO控制

这里在vivado工程中对GPIO0约束了16个管脚,对GPIO1也约束了16个管脚,配置好linux系统启动文件,进入系统中我们可以在 /sys/class/gpio 目录下看到 3个gpio片 874,890,906

如何进行对应那,首先gpio号最多能够表示1024个,前面说到PS端MIO有54,EMIO64总共118个

  • PS端GPIO 906-1024
  • AX_GPIO0对应 16个约束管脚 890-905
  • AX_GPIO1对应 16个约束管脚 874-889

所以MIO0对应的控制号为GPIO906,MIO1就为907,EMIO约束的第一个GPIO号为GPIO890,第一个就为GPIO891

注意:EMIO最多可约束64个,ax_gpio0 32个,ax_gpio1 32个

这里对控制等的程序不做说明,知道gpio号后,linux下应该层控制gpio方法都是一样的,之前文章有做说明。

六.总结

这里只是粗略的说明了一下ZYNQ7000系列GPIO在裸机和ubuntu系统下的控制,具体的操作流程没用进行说明

ZYNQ7000系列入门之GPIO点灯相关推荐

  1. zynq7000系列PS端GPIO初始化函数XGpioPs_LookupConfig()和XGpioPs_CfgInitialize()详解

    前言    xilinx公司在设计这款芯片时就同步编写了ps端的函数库,我们在对zynq这款芯片进行开发,直接调用库函数就可以了.不过比较难过的是,官方虽然编写了函数驱动库,但并没有出版相应的类似于函 ...

  2. 【先楫HPM6750系列】GPIO点灯和按键控制

    [先楫HPM6750系列]GPIO点灯和按键控制 本文介绍如何点亮HPM6750EVKMINI开发板上的三色LED灯,以及如何使用HPM SDK实现--通过GPIO读取HPM6750EVKMINI开发 ...

  3. Zynq7000系列之芯片引脚功能综述

    很多人做了很久的FPGA,知道怎么去给信号分配引脚,却对这些引脚的功能及其资源限制知之甚少:在第一章里对Zynq7000系列的系统框架进行了分析和论述,对Zynq7000系列的基本资源和概念有了大致的 ...

  4. ZYNQ学习笔记(一)---初识ZYNQ-7000系列

    前几日刚入手一款ZYNQ-7000系列的板卡,之前我也没用过FPGA,直接跨越到ZYNQ的原因主要是某宝上这款板卡相较于其他片上仅有一块FPGA的板卡性价比更高.作为入门,在学习过程中,笔者选择先单独 ...

  5. Zynq7000系列之芯片引脚功能合集以及引脚分配

    很多人做了很久的FPGA,知道怎么去给信号分配引脚,却对这些引脚的功能及其资源限制知之甚少:在第一章里对Zynq7000系列的系统框架进行了分析和论述,对Zynq7000系列的基本资源和概念有了大致的 ...

  6. zynq7000创建fsbl启动_【转】Zynq启动过程探讨-进入main函数前不了解的事-Zynq-7000系列-米尔科技论坛...

    写在前面: 本人纯属菜鸟,不敢保证自己的观点正确,各位看官多指教. 本文讨论的主题是zynq启动过程. 阅读本文要对Zyna EPP有那么一点点了解,最好使用过Xilinx的PlanAhead.EDK ...

  7. 2016 版 Laravel 系列入门教程(一)

    https://www.golaravel.com/post/2016-ban-laravel-xi-lie-ru-men-jiao-cheng-yi/ 2016 版 Laravel 系列入门教程(一 ...

  8. 推荐算法炼丹笔记:CTR点击率预估系列入门手册

    ​CTR点击率预估系列家谱 炼丹之前,先放一张CTR预估系列的家谱,让脉络更加清晰. (一)FiBiNET:结合特征重要性和双线性特征交互进行CTR预估 1.1 背景 本文发表在RecSys 2019 ...

  9. Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程

    Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linu ...

最新文章

  1. FAQ about AJAX-part II
  2. ajax百分比加载特效,jQuery实现的简单百分比进度条效果示例
  3. 一个转角---程序猿
  4. MySQL 中一个双引号的错位引发的血案
  5. Spring Boot 入门例子 Hello world - TerryHe 博客园
  6. 清理和删除svn信息
  7. js粘贴板为什么获取不到图片信息_JavaScript 学习笔记(3):图片库
  8. 【vscode】python工作目录添加到环境中
  9. php自己总结的一些经典的实例
  10. 微软或在开发自己的 CPU、TikTok 发布电视版本、索尼撤下《赛博朋克2077》并为玩家退款|Decode the Week...
  11. Mysql的执行顺序与优化分析
  12. C#.NET验证码智能识别学习笔记---01C#.NET验证码识别介绍
  13. 《通信技术导论(原书第5版)》——2.5 内部使用的IP专用交换系统
  14. SQL注入漏洞-MySQL盲注
  15. Android 利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
  16. cpu和gpu各自的作用
  17. Ubuntu18.04 安装 ROS Melodic(同时解决 rosdep update 问题,亲测有效)
  18. 【ssd】M.2的SATA,PCI-x2(Socket 2 ),PCI-x4(Socket 3)了解一下,老程序员都快被新硬件搞蒙圈了
  19. 华米手表2 是android,使用华米2手表近3个月,简单交流一下真实使用感受,侧重游泳...
  20. Zabbix5.0编译升级至6.0操作手册

热门文章

  1. 【Java】一文搞定Java反射技术
  2. 数字电路水位监控系统的设计与实现(基于proteus仿真)
  3. ChatGPT有话说:虚拟现实 VS 增强现实
  4. C语言之判断身高体重正常指数
  5. 达梦数据库——限制IP以及网段连接数据库
  6. scrollHeight
  7. BIO、NIO、AIO分别是什么
  8. SAP MM内向交货单的凭证流
  9. @Configurable
  10. 2014年广西专业技术人员计算机应用能力考试的规定,完善专业技术人员计算机应用能力考试有关规定的通知...