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

AXI GPIO 2——ZYNQ学习笔记

AXI GPIO同一通道混合输入输出使用示例

硬件设计


xdc约束

set_property -dict {PACKAGE_PIN M17 IOSTANDARD LVCMOS33} [get_ports uart_rxd]
set_property -dict {PACKAGE_PIN L17 IOSTANDARD LVCMOS33} [get_ports uart_txd]set_property -dict {PACKAGE_PIN P20 IOSTANDARD LVCMOS33} [get_ports {axi_gpio_tri_io[0]}]
set_property -dict {PACKAGE_PIN P21 IOSTANDARD LVCMOS33} [get_ports {axi_gpio_tri_io[1]}]
set_property -dict {PACKAGE_PIN K21 IOSTANDARD LVCMOS33} [get_ports {axi_gpio_tri_io[2]}]
set_property -dict {PACKAGE_PIN J20 IOSTANDARD LVCMOS33} [get_ports {axi_gpio_tri_io[3]}]

main.c

#include <stdio.h>
#include "axi_gpio.h"int main(){u32 axi_reg_data = 0;axi_gpio_config();out_axi_gpio(1,0);axi_reg_data = read_axi_reg();printf("AXI GPIO S\r\n");printf("axi reg = %p\r\n",axi_reg_data);return 0;
}

axi_gpio.c

#include <stdio.h>
#include "xparameters.h"
#include "xgpio.h"
#include "xil_exception.h"
#include "xscugic.h"
#include "axi_gpio.h"XGpio 	AXI_Gpio	;
extern	XScuGic Intc		;#define GPIO_CHANNEL1			1											//AXI GPIO		通道号#define AXI_GPIO_ID 			XPAR_GPIO_0_DEVICE_ID						//AXI GPIO		器件ID//axi gpio 初始化
void axi_gpio_config(void){XGpio_Initialize(&AXI_Gpio, AXI_GPIO_ID);								//初始化AXI GPIOXGpio_SetDataDirection(&AXI_Gpio,GPIO_CHANNEL1,0x0000000C);				//设置对应通道为0011输出输入LED_ON;
}//读取通道当前状态
u32 read_axi_reg(void){return XGpio_DiscreteRead(&AXI_Gpio,GPIO_CHANNEL1);
}//输出函数
//bit_pos:要修改的数据位
//value:要修改的数据
void out_axi_gpio(u32 bit_pos,u8 value){u32 out_data;out_data = modify_bit(read_axi_reg(),bit_pos,value);XGpio_DiscreteWrite(&AXI_Gpio,GPIO_CHANNEL1,out_data);
}//掩码与数据改变
//data:要修改的原数据
//bit_pos:要修改的数据位
//value:要修改的数据
u32 modify_bit(u32 data, u32 bit_pos, u8 value){u32 mask = 1U << bit_pos;      // 创建指定位的掩码if (value) {data |= mask;                   // 设置该位为1} else {data &= ~mask;                  // 设置该位为0}return data;
}

axi_gpio.h

#include <stdio.h>
#include "xparameters.h"
#include "xgpio.h"extern  XGpio 	AXI_Gpio	;#define GPIO_CHANNEL1			1											//AXI GPIO		通道号#define LED_ON		XGpio_DiscreteWrite(&AXI_Gpio,GPIO_CHANNEL1,0X00000003)							//控制IO输出1
#define LED_OFF		XGpio_DiscreteWrite(&AXI_Gpio,GPIO_CHANNEL1,0X00000000)							//控制IO输出0void axi_gpio_config(void);
u32 read_axi_reg(void);
u32 modify_bit(u32 data, u32 bit_pos, u8 value);
void out_axi_gpio(u32 bit_pos,u8 value);

http://www.lryc.cn/news/620678.html

相关文章:

  • 相较于传统AR作战环境虚拟仿真系统,其优势体现在哪些方面?
  • Mysql基本使用语句(一)
  • 生成和发布博客的工作流
  • 力扣(串联所有单词的子串)
  • ChatECNU 边缘 AI 智能体对话
  • 在线进销存系统高效管理网站源码搭建可二开
  • 倾斜按钮(径向渐变详细介绍)
  • MCU中的LTDC(LCD-TFT Display Controller)
  • 项目日志框架与jar中日志框架冲突 解决
  • 20. 了解过尾递归优化吗
  • 1780. 判断一个数字是否可以表示成三的幂的和
  • 大模型工程化落地:从模型选择到性能优化的实战指南
  • Gradle使用场景
  • k8s+isulad 重装
  • 在语音通信业务量下降时候该怎么做
  • C++ vector越界问题完全解决方案:从基础防护到现代C++新特性
  • 数据结构---链式结构二叉树
  • CMake include_directories()使用指南
  • OpenAI 的浏览器将使用 ChatGPT Agent 来控制浏览器
  • 机器人“ChatGPT 时刻”倒计时
  • AI三国杀:马斯克炮轰苹果“偏袒”OpenAI,Grok与ChatGPT的应用商店战争揭秘
  • 区块链技术原理(10)-以太坊帐户
  • Python小程序1.0版本
  • 机器学习学习报告
  • 【Linux基础知识系列】第九十四篇 - 如何使用traceroute命令追踪路由
  • 【自动化运维神器Ansible】template模块深度解析:动态配置文件生成的艺术
  • Horse3D游戏引擎研发笔记(五):在QtOpenGL环境下,仿three.js的BufferGeometry管理VAO和EBO绘制四边形
  • 生成式AI工程师自学路线图:从基础认知到生产落地的实战指南
  • Unity中的神经网络遗传算法实战
  • Elasticsearch ABAC 配置:实现动态、细粒度的访问控制