硬件:Xilinx Zynq-7000 SoC ZC706
版本:vivado2015.4
Zynq上有三种GPIO方式,AXI-GPIO是其中一种,需要创建一个AXI-GPIO核,AXI总线连接至ZYNQ。
然后配置GPIO的宽度和初始状态。
All Outputs:设置成输出,根据需要配置。
GPIO Width为GPIO的数量,这边配置成2
Default Output Value为GPIO初始状态,这边为了让2路GPIO都为高状态设置成0x00000003(0‘b 11)
重新Create HDL Wrapper,找到引脚 ,生成一个两个位宽的引脚output [1:0]gpio_rtl_tri_o,然后再对这两个引脚约束。
set_property PACKAGE_PIN J15 [get_ports gpio_rtl_tri_o[0]]
set_property IOSTANDARD LVCMOS15 [get_ports gpio_rtl_tri_o[0]]
set_property PULLUP true [get_ports gpio_rtl_tri_o[0]]
set_property PACKAGE_PIN H14 [get_ports gpio_rtl_tri_o[1]]
set_property IOSTANDARD LVCMOS15 [get_ports gpio_rtl_tri_o[1]]
set_property PULLUP true [get_ports gpio_rtl_tri_o[1]]
至此FPGA部分设计完成,生成镜像。
下面是PS部分的设计。
找到AXI设备,设置方向,配置电平
//获取设别
int status = XGpio_Initialize(&gps,XPAR_AXI_GPIO_0_DEVICE_ID);
//设置方向,channel 1,所有方向都为输出
XGpio_SetDataDirection(&gps, 1,0x00);
//设置电平,channel 1,所有输出都为0
XGpio_DiscreteWrite(&gps, 1,0);