学了zynq一段时间,一上来的时候就被zynq的GPIO唬住了,实在没搞清楚zynq的GPIO怎么回事,一会这样,一会那样,最后才慢慢发现zynq至少有3种GPIO可以调用。难怪我觉得每篇介绍GPIO的博客说的有一些不一样呢。

我们先看有哪三种GPIO:MIO、EMIO、AXI_GPIO。其中MIO和EMIO是直接挂在PS上的GPIO。而AXI_GPIO是通过AXI总线挂在PS上的GPIO上。

我们先看一下MIO和EMIO:下图EMIO和MIO的结构。其中MIO分布在BANK0,BANK1,而EMIO则分布在BANK2、BANK3。注意一下几项:

首先、MIO在zynq上的管脚是固定的,而EMIO,是通过PL部分扩展的,所以使用EMIO时候需要在约束文件中分配管脚,所以设计EMIO的程序时,

需要生成PL部分的bit文件,烧写到FPGA中。

其次、由下图可以看出MIO共占54bit,而EMIO占64bit。其中MIO占用IO号为0-53。而EMIO占用IO号为54-117。

再者、无论是EMIO还是MIO都属于PS上的IO,直接由PS操作。在调用头文件,只调用#include "xgpiops.h"即可,而在调用AXI_GPIO时,则需要#include "xgpio.h"。

最后、在设计好bd文件后、系统会自动在路径:..\standalone_bsp_0\ps7_cortexa9_0\include生成 xparameters.h文件.我们可以在

xparameters.h文件中查看我们在bd设计时添加的外设ID。例如我们添加了EMIO,可以查到到该IO的地址和ID号。
[cpp] view plaincopy
  1. #define XPAR_PS7_GPIO_0_DEVICE_ID 0
  2. #define XPAR_PS7_GPIO_0_BASEADDR 0xE000A000
  3. #define XPAR_PS7_GPIO_0_HIGHADDR 0xE000AFFF

再举例添加了两个AXI_GPIO,例化为BTNS_4BIT和SW_4BIT

[cpp] view plaincopy
  1. /* Definitions for driver GPIO */
  2. #define XPAR_XGPIO_NUM_INSTANCES 2
  3. /* Definitions for peripheral BTNS_4BIT */
  4. #define XPAR_BTNS_4BIT_BASEADDR 0x41210000
  5. #define XPAR_BTNS_4BIT_HIGHADDR 0x4121FFFF
  6. #define XPAR_BTNS_4BIT_DEVICE_ID 0
  7. #define XPAR_BTNS_4BIT_INTERRUPT_PRESENT 0
  8. #define XPAR_BTNS_4BIT_IS_DUAL 0
  9. /* Definitions for peripheral SW_4BIT */
  10. #define XPAR_SW_4BIT_BASEADDR 0x41200000
  11. #define XPAR_SW_4BIT_HIGHADDR 0x4120FFFF
  12. #define XPAR_SW_4BIT_DEVICE_ID 1
  13. #define XPAR_SW_4BIT_INTERRUPT_PRESENT 0
  14. #define XPAR_SW_4BIT_IS_DUAL 0

再来看一下,AXI_GPIO相当于GPIO的IP核,我们调用时是占用相应AXI总线地址空间,如下图,占用地址为0x41200000和0x41210000

