《LabVIEW ZYNQ FPGA宝典》第6章>>实验4:LabVIEW读取ZYNQ PS(ARM)端MIO引脚(读取PS端按键状态)

1、实验内容

        上一节实验3里面我们向大家展示了如何使用LabVIEW控制ZYNQ PS端的MIO输出点亮或者熄灭LED灯,本节实验我继续MIO实验,向用户展示如何编写一个ZYNQ PS端Linux RT应用程序直接读取PS端MIO引脚上的电平状态,比如捕捉ZYNQ底板上挂在PS端的两个按键KEY的按压状态,相当于将MIO设置成输入模式。

2、实验目标

        本节实验我们需要学会利用LabVIEW编写一个可以读取ZYNQ底板上2个PS端按键状态的Linux RT程序,编译部署下载到ZYNQ芯片的PS端ARM里面去运行,利用LabVIEW Linux RT应用程序在线前面板交互式运行,观察按键按压状态,再次复习并熟练掌握ZYNQ平台PS(ARM)端的LabVIEW Linux RT程序开发过程和原理。

3、硬件介绍

        本节实验只需要用到正点原子领航者ZYNQ开发板,Xilinx JTAG下载器本节实验用不上,因为本节实验我们不需要对PL端FPGA进行编程,所以也就不用观察FPGA部分的状态变化,只需要借助网线部署下载Linux RT程序到PS端ARM里面运行即可。

        原子领航者ZYNQ底板上有2个挂在PS端物理按键,标识分别是“PS_KEY0”和“PS_KEY1”,位于板子右下角,如图4-1所示。这2个按键也是原子为了展示PS端ARM引脚可编程专门预留的。

图4-1:正点原子领航者ZYNQ开发板上挂在PS端ARM上的两个按键

4、原理图介绍

        正点原子ZYNQ领航者底板上的2个开关按键(PS_KEY0和PS_KEY1)对应的MIO引脚原理图,如图4-2所示,可以看出,这两个按键分别与ZYNQ芯片PS端ARM BANK500的MIO12和MIO11这两个引脚相连,如图4-3所示。请记住这2个引脚名称,后面我们用LabVIEW编写Linux RT程序时候,需要调用MIO12和MIO11这2个引脚。

图4-2:原子ZYNQ底板上的2个PS端按键对应的MIO引脚原理图(MIO12、MIO11)

5、驱动VI函数讲解

        正式开始采用LabVIEW编写ZYNQ PS端Linux RT MIO引脚读取输入之前,我们先来了解一下本节实验要用到的Linux RT下的通用GPIO驱动VI函数功能。

        为了方便用户使用,我们提前将底层通用GPIO引脚配置函数封装到LabVIEW Linux RT环境下的“PowerGod-RIO-RT”选板里面,变成一个个小图标,一目了然。

        要完成本节实验,我们需要用到3个函数选板,分别是“PS_Load_KO”、“PS_MIO_Pins”和“PS_Reg_Address”,如图4-3所示。

图4-3:本节实验要用到的神电测控“PowerGod-RIO-RT”里面的3个函数选板

        下面,我们分别介绍一下这3个选板里面的VI功能和应用场合。

        1)为了提高ZYNQ芯片PS端的内存使用率,我们将很多外设KO驱动做成了动态加载和卸载。比如本节实验,我们需要读取PS端的MIO引脚电平状态,MIO属于通用IO,也就是GPIO类,所以在Linux RT程序初始化之前,我们需要利用下面图4-4里面的GPIO动态加载Load_GPIO_KO函数(PSLoadGPIOKO(SubVI).vi)加载GPIO驱动,等到Linux RT程序停止退出之前,再调用Unload_GPIO_KO卸载函数(PSUnloadGPIOKO(SubVI).vi)卸载GPIO驱动以便释放GPIO占用的内存和资源。

图4-4:GPIO外设驱动动态加载和卸载函数

        2)ZYNQ芯片PS端因为是ARM,所有外设的配置和操控,本质上就是对寄存器地址空间的访问和读写,也就是说,所有PS端外设都可以通过查看ZYNQ芯片手册,找到对应的物理寄存器地址,然后利用下图4-5所示的“PS_Reg_Address”寄存器函数选板里面的4个基础VI实现全部所有功能。理论上,有了这4个基础寄存器操作函数,就能实现对ZYNQ PS端ARM里面所有外设的控制。在本节实验总结里面,我们会给出利用这4个寄存器函数实现对PS端54个MIO引脚的批量读写和控制。

