MIO与EMIO的关系解析 GPIO、MIO、EMIO的区别

芯片型号:xc7z010-1clg400c
vivado版本:2016.1
点亮流水灯,共使用了三种方式:
(1)ps通过mio点亮ps端led
(2)ps通过emio点亮pl端led
(3)ps通过axi点亮pl端led。
1. mio与emio
首先来理清楚mio与emio的关系。mio是ps的i/o引脚,一共有54个,分为bank0与bank1,可以接许多外设比如uart、spi或gpio等,另外可以引脚复用。当我们想通过ps来访问pl又不想浪费axi总线时,就通过emio接口来访问。在54个i/o中,有一些只能用于mio,大部分可以用于mio与emio,一些接口信号线只能通过emio访问。
emio依然属于ps,只是连接到了pl,再从pl输出信号。
2. ps通过mio点亮ps端led
从电路中看得很清楚,这两个led直接连接在mio0和mio13上,所以直接在这两个端口输出高低电平就可以控制灯闪烁了。
首先建立.bd文件,添加zynq的ip核,去掉pl的资源(包括ps-pl configuration——general——enable clock resets中的fclk_reset0_n以及axi none secure enablement——gp master axi interface中的gp0以及clock configuration——pl fabric clocks中的fclk_clk0)。
在外设i/o中,打开uart1,对应mio48、49口,打不打开都无所谓,打开调试用。此时在mio中已经看到uart1已经分配了管脚,然后在gpio里,打开mio。
最后在ddr里,找到所用的ddr芯片,比如我用的是ha-125。这样所有的平台就搭好了。直接generate out products——create hdl wrapper——export hardware——lanuch sdk。
进入sdk,建立工程。首先引头文件xgpiops.h
对mio0和mio13,初始化引脚。
s32 xgpiops_cfginitialize(xgpiops *instanceptr, xgpiops_config *configptr, u32 effectiveaddr); 这个函数初始化gpio,第一个参数需要一个xgpiops的结构体指针,直接在函数开头实例化就好了,结构体的组成在.h文件。第二个参数是一个xgpiops_config类型结构体指针,这个结构体的内容:
typedef struct { u16 deviceid; /**< unique id of device */ u32 baseaddr; /**baseaddr);//初始化 if(status!=xst_success)//初始化成功 return xst_failure; 然后就是定义gpio口的属性,包括输入输出和端口使能:
xgpiops_setdirectionpin(&xgpio, led1, 1);//output xgpiops_setdirectionpin(&xgpio, led2, 1);// xgpiops_setoutputenablepin(&xgpio, led1, 1);//enable xgpiops_setoutputenablepin(&xgpio, led2, 1); 再后面就在while(1)中循环点灯,用xgpiops_writepin函数输出高低电平。
这是纯ps点流水灯。
3. ps通过emio点亮pl端led
通过emio点pl端led,在配置zynq ip核时,基本步骤差不多,包括去到pl资源等,唯一不同的是,在gpio里,勾上emio并且分配宽度是4(因为我的小板子pl端有四个led)。
生成了新的系统:
接下来,分配管脚!!因为这里gpio_0在pl端。看看pdf:
把刚分配的带宽4的emio(gpio_0)绑定到这四个管脚上。
然后输出bitstream文件,导入到sdk中时,要加上这个比特流文件。进入sdk
初始化程序还是一样,头文件也是xgpiops.h,这还是ps操作。
xgpio_config = xgpiops_lookupconfig(xpar_ps7_gpio_0_device_id); status = xgpiops_cfginitialize(&xgpio, xgpio_config, xgpio_config->baseaddr); if(status!=xst_success) return xst_failure; 后面就是设置引脚工作模式:
这里的引脚号从54开始,因为从54后才是emio引脚:
0—53是mio,53—...是emio。
之后点灯就可以了。在运行之前先下载比特流文件到fpga,另外这个黑金的小板子,pl和ps协同仿真时,总报错,只需要在reset entire system和program fpga打上勾,并且这个比特流文件要绝对地址!!
4. ps通过axi点亮pl端led
这个就是pl与ps协同点灯了。
首先配置zynq ip核,pl部分保留,因为用到了axi,另外mio gpio都去掉。其余配置都一样。添加axi gpio ip核,并且设置宽度为4,最后run connection automation,加入其它必要组件,调整连线:
之后再绑定gpio_led管脚到四个led上,综合并生成bitstream文件,导入到sdk。
引用头文件:xgpio.h
然后还是对引脚进行初始化和设置工作模式:
xgpio_initialize(&gpiooutput, xpar_axi_gpio_0_device_id); xgpio_setdatadirection(&gpiooutput,1,0x0);//output xgpio_discretewrite(&gpiooutput,1,0x0); 协同点灯还是要先下载比特流文件,在运行sdk程序。
5. 总结
① 对mio或emio gpio进行操作,都属于ps,引用xgpiops.h文件,对axi_gpio引用xgpio.h
② 涉及pl引脚或操作时,生成比特流文件并且导入sdk,运行时先下载fpga。
③ pl输出信号绑定引脚。


自动编码器与PCA的比较
健身房中的智能电子屏将会为健身房带来哪些改变
涤纶电容的特点和优缺点
基于PLC电气成套设备的无线监控物联网解决方案
稳压二极管原理解析
MIO与EMIO的关系解析 GPIO、MIO、EMIO的区别
瞬变对AI加速卡供电的影响
传感+光源+可视化,光学巨头艾迈斯欧司朗的技术路线
县域经济催热三四级空调市场 大数据催化渠道模式变革
火花间隙特斯拉线圈diy图解
小米6白色版今日十点首卖,网友直呼:蓝瘦香菇买不到
扫描仪的主要性能指标
今年卖的最好的高端手机 居然有华为荣耀magic,小米note2
霍尔开关的工作原理 霍尔开关的优点 霍尔开关在气缸上的应用
单片机“花式点灯”实现方法
Intel新一代处理器Skylake:全新的GT4e核显
一份2018年Python开源项目Top100清单!
政策东风和技术突破加持,SENSOR CHINA助力提升中国传感与物联全球创新力
荣耀正式发布了46mm和42mm两种版本的荣耀MagicWatch 2
5G室内频率使用许可的发放将推动我国的5G系统部署和商用进程