当前位置: 首页 > news >正文

ZYNQ-IP-AXI-GPIO

AXI GPIO 可以将 PS 端的一个 AXI 4-Lite 接口转化为 GPIO 接口,并且可以被配置为单端口或双端口,每个通道的位宽可以独立配置。
通过使能三态门可以将端口动态地配置为输入或输出。
axigpio|500
AXIGPIO 是 ZYNQ PL 端的一个 IP 核,可以将 AXI-Lite Master 转为 GPIO,并且一个 AXI-Lite 接口可以通过 AXI interconnect 模块控制多个 AXI-GPIO。

AXI-GPIO IP 设置

最大时钟频率

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

AXI GPIO 设置

AXIGPIOip|500
默认为单通道。GPIO 的方向在这里设置了以后就不能在 vitis 中设置 GPIO 的方向。
中断属于 PL 对 PS 的中断,需要在 ZYNQ 7 Processing System 中勾选
|500

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

[!note]

  1. GPIO 只能使能整个通道中断,无法单独使能通道中的某个引脚中断
  2. |400
    中断类型只能设置为上升沿或高电平

AXI-GPIO 相关代码

初始化

/****************************************************************************//*** 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)

设置输入输出方向

/****************************************************************************//*** 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 读写

/****************************************************************************//*** 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)
http://www.lryc.cn/news/527645.html

相关文章:

  • Netty的心跳机制怎么实现的?
  • java基础——专题一 《面向对象之前需要掌握的知识》
  • Python 数据清洗与处理常用方法全解析
  • BFS算法的实现(例题)
  • clean code阅读笔记——如何命名?
  • MacOS 如何解决无法打开 ‘xxx’,因为 Apple 无法检查其是否包含恶意软件
  • Java并发学习:进程与线程的区别
  • 省市区三级联动
  • springboot 动态配置定时任务
  • 数据结构与算法学习笔记----求组合数
  • Arouter详解・常见面试题
  • 全志开发板 视频输入框架
  • 寒假学web--day10
  • 【全栈】SprintBoot+vue3迷你商城(9)
  • 系统思考—问题分析
  • 系统架构设计师教材:信息系统及信息安全
  • 美国三种主要的个人数据产业模式简析
  • js手撕 | 使用css画一个三角形 使用js修改元素样式 驼峰格式与“-”格式相互转化
  • 每日一道算法题
  • 低代码系统-产品架构案例介绍、明道云(十一)
  • 论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(三)
  • 利用机器学习创建基于位置的推荐程序
  • 每日一题 429. N 叉树的层序遍历
  • AIP-132 标准方法:List
  • CSAPP学习:前言
  • 【统计的思想】假设检验(二)
  • KNN算法学习实践
  • 数据可视化的图表
  • 动手学深度学习-卷积神经网络-3填充和步幅
  • 【JS|第28期】new Event():前端事件处理的利器