图4-5:ZYNQ芯片PS端ARM寄存器操作函数

        注意:只要是对PS端外设进行操作的场合,都需要调用上面“PS_Reg_Address”函数选板里面的第1个和第4个VI,也就是“PS_reg_Open”和“PS_Reg_Close”,相当于对寄存器函数的初始化和程序退出前的寄存器关闭,至于中间的Reg寄存器读写两个VI,可以根据实际情况选择,因为后续为了简化编程,我们对很多外设寄存器实际进行了二次封装,直接只需要调用相应的函数即可,而不需要死记硬背寄存器地址。

        3)虽然,我们可以借助上面的4个寄存器VI函数实现对PS端任何外设的操控,不一定是GPIO,其他的外设只要知道了寄存器地址就可以。但是如果大家都去查找ZYNQ芯片资料死记硬背这些外设的寄存器地址,会浪费很多宝贵的时间。

        因此,为了简化用户编程复杂度,我们将常见的外设寄存器地址进行了封装,利用LabVIEW特有的图形化优势,将其封装成LabVIEW多态VI或者封装成下拉列表,这样用户只需要拖拽几下或者点击一下鼠标就能一目了然的完成PS端的外设访问。

        比如,本节实验需要访问ZYNQ PS端MIO引脚,为了简化编程,我们将底层不同功能的GPIO寄存器利用上面图4-5里面的寄存器读写VI重新进行了二次封装,将这些GPIO功能VI函数单独做成了一个名为“PS_MIO_Pin”的函数选板,如图4-6所示。这些VI函数一看名称就知道各自实现的功能,从左往右依次完成的是“MIO时钟使能/关闭”、“MIO读写方向设置”、“MIO引脚中断使能/关闭”、“MIO引脚输出使能/禁止”、“MIO引脚输入电平读取”和“MIO引脚电平输出”,总共6个VI。

图4-6:将GPIO外设按照功能模块化封装成独立的VI(方便用户理解和调用)

6、程序开发讲解

6.0:编程思路

        也就是说,要想完成对ZYNQ芯片PS端MIO引脚的输出和读取,必须按照下面的流程至少调用10个VI函数,调用次序如下,后面Linux RT程序编写就是参考这个流程来。Load_GPIO_KOàPS_Reg_OpenàMIO_CLKàMIO_DIRàMIO_INTàMIO_Out_EnàMIO_Read/MIO_WriteàPS_Reg_CloseàUnload_GPIO_KO

        了解完ZYNQ芯片PS端MIO驱动VI和操作流程后,接下来,我们就可以利用LabVIEW编写一个Linux RT程序读取MIO引脚上的电平,然后下载到ZYNQ PS端ARM里面去捕捉ZYNQ底板上的PS端按键状态。提醒:本节实验只有ZYNQ PS端Linux RT程序开发,不需要PL端FPGA参与,所以也就不要编写PL端FPGA程序了,简单很多。

6.1:新建或者打开已有的LabVIEW ZYNQ Linux RT项目

  打开前面第五章我们新建好的LabVIEW ZYNQ项目(My_FPGA_Stater_Board_ZYNQ7020_PS+PL.lvproj),如果大家不记得怎么新建一个同时包含ZYNQ PS端和PL端的LabVIEW ZYNQ项目,可以回顾一下前面第五章里面的内容。

        打开之后的LabVIEW ZYNQ项目(My_FPGA_Stater_Board_ZYNQ7020_PS+PL.lvproj),如图4-7所示。

图4-7:打开前面我们创建好的同时包含ZYNQ PS(ARM)端和PL(FPGA)端的LabVIEW ZYNQ项目

        由于本节实验,我们用不到ZYNQ芯片里面的PL端FPGA部分,因此,可以先将FPGA Target终端收起来,如图4-8所示。

图4-8:将My FPGA终端暂时收起来(本节实验用不到FPGA参与)

6.2:编写LabVIEW Linux RT应用程序(读取PS端MIO引脚关联按键状态)

        1)右击Linux RT终端(ZYNQ7020_PS_Linux_RT)选择“New/新建”一个“Virtual Folder/虚拟文件夹”,如图4-9所示。将其重命名为“实验4-读取PS端MIO引脚关联的按键状态(ZYNQ PS端)”,如图4-10所示,以示分类管理好区分。

图4-9:右击Linux RT终端选择新建一个虚拟文件夹

图4-10:将刚刚新建出来的虚拟文件夹重命名为“实验4-读取PS端MIO引脚关联的按键状态(ZYNQ PS端)”

        2)接着,右击刚刚创建的虚拟文件夹“实验4-读取PS端MIO引脚关联的按键状态(ZYNQ PS端)”选择“New/新建”一个VI程序,如图4-11所示,然后将这个VI另存为“实验4-读取PS端MIO引脚关联的按键状态(ZYNQ PS端).vi”,如图4-12所示。

图4-11:右击虚拟文件夹新建一个VI

