PL按键中断实验#
实验VIvado工程为“ps_axi_key”。
前面的定时器中断实验的中断属于PS内部的中断,本实验中断来自PL,PS最大可以接收16个来自PL的中断信号,都是上升沿或高电平触发。本实验用按键中断来控制LED。
Vivado工程建立#
- 本实验所用的Vivado工程只需要在“ps_axi_led”这个工程上添加用于按键输入的AXI
GPIO就可以,点击菜单“File -> Save Project As…”
新的工程名为“ps_axi_key”
添加一个AXI GPIO
配置GPIO参数,都为输入,宽度为1,使能中断
使用自动连接
再把端口名称改为keys
配置ZYNQ处理器的中断,勾选IRQ_F2P
连接ip2intc_irpt到IRQ_F2Q
修改xdc约束文件
set_property IOSTANDARD LVCMOS15 [get_ports {leds_tri_o[0]}]
set_property IOSTANDARD LVCMOS15 [get_ports {leds_tri_o[1]}]
set_property IOSTANDARD LVCMOS15 [get_ports {leds_tri_o[2]}]
set_property IOSTANDARD LVCMOS15 [get_ports {leds_tri_o[3]}]
set_property PACKAGE_PIN F5 [get_ports {leds_tri_o[0]}]
set_property PACKAGE_PIN E5 [get_ports {leds_tri_o[1]}]
set_property PACKAGE_PIN G5 [get_ports {leds_tri_o[2]}]
set_property PACKAGE_PIN G6 [get_ports {leds_tri_o[3]}]
set_property IOSTANDARD LVCMOS15 [get_ports {keys_tri_i[0]}]
set_property PACKAGE_PIN H6 [get_ports {keys_tri_i[0]}]
保存设计,编译生成bit文件
下载调试#
点击FileLaunch Vitis进入Vitis
新建platform工程过程不再赘述,参考“PS点亮PL的LED灯” 一章
和前面的教程一样,在不熟悉Vitis程序编写的情况下,我们尽量使用Vitis自带例程来修改
选择“xgpio_intr_tapp_example”
导入例程以后有未定义的错误,我们需要修改部分代码
按下图修改GPIO和中断号的宏定义
修改测试延时时间,让我们有足够的时间去按按键
打开串口终端,运行程序
如果一直不按按键,串口显示“No button pressed.”,如果按下“PL_KEY”显示“Successfully ran Gpio Interrupt Tapp Example”。
实验总结#
PL端可以给PS发送中断信号,这提高了PL和PS数据交互的效率,在需要大数量、低延时的应用中需要用到中断处理。