SoC-按键控制led

这篇具有很好参考价值的文章主要介绍了SoC-按键控制led。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

一、原理图

SoC-按键控制led,FPGA学习,SoC,c,fpga开发

二、工程代码

1.hps_0.h

#ifndef _ALTERA_HPS_0_H_
#define _ALTERA_HPS_0_H_

/*
 * This file was automatically generated by the swinfo2header utility.
 * 
 * Created from SOPC Builder system 'soc_system' in
 * file './soc_system.sopcinfo'.
 */

/*
 * This file contains macros for module 'hps_0' and devices
 * connected to the following masters:
 *   h2f_axi_master
 *   h2f_lw_axi_master
 * 
 * Do not include this header file and another header file created for a
 * different module or master group at the same time.
 * Doing so may result in duplicate macro names.
 * Instead, use the system header file which has macros with unique names.
 */

/*
 * Macros for device 'led_pio', class 'altera_avalon_pio'
 * The macros are prefixed with 'LED_PIO_'.
 * The prefix is the slave descriptor.
 */
#define LED_PIO_COMPONENT_TYPE altera_avalon_pio
#define LED_PIO_COMPONENT_NAME led_pio
#define LED_PIO_BASE 0x0
#define LED_PIO_SPAN 16
#define LED_PIO_END 0xf
#define LED_PIO_BIT_CLEARING_EDGE_REGISTER 0
#define LED_PIO_BIT_MODIFYING_OUTPUT_REGISTER 0
#define LED_PIO_CAPTURE 0
#define LED_PIO_DATA_WIDTH 4
#define LED_PIO_DO_TEST_BENCH_WIRING 0
#define LED_PIO_DRIVEN_SIM_VALUE 0
#define LED_PIO_EDGE_TYPE NONE
#define LED_PIO_FREQ 50000000
#define LED_PIO_HAS_IN 0
#define LED_PIO_HAS_OUT 1
#define LED_PIO_HAS_TRI 0
#define LED_PIO_IRQ_TYPE NONE
#define LED_PIO_RESET_VALUE 0

/*
 * Macros for device 'key_pio', class 'altera_avalon_pio'
 * The macros are prefixed with 'KEY_PIO_'.
 * The prefix is the slave descriptor.
 */
#define KEY_PIO_COMPONENT_TYPE altera_avalon_pio
#define KEY_PIO_COMPONENT_NAME key_pio
#define KEY_PIO_BASE 0x10
#define KEY_PIO_SPAN 16
#define KEY_PIO_END 0x1f
#define KEY_PIO_BIT_CLEARING_EDGE_REGISTER 0
#define KEY_PIO_BIT_MODIFYING_OUTPUT_REGISTER 0
#define KEY_PIO_CAPTURE 0
#define KEY_PIO_DATA_WIDTH 2
#define KEY_PIO_DO_TEST_BENCH_WIRING 0
#define KEY_PIO_DRIVEN_SIM_VALUE 0
#define KEY_PIO_EDGE_TYPE NONE
#define KEY_PIO_FREQ 50000000
#define KEY_PIO_HAS_IN 1
#define KEY_PIO_HAS_OUT 0
#define KEY_PIO_HAS_TRI 0
#define KEY_PIO_IRQ_TYPE NONE
#define KEY_PIO_RESET_VALUE 0

/*
 * Macros for device 'sysid_qsys', class 'altera_avalon_sysid_qsys'
 * The macros are prefixed with 'SYSID_QSYS_'.
 * The prefix is the slave descriptor.
 */
#define SYSID_QSYS_COMPONENT_TYPE altera_avalon_sysid_qsys
#define SYSID_QSYS_COMPONENT_NAME sysid_qsys
#define SYSID_QSYS_BASE 0x20
#define SYSID_QSYS_SPAN 8
#define SYSID_QSYS_END 0x27
#define SYSID_QSYS_ID 2899645186
#define SYSID_QSYS_TIMESTAMP 1653036750


#endif /* _ALTERA_HPS_0_H_ */


2.main.c

/*
 * main.c
 *
 *  Created on: 2022年5月20日
 *      Author: stark-lin
 */
//gcc标准头文件
#include <stdio.h>//标准输入输出
#include <unistd.h>//系统调用
#include <fcntl.h>//是unix标准中通用的头文件, open,fcntl,shutdown,unlink,fclose
#include <sys/mman.h>//mmap所在头文件

//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_RGES_BASE (ALT_STM_OFST)//HPS外设地址段基地址
#define HW_RGES_SPAN (0x04000000)//HPS外设地址空间64MB
#define HW_RGES_MASK (HW_RGES_SPAN - 1)//HPS外设地址掩码

static volatile unsigned long *led_pio_base = NULL;//led地址指针,volatile避免优化
static volatile unsigned long *key_pio_base = NULL;//按键地址指针
int fpga_init(int *virtual_base){
	int fd;
	void *per_virtual_base;
	//打开mmu
	fd = open("/dev/mem", (O_RDWR | O_SYNC));
	if(fd == -1){
		printf("ERROR: open is failed\n");
		exit(0);
	}
	//外设地址映射到用户空间,mmap()
	per_virtual_base = mmap(NULL, HW_RGES_SPAN, (PROT_READ | PROT_WRITE), MAP_SHARED,
			fd, HW_RGES_BASE);
	if(per_virtual_base == MAP_SHARED){
		printf("ERROR: mmap is failed\n");
		close(fd);
	}
	//外设地址 = 虚拟地址+外设偏移地址(mm_bridge + 桥上偏移地址)
	led_pio_base = per_virtual_base + ((unsigned long)(ALT_LWFPGASLVS_OFST + LED_PIO_BASE) & (unsigned long)(HW_RGES_MASK));
	key_pio_base = per_virtual_base + ((unsigned long)(ALT_LWFPGASLVS_OFST + KEY_PIO_BASE) & (unsigned long)(HW_RGES_MASK));
	*virtual_base = per_virtual_base;
	return fd;
}

