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

ZYNQ-自定义呼吸灯IP核以及PS-PL数据发送接收

试验任务:

1. 自定义一个LED IP核,控制PL LED呈现呼吸灯的效果

2.PS可以通过AXI接口来控制呼吸灯的开关和呼吸的频率

3.中途在底层修改自定义IP核,新增一个数据发送接收功能的寄存器接口

4.实现PS-PL之间的数据发送接收功能(32bit)

 IP核例化:

breath_led  #(
.START_FREQ_STEP(START_FREQ_STEP) 
) )
u_breath_led( (
.sys_clk  (S_AXI_ACLK ),
.sys_rst_n  (S_AXI_ARESETN ),
.sw_ctrl  (slv_reg0[ [0 ]),
.set_en (slv_reg1[ [31 ]),
.set_freq_step (slv_reg1[ [9: :0 ]),
.led  (led) )
);

代码中的 slv_reg0 和 slv_reg1 是寄存器地址 0 和寄存器地址 1 对应的数据,通过寄存器地址 0 对应的数据来控制呼吸灯的使能(sw_ctrl),寄存器地址 1 对应数据的最高位控制呼吸灯频率的设置有效信号(set_en),寄存器地址 1 对应数据的低 10 位控制呼吸灯频率的步长(set_freq_step)。 

VITIS代码:

#include "xparameters.h"
#include "breath_led_ip.h"
#include "xil_io.h"
#include "stdio.h"
#include "sleep.h"
//reg0控制开关reg1控制频率reg2发送接受数据
#define LED_IP_BASEADDR XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDR
#define LED_IP_REG0     BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSET
#define LED_IP_REG1     BREATH_LED_IP_S0_AXI_SLV_REG1_OFFSET //
#define LED_IP_REG2     BREATH_LED_IP_S0_AXI_SLV_REG2_OFFSETint main(){int freq_flag = 0;  //定义频率标志位,用户循环切换呼吸灯的频率int led_status = 0;int data_in = 0;printf("LED USER IP TEST\n");while(1){if(freq_flag == 0){BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x800000ef);freq_flag = 1;}else {BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x8000002f);freq_flag = 0;}//打开呼吸灯开关led_status = BREATH_LED_IP_mReadReg(LED_IP_BASEADDR, LED_IP_REG0);if(led_status == 0){BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,0x00000001);printf("BREATH ON\n");}sleep(5);//关闭呼吸灯开关led_status = BREATH_LED_IP_mReadReg(LED_IP_BASEADDR, LED_IP_REG0);if(led_status == 1){BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,0x00000000);printf("BREATH OFF\n");}sleep(1);data_in = BREATH_LED_IP_mReadReg(LED_IP_BASEADDR, LED_IP_REG2);printf("data_in = %d\n",data_in);}return 0;}

实现打印窗口:(板级验证LED呼吸可变闪烁图不好上传就不放了)

在对工程进行debug的时候系统会莫名其妙的产生错误,导入这个头文件报错:

#include "xparameters.h" 

报错信息如下:

fatal error:xparameters.h:no such file or directory 

报错原因暂时不管,参照网上这位博主可以解决:

Vitis2021.1报错:fatal error: xparameters.h: No such file or directory-CSDN博客

相关文章:

  • Easy系列PLC高速计数器比较指令
  • 跟着文档学Vuex(一):什么是Vuex
  • 小智项目架构分析
  • uniapp实现统一添加后端请求Header方法
  • 如何评价 DeepSeek 的 DeepSeek-V3 模型?
  • OpenAvatarChat要解决UnicodeDecodeError
  • 云服务器主动防御策略与自动化防护(下)
  • MySQL最新版9.3.0安装教程
  • 【C++游戏引擎开发】第28篇:OpenGL异步加载纹理技术详解
  • Python分支结构全面解析与实战应用指南
  • n8n部署docker本地化备份和数据持久化和迁移问题
  • 苍穹外卖10
  • C语言-函数的嵌套调用,链式访问,函数的声明和函数的定义
  • pymsql(SQL注入与防SQL注入)
  • AI大模型:(二)2.4 微调自己的模型
  • astrbot_plugin_composting_bucket开源程序是一个用于降低AstrBot的deepseek api调用费用的插件
  • 机器视觉的坐标标定
  • GCN+PyG 的安装与使用
  • Debian10系统安装,磁盘分区和扩容
  • 英语学习4.28
  • “五一”假期全国口岸日均出入境人员将达215万人次
  • 马上评|演唱会云集,上海如何把“流量”变“留量”
  • 从世界工厂走向全球创新中心,上海车展为何成为全球汽车行业风向标?
  • 海南旅文局通报游客入住酒店港币被调包:成立调查组赴陵水调查
  • 持续更新丨伊朗港口爆炸事件已致561人受伤
  • 巴印在克什米尔发生交火