soc操作流水灯

在ip catalog里面搜索pio
在这里插入图片描述
设置,因为LED有四个所以输出是四位
在这里插入图片描述
连接线,注意这里的s1接到m0
最后要引出led
在这里插入图片描述
generate导出
在这里插入图片描述
在顶层文件添加led(大写是因为黄金工程底层引脚配置的大写)
在这里插入图片描述
在这里插入图片描述
更新rbf
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

更新dtb在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
打开eclipse
在这里插入图片描述

新建工程在eclipse中
在这里插入图片描述
在这里插入图片描述

//gcc标准头文件
#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外设地址段地址掩码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得到虚拟地址

int led_init(int *virtual_base){
	int fd;

	//1.使能mmu
	void *periph_virtual_base;//外设空间虚拟地址
	if ((fd = open("/dev/mem",(O_RDWR|O_SYNC)))==-1){
		printf("Can't open mmu……\n");
		return 1;
	}
	//2.映射外设地址段到用户空间
	periph_virtual_base=mmap(NULL,HW_REGS_SPAN,(PROT_READ|PROT_WRITE),MAP_SHARED,fd,HW_REGS_BASE);
	//3.加上外设地址段的虚拟地址、外设基于lw_axi_master桥的偏移地址
	led_pio_virtual_base= periph_virtual_base +
			((unsigned)(ALT_LWFPGASLVS_OFST+PIO_LED_BASE)&(unsigned)(HW_REGS_MASK));//桥的偏移地址

	*virtual_base = periph_virtual_base;
	return fd;
}

主函数

int main()
{
	int fd;
	int virtual_base;
	int i;

	fd = led_init(&virtual_base);
	while(1)
	{
		*(led_pio_virtual_base + 0)=0x01;
		sleep(1);
		for(i=0;i<3;i++)
		{
			*(led_pio_virtual_base + 0)=*(led_pio_virtual_base + 0) << 1;
			sleep(1);
		}
	}

	if(munmap(virtual_base,HW_REGS_SPAN) == -1)
	{
		printf("Can't close mmu……\n");
		return 1;
	}
	//关闭mmu;
	close(fd);
	return 0;
}

soc操作流水灯

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值