int main(){
	int virtual_base;
	int fd;
	fd = fpga_init(&virtual_base);
	//操作外设
	while(1){
//		*(led_pio_base + 0) = ~(*(key_pio_base + 0)) & 0x03;
		if(*(key_pio_base + 0) == 0x0)
		{
			*(led_pio_base + 0) = 0x0f;
		}
		else
		{
			*(led_pio_base + 0) = 0x00;
		}
	}
	if(munmap(virtual_base, HW_RGES_SPAN) == -1){
		printf("ERROR: munmap is failed\n");
		close(fd);
	}
	//关闭mmu
	close(fd);
	return 0;
}

总结

SoC文章来源地址https://www.toymoban.com/news/detail-686352.html

到了这里,关于SoC-按键控制led的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA学习—按键控制

    前段时间,学校事情太多,还有忙着比赛,没有更新,现在也在准备fpga创新设计大赛,有空就继续更新。 我使用的是vivado,在编程部分应该就IP核的创建和quartusii不一样,模块代码是可以通用的。后面也会放出工程链接,也会有quartusii和vivado的工程。附带modelsim的仿真文件。 首

    2023年04月11日
    浏览(26)
  • FPGA 学习笔记:Verilog 实现LED流水灯控制

    在初步了解 Xilinx Vivado 的使用后,开启了FPGA Hello World 程序:LED 流水灯控制 在嵌入式MCU中,流水灯需要延时来实现,FPGA的延时,使用外部晶振来实现 实现 3个 LED 流水灯控制,也就是循环依次点亮, LED 低电平亮, 高电平灭,FPGA 有一个40MHz的外部晶振,作为系统时钟输入开

    2023年04月08日
    浏览(31)
  • FPGA/SoC控制机械臂

    机器人技术处于工业 4.0、人工智能和边缘革命的前沿。让我们看看如何创建 FPGA 控制的机器人手臂。 机器人技术与人工智能和机器学习一起处于工业 4.0 和边缘革命的最前沿。 因此,我认为创建一个基础机器人手臂项目会很有趣,我们可以回过头来添加几个功能,例如: 逆

    2024年04月17日
    浏览(22)
  • FPGA实战-----点灯大师(1)led灯闪烁流水跑马+按键

    FPGA实战 用verliog语言点亮FPGA开发板上的led灯是最最最最最基础的操作。 这里用的EP4CE6F17C8开发板,上边一共有四个led灯珠,可以实现简单的例如4个全亮,流水灯,跑马灯以及相比之下难了一点的呼吸灯等等等等效果。 本文最终目的就是实现 用按键切换led灯的运动模式 。做

    2024年02月04日
    浏览(35)
  • FPGA在校学习记录系列---实验4不同状态的LED+开发板(Verilog HDL)

    此系列记录FPGA在学校的学习过程。 FPGA系列 需要用到的软硬件: 软件:Quartus II 15.0 (64-bit) 硬件: 5CEBA4F23C7芯片 链接: FPGA在校学习记录系列—新建一个FPGA工程编写程序并仿真(Verilog HDL) 创建的工程名字为:LED (这次不用仿真,直接用开发板验证) 编译文件 按键资源:

    2024年04月09日
    浏览(37)
  • FPGA 按键控制串口发送

    消抖时间一般为10ms,我使用的板子是ACX720,晶振为50MHZ,20ns为一周期。 状态机 模块设计 设计文件 仿真验证 **注意:**电平信号的传输线中有一个参考电平线(一般是GND),然后信号线上的信号值是由信号线电平和参考电平线的电压差决定。 所以我们一定要养成模块之间共地的

    2024年04月11日
    浏览(27)
  • SOC FPGA介绍及开发设计流程

    目录 一、SoC FPGA简介 二、SoC FPGA开发流程 2.1 硬件开发 2.2 软件开发          SOC FPGA是在FPGA架构中集成了基于ARM的硬核处理器系统(HPS),包括处理器、外设和存储器控制器。 相较于传统的仅有ARM处理器或 FPGA 的嵌入式芯片,SOC FPGA既拥有ARM处理器灵活高效的数据运算和事务

    2024年02月15日
    浏览(33)
  • 按键控制流水灯方向——FPGA

    环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE6F17C8 要求: 按键1按下,流水灯从右开始向左开始流动,按键2按下,流水灯从左开始向右开始流动,按键3按下LED每隔1s进行亮灭,按键4按下LED常亮。 “自锁”是指开关能通过锁定机构保持某种状态(通或断),“轻触”是说明操

    2024年02月07日
    浏览(36)
  • 摁键控制LED灯(FPGA)

    提示:以下是本篇文章正文内容,下面案例可供参考 1.无按键按下时,LED灯全灭; 2.按键1按下时,LED灯显示.自右向左的流水效果; 3.按键2按下时,LED灯显示自左向右的流水效果; 4.按键3按下时,四个LED灯同时闪烁 5.按键4按下时,LED灯全亮 如图1所示,本实验使用四个按键开

    2024年02月08日
    浏览(28)
  • FPGA验证学习(五):SoC的总线架构

    SoC的发展离不开应用领域的需求牵引。在根据需求进行片上系统设计时,不仅要考虑SoC本身,而且还要考虑SoC应用产品的需求,重点关注特定IP获取和系统总体结构(性能、功耗、成本、可靠性、适用性)的评估。 为了提高开发模块的重复利用率,降低开发成本, 用户采用

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包