zoukankan      html  css  js  c++  java
  • 【ZYNQ Ultrascale+ MPSOC FPGA教程】第二十八章 PS端EMIO的使用

    原创声明:

    本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处。

    适用于板卡型号:

    AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

     

    实验Vivado工程目录为“ps_emio/vivado”。

    实验vitis工程目录为“ps_emio/vitis”。

    如果想用PS点亮PL的LED灯,该如何做呢?一是可以通过EMIO控制PL端LED灯,二是通过AXI GPIO的IP实现控制。本章介绍如何使用EMIO控制PL端LED灯的亮灭。同时也介绍了,利用EMIO连接PL端按键控制PL端LED灯。

    1. 原理介绍

    先来了解GPIO的BANK分布,从图中可知BANK0~BANK2的MIO有78个。BANK3~BANK5的EMIO有96个,本章就是采用EMIO控制PL端LED。

    FPGA工程师工作内容

    以下为FPGA工程师负责内容。

    2. Vivado工程建立

    1)以ps_hello工程为基础,另存为一个名为ps_emio的工程,打开ZYNQ配置,把GPIO EMIO勾选上。利用PL端的1个LED,1个按键,在MIO配置中选择EMIO的位宽为2位,配置结束,点击OK。

    2)点击多出的GPIO_0端口右键选择Make External,将端口信号导出

    3)点击引脚并修改引脚名称为emio,也可以根据自己需求修改名称。保存设计。

    4)点击xx.bd右键选择Generate Output Products,重新生成输出文件

    5)结束后,顶层文件会更新出新的管脚,下面需要对其进行引脚绑定

    3. XDC文件约束PL管脚

    1)新建XDC文件,绑定PL端引脚

    设置文件名称为emio

    2)emio.xdc添加一下内容,端口名称一定要和顶层文件端口一致

    ##################Compress Bitstream############################set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]set_property IOSTANDARD LVCMOS33 [get_ports {emio_tri_io[*]}]#pl ledset_property PACKAGE_PIN W13 [get_ports {emio_tri_io[0]}]#pl keyset_property PACKAGE_PIN AA13 [get_ports {emio_tri_io[1]}]

    3)生成bit文件

    4)虽然说没有用到PL端的逻辑,但是用到了PL端的引脚,因此导出硬件要选择“Include bitstream”

    软件工程师工作内容

    以下为软件工程师负责内容。

    4. Vitis程序编写

    4.1 EMIO点亮PL端LED灯

    下图为GPIO的控制框图,实验中会用到输出部分的寄存器,数据寄存器DATA,数据掩码寄存器MASK_DATA_LSW,MASK_DATA_MSW,方向控制寄存器DIRM,输出使能控制器OEN。

    一开始编写代码可能会无从下手,我们可以导入Xilinx提供的example工程,在BSP里找到psu_gpio_0,点击Import Examples

     

    在弹出窗口选择“xgpiops_polled_example”,点击OK

    会出现一个新的APP工程

    1)这个example工程是测试PS端MIO的输入输出的,由于LED是EMIO引出来的,EMIO的MIO号是从78开始的,需要在文件中修改Output_pin为78,测试LED灯。

    由于只测试LED灯,也就是输出,我们把输入功能注释掉。保存文件。

    2)编译工程

    3)Run AsLaunch on Hardware(Single Application Debug),下载结束后,即可看到PS_LED快速闪烁16次

    4)虽然用官方的例子比较方便,但是它的代码看起来比较臃肿,我们可以通过学习它的方法,自己简化写一遍。我们新建一个APP工程。可以在空白处右键NewApplication Project。在ps_led_test的helloworld.c中修改。其实程序步骤很简单,初始化GPIO设置方向输出使能控制GPIO输出值。

    第一页跳过

    选择硬件描述工程

    填入工程名称,并选择相应的CPU

    下一步

    模板选择Hellow World即可

    5)可以看到多了一个APP工程,仍然是基于名为standalone on psu_cortexa53_0的BSP,也就是一个Domain,与前面的example工程共用一个BSP

    6)可以将例程的代码复制到helloworld.c中,保存并Build Project

    7)编译并下载

    即可看到LED1闪烁。

    4.2 EMIO实现PL端按键中断

    前面介绍了EMIO作为输出控制LED灯,这里讲一下利用EMIO作为按键输入控制LED灯。

    1)通过ug1085文档看下GPIO的结构图,中断的寄存器:

    INT_MASK:中断掩码

    INT_DIS: 中断关闭

    INT_EN: 中断使能

    INT_TYPE: 中断类型,设置电平敏感还是边沿敏感

    INT_POLARITY: 中断极性,设置低电平或下降沿还是高电平或上升沿

    INT_ANY: 边沿触发方式,需要INT_TYPE设置为边沿敏感才能使用

    设置中断产生方式时需要INT_TYPE、INT_POLARITY、INT_ANY配合使用。具体寄存器含义请参考ug1085部分。

    2)本实验设计为按下按键LED灯亮,再按下LED灭。

    主程序设计流程如下:

    GPIO初始化设置按键和LED方向设置产生中断方式设置中断打开中断控制器打开中断异常打开GPIO中断判断KEY_FLAG值,是1,写LED

    中断处理流程:

    查询中断状态寄存器判断状态清除中断设置KEY_FLAG值

    3)新建名为emio_key的工程,模板为hello world,拷贝例程的程序

    4)定义PS按键编号为79,PS LED为78

    5)在main函数中,设置LED和按键,将按键中断类型设置为上升沿产生中断。在本实验中,即按键信号的上升沿产生中断。

    6)中断控制器设置函数IntrInitFuntions是参考PS定时器中断实验所做,而下面的语句是设置中断优先级和触发方式。即操作ICDIPR和ICDICFR寄存器。

    7)在中断服务程序GpioHandler中,判断中断状态寄存器,清除中断,并将按键标志置1。

    8)在main函数中,判断按键标志key_flag,向LED写入数据。

    9)编译工程并下载程序,观察实验现象,按下KEY1,就可以控制LED1灯亮灭。

    5. 固化程序

    前面介绍过没有FPGA加载文件情况下如何生成固化程序(详情参考“体验ARM,裸机输出”Hello World”一章)。本章内容生成了FPGA的加载文件,在这里演示一下如何生成固化程序。

    与前面一样,也是点击system,右键Build Project即可

    软件会自动添加三个文件,第一个引导程序fsbl.elf,第二个为FPGA的bitstream,第三个为应用程序xx.elf,下载方法与前面一样,不再赘述。

    6. 引脚绑定常见错误

    1)在block design设计中,比如下图,GPIO模块的引脚名设置为了leds和keys,很多人想当然的在XDC里按照这样的名称绑定引脚。

    如果打开顶层文件就会发现引脚名称是不一样的,一定要仔细检查,以顶层文件里的引脚名称为准。

    否则就会出现以下引脚未绑定的错误

    2)如果是手写XDC文件,切记注意空格,这也是非常常见的错误

    7. 本章小节

    本章进一步学习了PS端的EMIO的使用,虽然将EMIO连接到了PL端的引脚上,但Vitis中的用法还是一样的,从这个例子我们也可以看出,一旦与PL端发生了联系,就需要生成bitstream,虽然几乎没有产生逻辑。

  • 相关阅读:
    Swift3 重写一个带占位符的textView
    Swift3 使用系统UIAlertView方法做吐司效果
    Swift3 页面顶部实现拉伸效果代码
    Swift3 倒计时按钮扩展
    iOS 获取当前对象所在的VC
    SpringBoot在IDEA下使用JPA
    hibernate 异常a different object with the same identifier value was already associated with the session
    SpringCloud IDEA 教学 番外篇 后台运行Eureka服务注册中心
    SpringCloud IDEA 教学 (五) 断路器控制台(HystrixDashboard)
    SpringCloud IDEA 教学 (四) 断路器(Hystrix)
  • 原文地址:https://www.cnblogs.com/alinx/p/14303662.html
Copyright © 2011-2022 走看看