图4-12:将新建出来的VI保存并重命名为“实验4-读取PS端MIO引脚关联的按键状态(ZYNQ PS端).vi”

        3)打开这个新的VI,将前面第5节“PowerGod-RIO-RT”函数选板里面3个相关的10个子VI函数拖拽到程序框图里面,然后按照6.0节里面的步骤进行排序串联,最后在前面板上创建相应的控件,即可完成本节PS端按键状态捕捉实验程序的开发,最终形成完整的Linux RT程序框图,如图4-13所示,提醒:看不清的用户可以缩放一下pdf,因为这里贴的程序框图是直接复制的LabVIEW原始矢量图,不是截图。

图4-13:完整的ZYNQ PS(ARM)端按键状态读取Linux RT程序框图

        其中,左边的顺序结构里面有3个分支,分别实现的功能是:MIO时钟使能、MIO禁止中断、MIO输出读写方向设置(设置成输入方向),相应的3个分支框图如图4-14~4-16所示。提醒:相比于上一节实验3里面的MIO输出不同的地方是,这里面MIO只要设置成输入模式就可以了,不需要再去设置禁止输出使能了,所以少一个分支。

图4-14:使能ZYNQ芯片PS端GPIO引脚时钟

图4-15:关闭ZYNQ芯片PS端GPIO引脚中断

图4-16:将ZYNQ芯片PS端GPIO引脚设置为输入模式

        提醒:我们将ZYNQ PS端54个GPIO(MIO)引脚做成了下拉枚举形式,这样大家就能直接根据原理图上PS端的MIO序号,直接在下拉列表里面选择一下即可,不需要去死记硬背那些寄存器地址了。

        4)对应的PS端按键读取Linux RT控制程序前面板,如图4-17所示。用户可以按压ZYNQ底板上的PS端物理按键,在Linux RT程序前面板上观察这两个按键的电平状态。

图4-17:ZYNQ PS端按键状态捕捉Linux RT控制程序前面板

7、硬件接线实物图

        提醒:由于本节实验没有用到ZYNQ PL端FPGA部分,没有必要编写FPGA VI程序,所以也就无须外接Xilinx下载器来观察FPGA VI的在线前面板运行情况了。

        因此,只需要一根CAT5+或者CAT6类千兆网线将ZYNQ开发板跟上位机开发电脑互联起来即可,上位机开发电脑通过网线与正点原子ZYNQ开发板之间的硬件接线实物图,如图4-18所示。

图4-18:完整的硬件接线实物图(千兆网线接到PS端网口里面)

8、程序编译下载

        1)由于ZYNQ开发板与上位机电脑之间是通过网线直连的,中间没有经过路由器,所以,上位机要利用ZYNQ PS端Linux RT默认的静态IP地址:192.168.2.99来部署下载上位机写好的Linux RT程序,因此,上位机网卡IP地址也要设置成同一个网段,比如192.168.2.10,如图4-19所示。

图4-19:将上位机开发电脑网卡IP地址设置成跟下位机ZYNQ里面的eth0:1虚拟网卡静态IP地址在同一个网段内

        2)然后检查一下LabVIEW ZYNQ PS端Linux RT终端里面的IP地址是否为下位机ZYNQ里面的固定IP地址(192.168.2.99),如果不是的话,右击终端选择“Properties/属性”,如图4-20所示;再在属性设置页面里面修改一下即可,如图4-21所示。

图4-20:如果IP地址不一样的话,可以右击LabVIEW Linux RT终端选择属性

图4-21:在Linux RT属性配置里面将IP地址改成ZYNQ直连方式下的固定静态IP地址

        3)右击ZYNQ PS端Linux RT终端(ZYNQ7020_PS_Linux_RT)选择“Connect/连接”,如图4-22所示;不出意外的话,会弹出来一个“Deployment Progress”部署成功的提示框,如图4-23所示;最后点击一下“Close/关闭”该对话框即可,此时,可以看到LabVIEW Linux RT终端左下角的指示灯点亮了,如图4-24所示,表明上位机Linux RT终端与下位机ZYNQ板子通过网线建立起了连接。

图4-22:右击LabVIEW Linux RT终端(ZYNQ7020_PS_Linux_RT)选择“Connect/连接”

图4-23:弹出一个部署进度与部署成功的提示框(Close即可)

图4-24:连接成功后Linux RT终端logo图标指示灯亮起

        4)右击Linux RT终端(ZYNQ7020_PS_Linux_RT)里面的程序生成规范,选择“New/新建”一个“Real-Time Application/实时应用程序”,如图4-25所示;然后在弹出来的RT应用程序属性配置页面里面,将程序生成规范重命名为“实验4-读取PS端MIO引脚关联的按键状态(ZYNQ PS端)”,如图4-26所示;再选择左侧目录里面的“Source Files/源文件”里面的本节实验4编写的VI程序(实验4-读取PS端MIO引脚关联的按键状态(ZYNQ PS端).vi)添加到右侧的“Startup Vis/启动VIs”列表里面,如图4-27所示。

