文章目录

  • 一、SoC 外设简介
  • 二、SoC led原理图
  • 三、工程代码

一、SoC 外设简介

fpga与hps交互

axi与avalon总线


Avalon总线接口

  1. 流接口
  2. mm接口
  3. slave从接口

一般SoC使用的是mm slave接口

avalon-mm系统


ip外设


外设访问流程

1、获取总线虚拟地址
2、计算外设地址
3、映射外设接口
4、操作
5、关闭虚拟地址

二、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 '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 0x10
#define SYSID_QSYS_SPAN 8
#define SYSID_QSYS_END 0x17
#define SYSID_QSYS_ID 2899645186
#define SYSID_QSYS_TIMESTAMP 1653029485#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>//unix std
#include <stdlib.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避免优化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_FAILED){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));*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) = 0x000000ff;sleep(2);*(led_pio_base + 0) = 0x00000000;sleep(2);}//取消地址映射if(munmap(&virtual_base, HW_RGES_SPAN) == -1){printf("ERROR: munmap is failed\n");close(fd);}//关闭mmuclose(fd);return 0;
}

SoC-点亮led灯相关推荐

  1. 61-20210407华为海思Hi3516DV300的linux系统下控制GPIO口(标准linux模式点亮LED灯)

    61-20210407华为海思Hi3516DV300的linux系统下控制GPIO口(标准linux模式点亮LED灯) 2021/4/7 15:13 https://xueqiu.com/797071 ...

  2. 第5章 用树莓派点亮LED灯

    用树莓派点亮一个LED灯是非常简单的事情,但却非常重要,是利用GPIO控制外部硬件设备的基础,机器人的大部分功能都可以通过操纵GPIO来实现的.换句话说,能控制一个LED灯,就能让机器人动起来.本章将 ...

  3. 和12岁小同志搞创客开发:手撕代码,点亮LED灯

    目录 1.Arduino编程架构 2.点亮LED灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_381069 ...

  4. STM32F 103C8T6开发板 点亮LED灯

    每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...

  5. STC89C52单片机 点亮LED灯

    点亮LED灯 一.什么是LED LED全称为半导体发光二极管,采用半导体材料制成的,以直接将电能转化为光能,电号转换成光信号的发光器件:其特点是功耗低.高亮度.色彩艳丽.坑振动.寿命长(正常发光8-1 ...

  6. Raspberry PI 系列 —— 裸机点亮LED灯

    Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...

  7. 蓝桥杯小白系列之汇编点亮led灯

    蓝桥杯小白系列之汇编点亮led灯 1.源代码 2.逐条分析 (1)ORG 0000H (2)START: 伪指令,编译器可识别,单片机不可识别,可以随便起. (3)蜂鸣器设置 蓝桥板插电以后蜂鸣器常会 ...

  8. 【STM32】STM32CubeMX教程二--基本使用(新建工程点亮LED灯)

    前言 在配置好CubeMX之后,就是新建工程的开始了,那么首先我们需要一些准备,本片博客我们会很详细的介绍STM32CubeMx的基本使用和如何创建一个新的工程并且点亮LED灯  面向初学者   如果 ...

  9. STM8学习笔记---点亮LED灯

    对单片机操作时一般有三个步骤,1.系统时钟选择.2.单片机外设初始化.3主程序编写. 同样要点亮LED灯时,也要按照这个步骤来. 首先选择系统时钟,打开STM8S中文参考手册,找到时钟寄存器 可以看到 ...

  10. 51单片机点亮LED灯以及实现2盏LED灯的交替闪烁

    点亮LED灯,根据单片机原理图 将LED灯1和LED灯2介入单片机的口设为低电平即可 代码如下: #include "reg52.h" sbit led1= P3^7; void ...

最新文章

  1. matlab cat
  2. (王道408考研操作系统)第四章文件管理-第一节9:文件系统的层次结构
  3. WPF基础学习笔记(一)Dependency Object 和 Dependency Property
  4. 素材诊断分析助手_资深优化师告诉你广告投放素材都在哪找?(国内篇)
  5. 轻松实现函数计算文件上传下载
  6. Socket、send/recv的循环发送和接收、缓冲区、阻塞
  7. ubuntu xampp进入mysql安全模式
  8. 查看已安装java插件_记录下eclipse下的插件安装,查看及删除方式
  9. 创建dataframe_Spark原理与实战(五) Spark核心数据抽象DataFrame
  10. android tab 选中变色,Android 底部导航栏的Tab选中不变色?
  11. 《圆明园的毁灭》教学设计方案
  12. 高速系统设计自学笔记——信号完整性6
  13. IDR:通过迭代数据细化的自我监督图像去噪
  14. 进制为2的10次方的世界
  15. 浙江大学计算机2020分数线,2021年浙江大学录取分数线(含2019-2020分数线)
  16. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.9 案例研究...
  17. 解决container_linux.go:262: starting container process caused:
  18. Hack The Box——Omni
  19. 阿里巴巴港股上市:总市值反超腾讯
  20. 电商系统中的SPU和SKU

热门文章

  1. The baby-bust economy “婴儿荒”经济 | 经济学人20230603版社论双语精翻
  2. 微信公众号开发-php-sdk接口
  3. 2022年rust杂记
  4. mysql router安装教程_3.(MySQL Router+MGR)MySQL Router安装与配置
  5. 38.【C++ 虚函数 纯虚函数 虚基类 (最全详解)】
  6. 循环结构(一) for的格式及用法
  7. Linux和Windows系统下:安装Anaconda、Paddle、tensorflow、pytorch,GPU[cuda、cudnn]、CPU安装教学,以及查看CPU、GPU内存使用情况
  8. 微信小程序|使用小程序实现通讯录功能,首字母快捷导航
  9. sentinel下载安装
  10. Python 爬取ts流视频