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】。
int XGpio_Initialize(XGpio *InstancePtr, u16 DeviceId);
在设置端口方向、读写端口时,除了需要指定GPIO实例的指针,还需指名待设置的通道【Channel】,可选1或者2。这三个函数的原型如下
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中的值。