图4-25:右击Linux RT终端下的程序生成规范新建一个RT应用程序规范

图4-26:将新建出来的RT程序生成规范重命名以示区分

       图4-27:将源文件里面的本节实验4编写的Linux RT VI添加到右侧启动VIs列表里面

        5)然后右击刚刚创建的实验4对应的RT应用程序生成规范,选择“Build/编译”,如图4-28所示;大概几秒钟就能编译完成,并且会有一个编译成功的提示框,如图4-29所示;点击“Done/完成”按钮退出这个提示框,再右击实验4程序生成规范,选择“Deploy/部署”将刚刚编译出来的Startup.rtexe以及附件全部部署下载到ZYNQ板子里面去,如图4-30所示;一切顺利的话,会有一个部署进度条和部署成功的提示框出现,如图4-31所示。

图4-28:右击实验4 Linux RT应用程序生成规范进行Build/编译

图4-29:编译完成后会有一个编译进度条和编译成功提示框

图4-30:右击Linux RT实验4程序生成规范选择“Deploy/部署”下载

图4-31:ZYNQ PS端Linux RT程序及其组件会一起部署下发到ZYNQ里面去

9、实验现象

        1)直接点击本节实验4 Linux RT程序(实验4-读取PS端MIO引脚关联的按键状态(ZYNQ PS端).vi)左上角的运行箭头,可以看到上位机LabVIEW会把这个VI程序及其组件和驱动一起部署下载到ZYNQ芯片里面运行,如图4-32所示;同时PS端里面的Linux RT应用前面板活了,自动进入在线前面板交互式运行模式,此时,前面板上的“Running”显示控件里面的数值开始递增,说明PS端的Linux RT程序里面的while循环开始运行起来了,如图4-33所示。

图4-32:上位机实验4对应的Linux RT程序成功部署到了下位机ZYNQ芯片里面运行

图4-33:Running显示控件数值递增,表明Linux RT程序里面的while循环开始运行了

        2)接下来,同时按下ZYNQ底板上挂在PS端的两个物理按键,如图4-34所示;此时,可以看到Linux RT程序前面板上的“PS_KEY0”和“PS_KEY1”两个指示灯都熄灭了,如图4-35所示。说明Linux RT程序读到的MIO引脚是低电平,根据前面的按键原理图可知,当按键按下的时候短接到GND所以是低电平。

图4-34:按下ZYNQ底板上挂在PS端的两个物理按键

图4-35:ZYNQ PS端Linux RT程序前面板上的两个指示灯熄灭了(接地就是低电平)

        3)松开两个按键,如图4-36所示,由于MIO引脚默认上拉,读到的是高电平,所以Linux RT前面板上的两个按键指示灯又全部点亮了,如图4-37所示。

图4-36:松开ZYNQ底板上挂在PS端的两个物理按键

图4-37:ZYNQ PS端Linux RT程序前面板上的两个指示灯点亮了(上拉则是高电平)

11、实验总结

        我们总结一下本节实验学到的内容和需要注意的事项。

        本节实验如果对ZYNQ单个PS(ARM)端GPIO进行配置和操作,使用封装好的下拉类别操作比较方便,如果要批量对这54个MIO一起配置和读写的话,下拉列表方式操作效率就不高了,此时我们可以直接操作ZYNQ的寄存器来显示批量读写,54个MIO实际上是两个32位寄存器合在一起的,其中有一个32位寄存器只有低22位是有效的,关于如何批量设置和操作这54个MIO引脚,可以参考我们范例程序里面的拓展实验3-1和3-2,我们已经将其添加到了Linux RT项目下了,如图4-48所示;对应的程序框图分别如图4-49和4-50所示。后续视频教程里面我会给大家演示一下这两个批量操作PS端GPIO的实验效果,其中,就包含PS端两个KEY按键引脚,这里不再赘述了。

图4-48:通过寄存器地址的方式批量操作32位寄存器(扩展实验)

图4-49(a):批量操作ZYNQ PS端前32个MIO引脚(前面板)

图4-49(b):批量操作ZYNQ PS端前32个MIO引脚(程序框图)

图4-50(a):批量操作ZYNQ PS端后22个MIO引脚(前面板)

图4-50(b):批量操作ZYNQ PS端后22个MIO引脚(程序框图)

        最后,提醒一下用户:本节实验虽然简单,没有涉及到ZYNQ PL端FPGA部分程序编写,但是对于初学者来说,里面的每个步骤和操作过程都要熟练掌握,虽然都是一些基础知识,但是熟能生巧,后面的实验例程会越来越复杂,功能越来越多,需要同时对ZYNQ PS端ARM和PL端FPGA进行LabVIEW编程,希望大家都能轻松学会掌握。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值