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

用户自定义IP核——ZYNQ学习笔记6

一、试验任务

        通过自定义一个 LED IP 核,通过 PS 端的程序来控制底板上 PL 端 LED1 呈现呼吸
灯的效果,并且 PS 可以通过 AXI 接口来控制呼吸灯的开关和呼吸的频率。

 二、创建IP核

三、创建工程,调用IP

#include "stdio.h"
#include "xparameters.h"
#include "breath_led_ip.h"
#include "xil_io.h"
#include "sleep.h"

#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

int main(){
	int freq_flag = 0;
	int led_status = 0;
	while(1){
		if(freq_flag == 0){
			BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000001);
			freq_flag = 1;
		}else{
			BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000009);
			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,1);
			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,0);
			sleep(1);
		}
	}
	return 0;
}

四、上板验证

 

五、对以有IP核进行编译

重新生成bit流与硬件信息

更改vitis平台硬件信息见xilinx vitis 更换硬件平台——ZYNQ学习笔记5_vitis升级硬件平台-CSDN博客

#include "stdio.h"
#include "xparameters.h"
#include "breath_led_ip.h"
#include "xil_io.h"
#include "sleep.h"

#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_OFFSET

int main(){
	int freq_flag = 0;
	int led_status = 0;
	int test_data = 0;
	while(1){

		if(freq_flag == 0){
			BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000001);
			freq_flag = 1;
		}else{
			BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000009);
			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,1);
			sleep(3);
		}

		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,0);
			sleep(1);
		}

		test_data = BREATH_LED_IP_mReadReg(LED_IP_BASEADDR,LED_IP_REG2);
		if(test_data != 0 ){
			BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000005);
			BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,1);
			sleep(8);
			test_data = 0;
		}
	}
	return 0;
}

http://www.kler.cn/a/397051.html

相关文章:

  • 【网络云计算】2024第46周周考-磁盘管理的基础知识-RAID篇
  • 一文说清C++类型转换操作符(cast operator)
  • MongoDB分布式集群搭建----副本集----PSS/PSA
  • 【环境配置】macOS配置jdk与maven
  • 新版Apache tomcat服务安装 Mac+Window双环境(笔记)
  • 【MySQL 保姆级教学】事务的自动提交和手动提交(重点)--上(13)
  • [JAVAEE] 网络编程
  • Pytest从入门到精通
  • pytest结合allure做接口自动化
  • element ui 搜索框中搜索关键字标红展示
  • 阿里巴巴最新“SpringCloudAlibaba 学习笔记”开源。
  • 【Cesium】自定义材质,添加带有方向的滚动路线
  • Python毕业设计选题:基于BS架构的在线学习与推荐系统的设计与实现-django
  • 51单片机应用开发(进阶)---定时器应用(电子时钟)
  • JVM垃圾回收详解(重点)
  • LSTM(长短期记忆网络)详解
  • 【jvm】一个空Object对象的占多大空间
  • 第 16 章 - Go语言 通道(Channel)
  • 用魔方做存储器
  • Go语言中AES加密算法的实现与应用
  • 通过物流分拣系统来理解RabbitMQ的消息机制
  • 《网络硬件设备完全技术宝典》
  • AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码
  • 前端文件优化
  • Linux中虚拟内存详解
  • Java项目实战II基于微信小程序的个人行政复议在线预约系统微信小程序(开发文档+数据库+源码)