0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:csdn 作者:FPGA难得一P 2020-11-24 14:32 次阅读

芯片型号: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;		/**< Register base address */
} XGpioPs_Config;

包括gpio分配的ID和基地址。第三个参数就是基地址。

如何获得这些信息,首先ID的获得,打开xparameter.h头文件,里面定义了分配的各种资源的ID。

基地址就在配置信息查了,如何获得gpio的配置信息:

首先实例化一个XGpioPs_Config类型的指针。使用XGpioPs_LookupConfig函数,它能够在配置信息中找到对应ID的配置信息:

所以就很明确了:

xgpio_config = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);//找分配的MIO配置信息(基地址)
status = XGpioPs_CfgInitialize(&xgpio, xgpio_config,xgpio_config->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输出信号绑定引脚。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21309

    浏览量

    593127
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50562
  • MIO
    MIO
    +关注

    关注

    0

    文章

    12

    浏览量

    8120
  • Vivado
    +关注

    关注

    18

    文章

    789

    浏览量

    65092
收藏 人收藏

    评论

    相关推荐

    免费借测,限时体验 | 研华Socket Type 4英寸嵌入式单板MIO-4370来袭!

    MIO-4370是研华4" EPIC 嵌入式单板电脑 ,支持第12/13代 Intel socket 式CPU,性能选择更灵活。同时也提供了更丰富的I/O接口及扩展能力,是医疗、机器视觉、机器人
    发表于 03-26 16:56 105次阅读
    免费借测,限时体验 | 研华Socket Type 4英寸嵌入式单板<b class='flag-5'>MIO</b>-4370来袭!

    电机槽满率和铜满率的区别 有什么关系

    电机槽满率和铜满率区别,有什么关系? 电机槽满率和铜满率是电机设计和制造中两个相关但又具有不同含义的重要参数。在电机设计和制造过程中,这两个参数的选择和优化对电机性能和效率起着至关重要的作用。本文
    的头像 发表于 12-25 11:47 534次阅读

    晶振的负载电容与外接电容的区别关系

    晶振的负载电容与外接电容的区别关系
    的头像 发表于 12-05 16:18 4372次阅读
    晶振的负载电容与外接电容的<b class='flag-5'>区别</b>与<b class='flag-5'>关系</b>

    FPGA的IO

    。FPGA芯片IO命名方式太多,管脚也多,让人感觉很乱。这是我当年的感觉,诸如会经常听到:A13,B14···BANK34,BANK12····MIO0,EMIO···。但这确实是FPGA的特点,FPGA
    发表于 11-03 11:08

    ZYNQ的ARM和FPGA数据交互——AXI交互最重要的细节

    。 ③EMIO :由于MIO管脚有限,PS端可以通过EMIO访问PL端引脚。 ④GP :通用AXI接口,用来实现一般主从互联、数据交互,不用于高性能。 ⑤HP :是高性能/带宽的标准接口,主要用于PL访问PS上
    发表于 11-03 10:51

    Ozemio 以创新生成式人工智能助理开创人才转型新纪元

    日  /美通社/ -- Ozemio 隆重推出MIO,这是一款由人工智能驱动的突破性产品,可重新构想企业学习、成长、走向卓越的范式。MIO 隔绝网络喧嚣,以专注于当下主题的方式,帮助用户高效学习
    的头像 发表于 10-19 09:54 486次阅读

    GPIO配置不同输出速度会有什么影响

    单片机GPIO配置不同输出速度有何区别
    的头像 发表于 09-18 15:43 1385次阅读
    <b class='flag-5'>GPIO</b>配置不同输出速度会有什么影响

    研华推出AMD平台3.5”单板电脑MIO-5376 加速电动汽车充电站部署

    全球工业计算机供应商研华科技近期推出MIO-5376,一款专为电动汽车充电器设计的单板电脑。为了支持每年数百万辆电动汽车的运行需要越来越多的电动汽车充电站,这种基础设施需要能满足市场需求的快速、简便
    的头像 发表于 09-18 10:54 263次阅读
    研华推出AMD平台3.5”单板电脑<b class='flag-5'>MIO</b>-5376 加速电动汽车充电站部署

    12 11_GPIO_EMIO原理与应用 - 第7节 #硬声创作季

    电路串口代码发送模块
    充八万
    发布于 :2023年08月18日 11:13:14

    12 11_GPIO_EMIO原理与应用 - 第6节 #硬声创作季

    电路串口代码发送模块
    充八万
    发布于 :2023年08月18日 11:12:23

    12 11_GPIO_EMIO原理与应用 - 第4节

    模块Verilog串口通信代码
    充八万
    发布于 :2023年08月18日 11:10:42

    12 11_GPIO_EMIO原理与应用 - 第3节

    模块Verilog串口通信代码
    充八万
    发布于 :2023年08月18日 11:09:51

    新品发布!研华3.5”单板电脑 MIO-5377,基于12/13代Intel Core,机器人应用理想之选

    研华推出搭载第12代和第13代Intel Core 处理器的3.5”单板电脑MIO-5377。该款创新单板电脑采用Intel最新的异构计算设计,高达14核/20线程,TDP为28W。该设计带来出色
    发表于 08-08 11:23 552次阅读
    新品发布!研华3.5”单板电脑 <b class='flag-5'>MIO</b>-5377,基于12/13代Intel Core,机器人应用理想之选

    Zynq UltraScale+PS MIO可能在上电期间出现高位毛刺

    Zynq UltraScale+ PS MIO 可能在 VCCO_PSMIO 电源上电缓升期间输出高位毛刺
    的头像 发表于 07-10 16:47 526次阅读
    Zynq UltraScale+PS <b class='flag-5'>MIO</b>可能在上电期间出现高位毛刺

    不同GPIO类库的区别

    重点来讲解一下什么是类库,如何使用,以及不同的GPIO类库的区别
    的头像 发表于 07-02 15:03 550次阅读
    不同<b class='flag-5'>GPIO</b>类库的<b class='flag-5'>区别</b>