用户自界说IP核——ZYNQ学习条记6

[复制链接]
发表于 2025-12-25 12:07:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、试验使命

        通过自界说一个 LED IP 核,通过 PS 端的步调来控制底板上 PL 端 LED1 出现呼吸
灯的效果,而且 PS 可以通过 AXI 接口来控制呼吸灯的开关和呼吸的频率。

 二、创建IP核






















三、创建工程,调用IP


  1. #include "stdio.h"
  2. #include "xparameters.h"
  3. #include "breath_led_ip.h"
  4. #include "xil_io.h"
  5. #include "sleep.h"
  6. #define LED_IP_BASEADDR         XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDR
  7. #define LED_IP_REG0                        BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSET
  8. #define LED_IP_REG1                        BREATH_LED_IP_S0_AXI_SLV_REG1_OFFSET
  9. int main(){
  10.         int freq_flag = 0;
  11.         int led_status = 0;
  12.         while(1){
  13.                 if(freq_flag == 0){
  14.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000001);
  15.                         freq_flag = 1;
  16.                 }else{
  17.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000009);
  18.                         freq_flag = 0;
  19.                 }
  20.                 led_status = BREATH_LED_IP_mReadReg(LED_IP_BASEADDR,LED_IP_REG0);
  21.                 if(led_status == 0){
  22.                 //打开呼吸灯开关
  23.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,1);
  24.                         sleep(5);
  25.                 }
  26.                 led_status = BREATH_LED_IP_mReadReg(LED_IP_BASEADDR,LED_IP_REG0);
  27.                 if(led_status == 1){
  28.                 //关闭呼吸灯开关
  29.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,0);
  30.                         sleep(1);
  31.                 }
  32.         }
  33.         return 0;
  34. }
复制代码
四、上板验证

 

五、对以有IP核举行编译











重新天生bit流与硬件信息
更改vitis平台硬件信息见xilinx vitis 更换硬件平台——ZYNQ学习条记5_vitis升级硬件平台-CSDN博客
  1. #include "stdio.h"
  2. #include "xparameters.h"
  3. #include "breath_led_ip.h"
  4. #include "xil_io.h"
  5. #include "sleep.h"
  6. #define LED_IP_BASEADDR         XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDR
  7. #define LED_IP_REG0                        BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSET
  8. #define LED_IP_REG1                        BREATH_LED_IP_S0_AXI_SLV_REG1_OFFSET
  9. #define LED_IP_REG2                        BREATH_LED_IP_S0_AXI_SLV_REG2_OFFSET
  10. int main(){
  11.         int freq_flag = 0;
  12.         int led_status = 0;
  13.         int test_data = 0;
  14.         while(1){
  15.                 if(freq_flag == 0){
  16.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000001);
  17.                         freq_flag = 1;
  18.                 }else{
  19.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000009);
  20.                         freq_flag = 0;
  21.                 }
  22.                 led_status = BREATH_LED_IP_mReadReg(LED_IP_BASEADDR,LED_IP_REG0);
  23.                 if(led_status == 0){
  24.                 //打开呼吸灯开关
  25.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,1);
  26.                         sleep(3);
  27.                 }
  28.                 led_status = BREATH_LED_IP_mReadReg(LED_IP_BASEADDR,LED_IP_REG0);
  29.                 if(led_status == 1){
  30.                 //关闭呼吸灯开关
  31.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,0);
  32.                         sleep(1);
  33.                 }
  34.                 test_data = BREATH_LED_IP_mReadReg(LED_IP_BASEADDR,LED_IP_REG2);
  35.                 if(test_data != 0 ){
  36.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,0x80000005);
  37.                         BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG0,1);
  38.                         sleep(8);
  39.                         test_data = 0;
  40.                 }
  41.         }
  42.         return 0;
  43. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表