当前位置: 首页 > 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博客

http://www.xdnf.cn/news/202249.html

相关文章:

  • 【Java学习笔记】传参机制
  • Vue 2 中 Vue 实例对象(vm)的所有核心方法,包含完整示例、使用说明及对比表格
  • 【Java】 使用 HTTP 响应状态码定义web系统返回码
  • 继承(c++版 非常详细版)
  • linux 环境下 c++ 程序打印 core dump 信息
  • 滑动窗口模板
  • 【基础知识】常见的计算公式(一)
  • java借助NIO、链表、跳表模拟实现redis
  • CDGP|如何建立高效的数据治理团队?
  • 【强化学习系列】贝尔曼方程
  • mysql模糊多次OR查询某一个字段,针对这个字段进行查询分组
  • Marin说PCB之----板材的替换注意事项
  • vite创建vue3项目并进行配置
  • DIFY教程第三弹:构建一个智能生成图片的Agent
  • 【分布式系统中的“瑞士军刀”_ Zookeeper】三、Zookeeper 在实际项目中的应用场景与案例分析
  • openGauss DB4AI与scikit-learn模块对比探究
  • 基于强化学习的用于非刚性图像配准的引导式超声采集|文献速递-深度学习医疗AI最新文献
  • HTML标记语言_@拉钩教育【笔记】
  • 座舱系统香氛模块概念
  • 【Linux】第十一章 管理网络
  • COMEM光纤温度传感器Optocon:可靠稳定的温度监测方案
  • 2025三掌柜赠书活动第十五期:高并发系统:设计原理与实践
  • 跨语言哈希一致性:C# 与 Java 的 MD5 之战?
  • PHP经验笔记
  • 大模型相关问题解答
  • 记一次奇妙的Oracle注入绕WAF之旅
  • vue-router: vue3路由管理器
  • 新时代下的存储过程开发实践与优化
  • AI大模型入门指南——概念篇
  • 语音合成之九注意力机制在TTS中的应用:让模型“听懂”文本