Vivado GPIO详解

文章目录

硬件说明

在其信号接口中,左侧的S_AXI, s_axi_aclk, s_axi_areshtn会自动通过AXI Interconnect或者smc与zynq的GP端口相连接,其右侧的GPIO接口下面有三个信号,分别是

  • gpio_io_i:输入信号,将PL端的电平送入GPIO核,供PS读取。
  • gpio_io_o:输出信号,将PS写入数据寄存器的值输出到PL端。
  • gpio_io_t:三态控制信号,通常由方向寄存器控制,决定引脚是高阻态(输入)还是驱动输出(输出)。在很多设计中,这个信号被直接连接到方向寄存器的输出。

其右侧可进行设置的参数如下

  • 【All Input/Output】勾选表示设置所有的GPIO指定为输入或者输出接口,若勾选,则PS中无法再设置GPIO方向。
  • 【GPIO Width】接口位宽,最高32位
  • 【Default Output Value】默认输出值
  • 【Default Output Value】设置GPIO的默认输入/输出模式。这里的"Tri State"可能指的是GPIO引脚的初始状态或默认模式,其中"0"代表输出模式,"1"代表输入模式。但具体实现可能因不同的IP核而异。
  • 【Enable Dual Channel】使能GPIO通道2,勾选后GPIO 2可以设置
  • 【Enable Interrupt】使能中断,AXI GPIO只能使能整个通道中断,而无法像EMIO一样单独使能通道中某个引脚的中断,当使能某个通道中断后,该通道所有输入引脚均能产生中断信号,效果完全相同。AXI GPIO中断属于IRQ_F2P,而IRQ_F2P的中断类型只能设置为上升沿或者高电平,而不能是下降沿或者低电平。

软件

【xgpio.h】提供了GPIO相关的一些函数,主要包括初始化、设置端口方向、读写端口等功能。这些函数在使用时,至少需要输入指向GPIO示例的指针【InstancePtr】,故后续不再对这个参数进行说明。

【XGpio_Initialize】用于初始化GPIO,其原型如下,其中【DevicedId】为设备的ID号,为自动生成,可在xparameters.h中找到,一般被定义为宏【XPAR_AXI_GPIO_0_DEVICE_ID】。

c 复制代码
int XGpio_Initialize(XGpio *InstancePtr, u16 DeviceId);

在设置端口方向、读写端口时,除了需要指定GPIO实例的指针,还需指名待设置的通道【Channel】,可选1或者2。这三个函数的原型如下

c 复制代码
void XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel, u32 DirectionMask);
u32 XGpio_GetDataDirection(XGpio *InstancePtr, unsigned Channel);
void XGpio_DiscreteWrite(XGpio *InstancePtr, unsigned Channel, u32 Mask);
u32 XGpio_DiscreteRead(XGpio *InstancePtr, unsigned Channel);
  • 【XGpio_SetDataDirection】用于设置GPIO方向,其参数DirectionMask用于设置方向,0表示output,1表示input。
  • 【XGpio_GetDataDirection】用于获取GPIO方向,其返回值即为DirectionMask
  • 【XGpio_DiscreteWrite】为写入GPIO的函数,其参数Mask即为要写入的值。
  • 【XGpio_DiscreteRead】用于读取GPIO,其返回值即为GPIO中的值。