ZYNQ 的三种GPIO :MIO EMIO AXI_GPIO相关推荐

  1. zynq学习03 zynq中三种实现GPIO的方式

    http://m.blog.csdn.net/article/details?id=52123465 http://blog.chinaaet.com/songhuangong/p/43084 本文介 ...

  2. Zynq(2):MIO,EMIO点灯之路

    由于个人原因,最近一直在对基础知识的复习,所以ZYNQ的后续学习记录,一直没有更新. FLAG:新年新气象,争取2022年春节之前将所有关于ZYNQ中ARM裸机部分内容更新完毕,主要是ARM外设. Z ...

  3. Xilinx ZYNQ 7000+Vivado2015.2系列(五)之ZYNQ的三种启动方式-JTAG、SD card、Flash

    前言: 前面我们都是使用JTAG方式下载比特流文件,然后下载elf文件,最后点击Run as或者Debug as来运行程序.JTAG方式是通过tcl脚本来初始化PS,然后用JTAG收发信息,优点是可以 ...

  4. 学会Zynq(5)GPIO中EMIO的使用方法

    之前的Hello World和MIO使用都算是纯PS部分,也就是把Zynq单纯地当作ARM使用.很多人都是因为FPGA+ARM架构才使用的Zynq,有两个关键问题容易引起初学者的兴趣:(1).如何用P ...

  5. 深度学习的三种硬件方案:ASIC,FPGA,GPU;你更看好?

    原文链接:http://www.sohu.com/a/123574005_465947 深度学习的三种硬件方案:ASIC,FPGA,GPU:你更看好? 2017-01-06 10:59 硬件十万个为什 ...

  6. STM32芯片烧录的三种方式介绍,串口、STM32 ST-LINK Utility以及STM32CubeProgrammer

    STM32芯片烧录的三种方式介绍,串口.STM32 ST-LINK Utility以及STM32CubeProgrammer 1 概述 1.1资源概述 1.2 STM32串口烧录方式 2.KEIL软件 ...

  7. EFR32BG22 的三种电源设计

    EFR32xG22有多个电源轨:DC-DC稳压器输入(VREGVDD).IO电源(IOVDD).模拟(AVDD).RF模拟电源(RFVDD).RF功率放大器电源(PAVDD).数字LDO和闪存(DVD ...

  8. GD32三种低功耗例程

    GD32F303ZET6三种低功耗例程 睡眠模式例程:MCU的UART3接收到数据 ,进入UART3接收中断  即唤醒睡眠模式. int main(void) { /******** 本实验测试单片机 ...

  9. 直接进入TIVA系列MCU存在ROM中的bootloader的三种方法(转载)

    网上查到的直接进入TIVA系列MCU存在ROM中的bootloader的三种方法,记录一下. 使用 TM4C ROM bootloader 的三種方式: Flash Empty 當 MCU Flash ...

最新文章

  1. 耦合式是什么意思_什么是微服务?一篇文章让你彻底搞明白
  2. docker(三) 制作自己的镜像
  3. img 加载 svg占位符_如何使用SVG作为占位符以及其他图像加载技术
  4. 搜狗AI,正在抢滩智能手机
  5. Presenter层如何高度的复用
  6. Rstudio如何让显示界面的字体更大一些
  7. 用PHP写APP后台
  8. TeXLive2021+TeXStudio安装及配置,亲测有效!
  9. Flutter 鼠标右键
  10. 仿ios相机apk_仿苹果相机APP下载
  11. Xamarin iOS 切换开发者账号之后的签名标识和预配配置文件更新方法
  12. 为什么建议将成员属性设置为私有
  13. Django - Celery使用及介绍
  14. 计算机校准颜色,直观:如何在Win7计算机中校准显示器|计算机显示器颜色校准...
  15. 三星android智能手图片机,掌中投影智能机 三星GALAXY Beam2图赏
  16. 微型计算机的硬件结构采用,微型计算机硬件结构内部结构
  17. pyqt-工具栏图标大小设置
  18. 局域网共享工具_局域网共享精灵,一款助力于局域网环境下文件共享和打印机共享的系统工具软件...
  19. LTE入门-孙宇彤-专题视频课程
  20. 第二节:配置django环境!

热门文章

  1. 为什么整数集合使用Z来表示?
  2. 一种带有柔顺控制算法四自由度自动上样机械臂
  3. 第十六届全国大学生智能车竞赛创意组别-航天智慧物流
  4. 第十五届全国大学生智能车竞赛安徽赛区比赛报名信息
  5. IDEA背景颜色设置护眼色
  6. java 字符串写入word,JAVA 将字符串hollow 替换成word肿么实现?
  7. swift 组件化_京东商城订单模块基于 Swift 的改造方案与实践
  8. 三星android功能怎么用,三星GALAXY S II升级Android 4.0新功能介绍及使用技巧
  9. php yii没有数据库吗,php – YII活动记录未插入数据库但未给出错误
  10. 百融金服榕树_百融金服榕树成为拉动新金融行业增长的主力军