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
    +关注

    关注

    1625

    文章

    21653

    浏览量

    601518
  • GPIO
    +关注

    关注

    16

    文章

    1191

    浏览量

    51879
  • MIO
    MIO
    +关注

    关注

    0

    文章

    12

    浏览量

    8156
  • Vivado
    +关注

    关注

    19

    文章

    807

    浏览量

    66291
收藏 人收藏

    评论

    相关推荐

    AFE5809配置Digital Demodulator解调器寄存器后,读数据时SPI的SOUT一直为低电平,FPGA中信号一直是0,为什么?

    部分时读数据过程中SPI的SOUT一直是低电平,并且FPGA中信号一直是0,就算我不外加信号源,用内部的RAMP斜坡信号也是没有数据,使用的是TGC模式没采用CW部分。配置前首先硬件复位,EMIO
    发表于 11-18 07:15

    SOC GPIO操作

    sapphire Soc提供了两个GPIO组每组有4个GPIO,定义为GPIO[3:0],其中只有GPIO[1:0]可以支持中断。中断在程序中打开了
    的头像 发表于 11-01 11:06 92次阅读

    CPU时钟周期与主频的关系区别

    CPU时钟周期与主频是计算机体系结构中两个紧密相连且至关重要的概念,它们之间既存在关系又有所区别。以下将详细阐述CPU时钟周期与主频的关系区别
    的头像 发表于 09-26 15:46 1183次阅读

    图像处理器与计算机视觉有什么关系区别

    图像处理器与计算机视觉是两个在图像处理领域紧密相连但又有所区别的概念。它们之间的关系区别可以从多个维度进行探讨。
    的头像 发表于 08-14 09:36 423次阅读

    labview如何测ADC输入到DAC输出的延时

    ADC和DAC用的是MIO的SCB-68A,从ADC采集数据,经过上位机处理后把数据发放到DAC输出,想测量从ADC采集到DAC输出这一过程所用时间,向各位大神请教!!!
    发表于 08-12 16:15

    FM20S用户手册-PS + PL异构多核案例开发手册

    界面,双击Procise工程的Block Desgn框图,进入配置界面 再点击"MIO Configuration",可看到CANO、CAN1已配置成EMIO模式。
    发表于 07-25 16:14

    人工智能与大模型的关系区别

    在科技日新月异的今天,人工智能(AI)已成为推动社会进步的重要力量。而在人工智能的众多分支中,大模型(Large Models)作为近年来兴起的概念,以其巨大的参数数量和强大的计算能力,在多个领域展现出了非凡的潜力。本文旨在深入探讨人工智能与大模型之间的关系区别,以期为
    的头像 发表于 07-04 16:07 3280次阅读

    PLC与网关的关系区别

    景有所不同,但在实现工业自动化和智能化方面又有着密切的联系。本文将对PLC和网关的关系区别进行详细的阐述,以便读者能够更好地理解它们在工业自动化系统中的定位和作用。
    的头像 发表于 06-14 15:50 825次阅读

    PLC与视觉控制器的区别关系

    有着显著的区别。本文将从定义、功能、特点以及应用等方面,详细阐述PLC与视觉控制器的区别关系,以期为读者提供全面、深入的了解。
    的头像 发表于 06-06 14:10 1232次阅读

    什么是GPIOGPIO组成原理

    GPIO全拼叫General Purpose Input Output(通用输入输出)简称IO口也叫总线扩展器,GPIO口是由引脚,功能寄存器组成,不同的架构中的GPIO封装不同,所使用的引脚数与寄存器数不同,具体可以参考芯片手
    发表于 04-28 12:30 6613次阅读
    什么是<b class='flag-5'>GPIO</b>?<b class='flag-5'>GPIO</b>组成原理

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

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

    交换机cpu和交换芯片的关系区别

    交换机CPU和交换芯片在交换机中各自扮演着重要的角色,并且它们之间存在一定的关系区别
    的头像 发表于 03-18 14:06 1635次阅读

    一文读懂宽带、带宽、网速之间的区别关系

    一文读懂宽带、带宽、网速之间的区别关系  宽带、带宽和网速是在网络领域中经常使用的术语,它们之间有一定的区别关系。在深入理解宽带、带宽和网速之间的
    的头像 发表于 01-31 09:11 5996次阅读

    GPIO为例,RTE配置完后会有xmc_gpio.h、xmc1_gpio.h、xmc_gpio.c、xmc1_gpio.c,四个的关系是什么样的?

    GPIO为例,RTE配置完后,会有xmc_gpio.h、xmc1_gpio.h、xmc_gpio.c、xmc1_gpio.c,四个的
    发表于 01-29 06:24

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

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