资讯详情

【SOC FPGA】外设KEY点LED

文章目录

  • 一、添加LED和KEY的pio外设
    • 1.黄金参考工程
    • 2、配置pio外设
      • (1)添加pio_KEY
      • (2)添加pio_LED
    • 3、修改Verilog代码
    • 4、全编译
  • 二、生成相应的文件,转移到sd卡内
    • 1、更新dtb文件
    • 2、更新rbf文件
    • 4、替换sd卡中的内容
  • 三、编写C代码实现功能
    • 1、C工程准备
    • 2、C语言实现按键点灯
    • 3、效果演示

一、添加LED和KEY的pio外设

1、黄金参考工程

在这里插入图片描述

2、配置pio外设

打开Plaform Designer,右侧搜索pio并双击。

(1)添加pio_KEY

我们使用key1和key所以选两位。 连线:

(2)添加pio_LED

cyclone Ⅴ有四个板LED,所以选4位。 连线:

默认给led和key分配地址为0,因此点击分配地址可以解决错误。

3、修改Verilog代码

点击连接完成后Genrate HDL,自动实例化。 在top在模块中定义接口并实例化

4、全编译

完美无误

二、生成相应的文件,转移到sd卡内

1、更新dtb文件

打开SOC…Shell 进入黄金工程目录:

make dtb 

更新dtb文件 查看文件时间是否成功更新

2、更新rbf文件

运行命令:

cd output_files/ ./sof_to_rbf.bat 

查看文件时间是否成功更新

3、更新hps_0.h文件 运行:

./generate_hps_qsys_header.sh 

查看文件时间是否成功更新

4、替换sd卡中的内容

三、编写C代码实现功能

打开eclipse

1、C工程准备

新建一个Cproject 导入库文件:

黄金工程hps_0.h放入工程中

2、C语言实现按键点灯

代码实现:

/* * pio_led.c * * Created on: 2022年7月19日 * Author: 哈哈 */   //标准头文件 #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h>  //HPS制造商提供的底层定义头文件 #define soc_cv_av //开发平台Cyclone V 系列  #include "hwlib.h" #include "socal/socal.h" #include "socal/hps.h"  //具体用户HPS 与应用系统相关的硬件描述头文件 #include "hps_0.h"  #define HW_REGS_BASE (ALT_STM_OFST) //HPS外设地址段基地址
#define HW_REGS_SPAN (0x04000000) //HPS外设地址段地址空间 64MB大小
#define HW_REGS_MASK (HW_REGS_SPAN - 1) //HPS外设地址段地址掩码
static unsigned long *led_pio_virtual_base =NULL ;
static unsigned long *key_pio_virtual_base = NULL;
int led_init(int *virtual_base)
{ 
        
	int fd;
	void *perph_virtual_base;
		//1.open打开
		fd = open("/dev/mem",(O_RDWR | O_SYNC));
		if(fd == -1)
		{ 
        
			printf("open failed..\n");
			return 1;
		}
		//mmap 映射虚拟地址
		perph_virtual_base = mmap(NULL,HW_REGS_SPAN, ( PROT_READ | PROT_WRITE ),MAP_SHARED,fd,HW_REGS_BASE);

		led_pio_virtual_base = perph_virtual_base +
				(((unsigned)(ALT_LWFPGASLVS_OFST + PIO_LED_BASE))&(unsigned)(HW_REGS_MASK));
		key_pio_virtual_base = perph_virtual_base +
				(((unsigned)(ALT_LWFPGASLVS_OFST + PIO_KEY_BASE))&(unsigned)(HW_REGS_MASK));
				*virtual_base = perph_virtual_base;
				return fd;
}

int main()
{ 
        
	int fd;
	int i=0;
	int virtual_base;
	fd = led_init(&virtual_base);

	while(1)
	{ 
        
		        if(*(key_pio_virtual_base + 0) == 0x01)
				{ 
        
					*(led_pio_virtual_base + 0) = 0x01;
				}
				else if(*(key_pio_virtual_base + 0) == 0x02)
				{ 
        
					*(led_pio_virtual_base + 0) = 0x02;
				}

		/**(led_pio_virtual_base +0) = 1<<i; i=(i+1)%4; sleep(1); printf("LIGHT:%d ON\n",i);*/

	}

	//取消映射
if(munmap(virtual_base,HW_REGS_SPAN) == -1)
	{ 
        
		printf("fail\n");
	}
   close(fd);
	return 0;
}

3、效果演示

FPGA之SOC按键点灯

标签: hps拉绳位稳传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台