ZYNQ-IP-AXI-GPIO

AXI GPIO 可以将 PS 端的一个 AXI 4-Lite 接口转化为 GPIO 接口,并且可以被配置为单端口或双端口,每个通道的位宽可以独立配置。

通过使能三态门可以将端口动态地配置为输入或输出。

AXIGPIO 是 ZYNQ PL 端的一个 IP 核,可以将 AXI-Lite Master 转为 GPIO,并且一个 AXI-Lite 接口可以通过 AXI interconnect 模块控制多个 AXI-GPIO。

AXI-GPIO IP 设置

最大时钟频率


Z y n q 7020 Zynq 7020 Zynq7020 的最大频率和 A r t i x 7 − 2 Artix 7-2 Artix7−2 的速率相同,为 140 M H z 140 MHz 140MHz。

AXI GPIO 设置

默认为单通道。GPIO 的方向在这里设置了以后就不能在 vitis 中设置 GPIO 的方向。

中断属于 PL 对 PS 的中断,需要在 ZYNQ 7 Processing System 中勾选

生成的 vitis 的代码中,xparameters.h 中的 id 默认从 ID 0 开始,不管 vivado 这边的 AXI-GPIO 的序号是从 0 开始还是从 1 开始。

!note

  1. GPIO 只能使能整个通道中断,无法单独使能通道中的某个引脚中断

  2. 中断类型只能设置为上升沿或高电平

AXI-GPIO 相关代码

初始化

c 复制代码
/****************************************************************************/

/**

* Initialize the XGpio instance provided by the caller based on the

* given configuration data.

*

* Nothing is done except to initialize the InstancePtr.

*

* @param    InstancePtr is a pointer to an XGpio instance. The memory the

*       pointer references must be pre-allocated by the caller. Further

*       calls to manipulate the driver through the XGpio API must be

*       made with this pointer.

* @param    Config is a reference to a structure containing information

*       about a specific GPIO device. This function initializes an

*       InstancePtr object for a specific device specified by the

*       contents of Config. This function can initialize multiple

*       instance objects with the use of multiple calls giving different

*       Config information on each call.

* @param    EffectiveAddr is the device base address in the virtual memory

*       address space. The caller is responsible for keeping the address

*       mapping from EffectiveAddr to the device physical base address

*       unchanged once this function is invoked. Unexpected errors may

*       occur if the address mapping changes after this function is

*       called. If address translation is not used, use

*       Config->BaseAddress for this parameters, passing the physical

*       address instead.

*

* @return

*       - XST_SUCCESS if the initialization is successful.

*

* @note     None.

*

*****************************************************************************/

int XGpio_CfgInitialize(XGpio * InstancePtr, XGpio_Config * Config,

            UINTPTR EffectiveAddr)

设置输入输出方向

c 复制代码
/****************************************************************************/

/**

* Set the input/output direction of all discrete signals for the specified

* GPIO channel.
*
* @param    InstancePtr is a pointer to an XGpio instance to be worked on.

* @param    Channel contains the channel of the GPIO (1 or 2) to operate on.

* @param    DirectionMask is a bitmask specifying which discretes are input

*       and which are output. Bits set to 0 are output and bits set to 1
*       are input.
*
* @return   None.

*

* @note     The hardware must be built for dual channels if this function

*       is used with any channel other than 1.  If it is not, this

*       function will assert.

*

*****************************************************************************/

void XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel, u32 DirectionMask)

GPIO 读写

c 复制代码
/****************************************************************************/

/**

* Read state of discretes for the specified GPIO channel.


* @param    InstancePtr is a pointer to an XGpio instance to be worked on.
* @param    Channel contains the channel of the GPIO (1 or 2) to operate on.

* @return   Current copy of the discretes register.


* @note     The hardware must be built for dual channels if this function

*       is used with any channel other than 1.  If it is not, this

*       function will assert.
*****************************************************************************/

u32 XGpio_DiscreteRead(XGpio * InstancePtr, unsigned Channel)

/****************************************************************************/

/**

* Write to discretes register for the specified GPIO channel.

*

* @param    InstancePtr is a pointer to an XGpio instance to be worked on.

* @param    Channel contains the channel of the GPIO (1 or 2) to operate on.

* @param    Mask is the value to be written to the discretes register.

*

* @return   None.

*

* @note     The hardware must be built for dual channels if this function

*       is  used with any channel other than 1.  If it is not, this

*       function will assert. See also XGpio_DiscreteSet() and

*       XGpio_DiscreteClear().

*

*****************************************************************************/

void XGpio_DiscreteWrite(XGpio * InstancePtr, unsigned Channel, u32 Mask)
相关推荐
FPGA小迷弟17 小时前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
NamoAmitabha12817 小时前
CPU 内部结构是什么?---deepseek
fpga开发
abc light18 小时前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
156082072191 天前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理
XMAIPC_Robot1 天前
-40~85℃宽温实测:RK3588 机器人控制器硬件底座,长时间 SLAM 定位稳定性验证
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga
樱木花道長1 天前
AMD Ross 深度系列 8:FAQ 七问七答(文末附网盘链接)
人工智能·fpga开发
FPGA小迷弟2 天前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
低慢小uav2 天前
(已解决)Zynq芯片lwip协议栈,使用tcp作为服务器Service,接收大量数据时,长度接收正常,接收对数据校验,校验和异常分析
网络协议·tcp/ip·fpga开发
szxinmai主板定制专家2 天前
ARM+FPGA 数控机床控制器:选 CODESYS SoftMotion CNC,还是基于 LinuxCNC 自研搭建?架构、授权、实时性、量产风险深度对比
arm开发·fpga开发·codesys·数据采集卡·linuxcnc·rk3576
女神下凡2 天前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范