SoC-按键控制led
文章目录
- 前言
- 一、原理图
- 二、工程代码
- 总结
前言
一、原理图
二、工程代码
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相关推荐
- FPGA(1)基础入门 -- 按键控制led灯
目录 效果说明 1.配置输入输出变量 2.变量赋值 3.配置引脚(输入输出变量) 代码 效果说明 key1按键按下,led1被点亮. key2按键按下,led2被点亮. 1.配置输入输出变量 inpu ...
- led计数电路实验报告_「正点原子FPGA连载」第八章 按键控制LED灯实验
1)实验平台:正点原子开拓者FPGA开发板 2)本实例源码下载:请移步正点原子官网 第八章 按键控制LED灯实验 按键是常用的一种控制器件.生活中我们可以见到各种形式的按键,由于其结构简单,成本低廉等 ...
- STM32按键控制led四种方法
文章目录 回顾按键电路 按照之前文章方法在工程文件下加入Hardware中的key.c和key.h 打开固件库用户手册查询io读取相关的函数 第一种方式实现按键控制 第二种方式实现按键控制led 第三 ...
- 8个独立按键控制LED
8个独立按键控制LED
- 按键控制LED实现启动、停止按钮
按键控制LED实现启动.停止按钮
- 简单的按键控制LED
简单的按键控制LED
- petalinux zynq spi_ZYNQ 系列 01 | PL 实现按键控制 LED(1)
注:本篇文章由[开源骚客:OpenSoc]公众号首发,现转载至头条号. 新的开始,这一篇文章,就算是使用 Vitis 开发 ZYNQ 的第一篇文章吧. 计划把 ZYNQ 开发写成一个系列,所使用的的软 ...
- 基于Verilog的按键控制LED灯
按键控制LED灯 原理图 程序设计 `timescale 1ns / 1psmodule key_led( input sys_clk, input sys_rst_n, input [3:0] ke ...
- 单片机按键控制数码管c语言程序,基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文).doc...
基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文) 物理与电子工程学院2014级课程设计 PAGE IV 物理与电子工程学院 <单片机原理与接口技术> 课程设计报告书 ...
- STM32学习:按键控制LED
STM32学习:按键控制LED 文章目录 前言 一.所用知识点复习 1.stm32工作模式(*注意上下拉输入的区别*) 2.按键抖动与常见按键接法 按键抖动: 按键消抖: 常见按键接法: 3.GPIO ...
最新文章
- tensorflow官方文档_Tensorflow 2.0 Preview 官方文档
- 向量余弦值python_向量/矩阵的余弦值打印(元素明智的操作) 使用Python的线性代数
- jmeter找不到java_Windows下Jmeter安装出现Not able to find Java executable or version问题解决方案...
- arm shellcode 编写详析2
- Javaweb MVC设计模式、Modle发展史、项目分层和三层架构
- c语言用switch计算器,超级新手,用switch写了个计算器程序,求指导
- 6.042 Mathematics for Computer Science
- 【英语学习】【Daily English】U11 Work L04 Can you keep it a secret?
- python 重启电脑_如何在系统重启后恢复Python脚本?
- Android 系统开发_核心技术篇 -- 深入钻研 JNI
- 多线程之生产者与消费者问题
- 华三模拟器:路由备份路由聚合
- 76.0.3809.100版本的谷歌浏览器对应能用的chromedriver版本
- 80C51单片机指令寻址方式
- 长江水质的评价和预测——主要污染地区
- Git push的常见用法
- 根据美光内存颗粒上的编码查询对应型号
- 客厅装修应注意空间的布局
- 乔布斯 1973 年求职申请表曝光,拍出22万 美元高价
- c# 关键字:using
热门文章
- hdu 1028 母函数 模版题
- 华为鸿蒙应用名称填什么,报名鸿蒙系统应用名称什么填
- java静态多态实例,java多态
- 【稳定性day6】大众点评高可用的方法与实践
- DNS劫持解决办法?
- Android应用开发揭秘(奋斗之小鸟)_PDF 电子书
- Uncaught SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse (<anonymous>) a
- ssm+jsp计算机毕业设计城市垃圾桶管理系统的设计与实现026t5(程序+LW+源码+远程部署)
- 【linux】ln命令 - 创建和删除软、硬链接
- [转]一篇关于机会成本的文章