文章目录

  • 前言
  • 一、原理图
  • 二、工程代码
  • 总结

前言

一、原理图

二、工程代码

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;//打开mmufd = 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);}//关闭mmuclose(fd);return 0;
}

总结

SoC

SoC-按键控制led相关推荐

  1. FPGA(1)基础入门 -- 按键控制led灯

    目录 效果说明 1.配置输入输出变量 2.变量赋值 3.配置引脚(输入输出变量) 代码 效果说明 key1按键按下,led1被点亮. key2按键按下,led2被点亮. 1.配置输入输出变量 inpu ...

  2. led计数电路实验报告_「正点原子FPGA连载」第八章 按键控制LED灯实验

    1)实验平台:正点原子开拓者FPGA开发板 2)本实例源码下载:请移步正点原子官网 第八章 按键控制LED灯实验 按键是常用的一种控制器件.生活中我们可以见到各种形式的按键,由于其结构简单,成本低廉等 ...

  3. STM32按键控制led四种方法

    文章目录 回顾按键电路 按照之前文章方法在工程文件下加入Hardware中的key.c和key.h 打开固件库用户手册查询io读取相关的函数 第一种方式实现按键控制 第二种方式实现按键控制led 第三 ...

  4. 8个独立按键控制LED

    8个独立按键控制LED

  5. 按键控制LED实现启动、停止按钮

    按键控制LED实现启动.停止按钮

  6. 简单的按键控制LED

    简单的按键控制LED

  7. petalinux zynq spi_ZYNQ 系列 01 | PL 实现按键控制 LED(1)

    注:本篇文章由[开源骚客:OpenSoc]公众号首发,现转载至头条号. 新的开始,这一篇文章,就算是使用 Vitis 开发 ZYNQ 的第一篇文章吧. 计划把 ZYNQ 开发写成一个系列,所使用的的软 ...

  8. 基于Verilog的按键控制LED灯

    按键控制LED灯 原理图 程序设计 `timescale 1ns / 1psmodule key_led( input sys_clk, input sys_rst_n, input [3:0] ke ...

  9. 单片机按键控制数码管c语言程序,基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文).doc...

    基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文) 物理与电子工程学院2014级课程设计 PAGE IV 物理与电子工程学院 <单片机原理与接口技术> 课程设计报告书 ...

  10. STM32学习:按键控制LED

    STM32学习:按键控制LED 文章目录 前言 一.所用知识点复习 1.stm32工作模式(*注意上下拉输入的区别*) 2.按键抖动与常见按键接法 按键抖动: 按键消抖: 常见按键接法: 3.GPIO ...

最新文章

  1. tensorflow官方文档_Tensorflow 2.0 Preview 官方文档
  2. 向量余弦值python_向量/矩阵的余弦值打印(元素明智的操作) 使用Python的线性代数
  3. jmeter找不到java_Windows下Jmeter安装出现Not able to find Java executable or version问题解决方案...
  4. arm shellcode 编写详析2
  5. Javaweb MVC设计模式、Modle发展史、项目分层和三层架构
  6. c语言用switch计算器,超级新手,用switch写了个计算器程序,求指导
  7. 6.042 Mathematics for Computer Science
  8. 【英语学习】【Daily English】U11 Work L04 Can you keep it a secret?
  9. python 重启电脑_如何在系统重启后恢复Python脚本?
  10. Android 系统开发_核心技术篇 -- 深入钻研 JNI
  11. 多线程之生产者与消费者问题
  12. 华三模拟器:路由备份路由聚合
  13. 76.0.3809.100版本的谷歌浏览器对应能用的chromedriver版本
  14. 80C51单片机指令寻址方式
  15. 长江水质的评价和预测——主要污染地区
  16. Git push的常见用法
  17. 根据美光内存颗粒上的编码查询对应型号
  18. 客厅装修应注意空间的布局
  19. 乔布斯 1973 年求职申请表曝光,拍出22万 美元高价
  20. c# 关键字:using

热门文章

  1. hdu 1028 母函数 模版题
  2. 华为鸿蒙应用名称填什么,报名鸿蒙系统应用名称什么填
  3. java静态多态实例,java多态
  4. 【稳定性day6】大众点评高可用的方法与实践
  5. DNS劫持解决办法?
  6. Android应用开发揭秘(奋斗之小鸟)_PDF 电子书
  7. Uncaught SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse (<anonymous>) a
  8. ssm+jsp计算机毕业设计城市垃圾桶管理系统的设计与实现026t5(程序+LW+源码+远程部署)
  9. 【linux】ln命令 - 创建和删除软、硬链接
  10. [转]一篇关于机会成本的文章