ZYNQ7000系列入门之GPIO点灯
文章目录
- 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点灯相关推荐
- zynq7000系列PS端GPIO初始化函数XGpioPs_LookupConfig()和XGpioPs_CfgInitialize()详解
前言 xilinx公司在设计这款芯片时就同步编写了ps端的函数库,我们在对zynq这款芯片进行开发,直接调用库函数就可以了.不过比较难过的是,官方虽然编写了函数驱动库,但并没有出版相应的类似于函 ...
- 【先楫HPM6750系列】GPIO点灯和按键控制
[先楫HPM6750系列]GPIO点灯和按键控制 本文介绍如何点亮HPM6750EVKMINI开发板上的三色LED灯,以及如何使用HPM SDK实现--通过GPIO读取HPM6750EVKMINI开发 ...
- Zynq7000系列之芯片引脚功能综述
很多人做了很久的FPGA,知道怎么去给信号分配引脚,却对这些引脚的功能及其资源限制知之甚少:在第一章里对Zynq7000系列的系统框架进行了分析和论述,对Zynq7000系列的基本资源和概念有了大致的 ...
- ZYNQ学习笔记(一)---初识ZYNQ-7000系列
前几日刚入手一款ZYNQ-7000系列的板卡,之前我也没用过FPGA,直接跨越到ZYNQ的原因主要是某宝上这款板卡相较于其他片上仅有一块FPGA的板卡性价比更高.作为入门,在学习过程中,笔者选择先单独 ...
- Zynq7000系列之芯片引脚功能合集以及引脚分配
很多人做了很久的FPGA,知道怎么去给信号分配引脚,却对这些引脚的功能及其资源限制知之甚少:在第一章里对Zynq7000系列的系统框架进行了分析和论述,对Zynq7000系列的基本资源和概念有了大致的 ...
- zynq7000创建fsbl启动_【转】Zynq启动过程探讨-进入main函数前不了解的事-Zynq-7000系列-米尔科技论坛...
写在前面: 本人纯属菜鸟,不敢保证自己的观点正确,各位看官多指教. 本文讨论的主题是zynq启动过程. 阅读本文要对Zyna EPP有那么一点点了解,最好使用过Xilinx的PlanAhead.EDK ...
- 2016 版 Laravel 系列入门教程(一)
https://www.golaravel.com/post/2016-ban-laravel-xi-lie-ru-men-jiao-cheng-yi/ 2016 版 Laravel 系列入门教程(一 ...
- 推荐算法炼丹笔记:CTR点击率预估系列入门手册
CTR点击率预估系列家谱 炼丹之前,先放一张CTR预估系列的家谱,让脉络更加清晰. (一)FiBiNET:结合特征重要性和双线性特征交互进行CTR预估 1.1 背景 本文发表在RecSys 2019 ...
- Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程
Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linu ...
最新文章
- FAQ about AJAX-part II
- ajax百分比加载特效,jQuery实现的简单百分比进度条效果示例
- 一个转角---程序猿
- MySQL 中一个双引号的错位引发的血案
- Spring Boot 入门例子 Hello world - TerryHe 博客园
- 清理和删除svn信息
- js粘贴板为什么获取不到图片信息_JavaScript 学习笔记(3):图片库
- 【vscode】python工作目录添加到环境中
- php自己总结的一些经典的实例
- 微软或在开发自己的 CPU、TikTok 发布电视版本、索尼撤下《赛博朋克2077》并为玩家退款|Decode the Week...
- Mysql的执行顺序与优化分析
- C#.NET验证码智能识别学习笔记---01C#.NET验证码识别介绍
- 《通信技术导论(原书第5版)》——2.5 内部使用的IP专用交换系统
- SQL注入漏洞-MySQL盲注
- Android 利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
- cpu和gpu各自的作用
- Ubuntu18.04 安装 ROS Melodic(同时解决 rosdep update 问题,亲测有效)
- 【ssd】M.2的SATA,PCI-x2(Socket 2 ),PCI-x4(Socket 3)了解一下,老程序员都快被新硬件搞蒙圈了
- 华米手表2 是android,使用华米2手表近3个月,简单交流一下真实使用感受,侧重游泳...
- Zabbix5.0编译升级至6.0操作手册