NIOS II实现LED流水灯以及串口输出(DE2-115开发板)

NIOS II实现LED流水灯以及串口输出(DE2-115开发板)

  • 前言
  • 什么是Qsys?
  • 什么是NIOSII?
  • 注意事项
    • 1、管脚配置
    • 2、配置NIOSII时的连接
    • 3、注意中断配置好后是这样的
    • 4、注意名称的配置
    • 5、设置双功能引脚
  • NIOS II的报错
  • 代码以及效果演示
    • 流水灯
    • 输出到电脑串口助手

前言

具体的软件和硬件配置流程看下方的博客很详细,我主要讲一下这些博客没说到的部分和我做的过程中遇到的一些错误,看了下面的博客做不出来可以看我的补充
https://blog.csdn.net/qq_43279579/article/details/115953871
https://blog.csdn.net/qq_57160761/article/details/129989171
https://blog.csdn.net/weixin_54435584/article/details/130025896
https://www.bilibili.com/video/BV1Lc411y7o6/

什么是Qsys?

Qsys(前身为 SOPC Builder)是一种用于硬件系统设计的集成开发环境(IDE),由英特尔(Intel)提供。它是一种可视化工具,用于在FPGA(可编程逻辑器件)中构建和配置嵌入式系统的硬件组件。

通过 Qsys,开发人员可以通过图形界面进行硬件组件的选择、连接和配置,而无需手动编写HDL(硬件描述语言)代码。Qsys 提供了丰富的硬件组件库,其中包括处理器核、存储器控制器、外设接口等,开发人员可以根据项目需求选择合适的组件。

Qsys中的硬件组件库中包含了NIOS II处理器核,因此可以在Qsys中选择和配置NIOS II作为嵌入式系统的处理器。通过Qsys,开发人员可以将NIOS II与其他硬件组件进行连接和集成,构建一个完整的嵌入式系统。Qsys会自动生成与NIOS II相关的硬件描述语言代码,并与软件开发工具链进行集成,使得软硬件开发可以无缝配合。

什么是NIOSII?

NIOS II(New Integrated Open System Architecture II)是一种基于软件可编程的嵌入式处理器架构,由英特尔(Intel)提供。它是一种可在可编程逻辑器件(如FPGA)中实现的32位RISC(精简指令集计算机)处理器。

NIOS II 具有以下特点和优势:

  1. 可编程性:NIOS II 处理器可以通过软件进行配置和编程,使其适应不同的应用需求。开发人员可以使用高级语言(如C/C++)编写应用程序,并通过软件开发工具链进行编译、调试和部署。

  2. 灵活性:NIOS II 处理器的各种参数(如指令集、存储器大小和外设接口等)可以根据特定应用的需求进行配置和定制。这使得 NIOS II 可以满足广泛的应用要求,从简单的控制任务到复杂的嵌入式系统设计。

  3. 可扩展性:NIOS II 处理器可以与其他外设和IP核集成,以实现更复杂的系统功能。它可以与各种外设接口(如UART、SPI、I2C等)和存储器接口(如SDRAM、Flash等)进行集成,并支持多个中断源和异常处理。

  4. 性能优化:NIOS II 处理器具有优化的指令集和流水线架构,可提供高性能的处理能力。它支持多级缓存和乱序执行等技术,以提高指令执行效率。

  5. 生态系统支持:NIOS II 处理器拥有丰富的生态系统支持,包括软件开发工具、开发板、外设驱动库和参考设计等。这些资源使得开发人员能够更快速、高效地进行嵌入式系统开发。

NIOS II 处理器广泛应用于各种嵌入式系统领域,例如工业自动化、网络通信、医疗设备、汽车电子、消费类电子产品等。它提供了一种灵活可靠的解决方案,帮助开发人员构建高性能、低功耗的嵌入式系统。

注意事项

1、管脚配置

开发板上有个RS232的接口,我想用电脑串口输出,因为手头没有RS232所以需要引出RX和TX用TTL-USB,这里我查阅原理图引到IO_D0和IO_D1
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2、配置NIOSII时的连接

注意这里是需要export的用于配置RX和TX引脚,export之后会有一个小标签,
在这里插入图片描述

在这里插入图片描述

3、注意中断配置好后是这样的

在这里插入图片描述

4、注意名称的配置

如果你的PIO名字没有设置好,这个位置可能会报错
在这里插入图片描述
到头文件里找到宏定义后替换即可
在这里插入图片描述
在这里插入图片描述

5、设置双功能引脚

在这里插入图片描述

NIOS II的报错

build project之后要注意看这两个位置有没有爆红,这个不会在console控制台提示报错,一般build得很快就有问题
在这里插入图片描述

代码以及效果演示

流水灯

nios2_flow_led

#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
const alt_u8
led_data[8]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
int main (void)
{
 int count=0;
 alt_u8 led;
 volatile int i;
 while (1)
 { if (count==7)
 {count=0;}
 else
 {count++;}
 led=led_data[count];
 IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, led);
 i = 0;
 while (i<500000)
 i++;
 }
 return 0;
}

输出到电脑串口助手

在这里插入图片描述


#include <stdio.h>
#include "unistd.h"
#include "system.h"
#include "alt_types.h"
#include "altera_avalon_uart_regs.h"
#include "sys/alt_irq.h"

alt_u8 txdata[] = "hello nios2\n";
int index = 0;

// UART中断服务函数
void IRQ_UART_Interrupts(void* context)
{
    alt_u32 status = IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
    if (status & ALTERA_AVALON_UART_STATUS_RRDY_MSK)
    {
        //rxdata = IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
        //txdata = rxdata; // 串口自收发,将变量rxdata的值赋给txdata
        while (!(IORD_ALTERA_AVALON_UART_STATUS(UART_BASE) & ALTERA_AVALON_UART_STATUS_TRDY_MSK));
        // 查询发送准备接收信号,如果没有准备好,则等待
        IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, txdata); // 发送准备好,发送txdata
    }
}

// 中断初始化函数
void IRQ_init()
{
    // 清除状态寄存器
    IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0);
    // 使能接收准备中断,给控制寄存器相应位写1
    IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, ALTERA_AVALON_UART_CONTROL_RRDY_MSK);

    alt_ic_isr_register(
        UART_IRQ_INTERRUPT_CONTROLLER_ID, // 注册ISR
        UART_IRQ, // 中断控制器标号,从system.h复制
        IRQ_UART_Interrupts, // UART中断服务函数
        NULL, // 指向与设备驱动实例相关的数据结构体
        NULL); // flags,保留未用
}

int main()
{
    IRQ_init();
    while (1)
    {
        IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, txdata[index]);
        index++;
        if (txdata[index] == '\0')
            index = 0;
        usleep(100000); // 延时等待
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/618159.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【020】基于JavaWeb实现的批报管理系统

项目介绍 基于jspservlet实现的批报管理系统采用B/S架构,该项目设计了一个角色管理员&#xff0c;管理员实现了我的案件、查询统计、项目维护等三大功能模块 技术栈 开发工具&#xff1a;Idea2020.3 运行环境&#xff1a;jdk1.8tomcat9.0mysql5.7 服务端技术&#xff1a;j…

【机器学习数据可视化-04】Pyecharts数据可视化宝典

一、引言 在大数据和信息爆炸的时代&#xff0c;数据可视化成为了信息传递和展示的关键手段。通过直观的图表和图形&#xff0c;我们能够更好地理解数据&#xff0c;挖掘其背后的信息。Pyecharts&#xff0c;作为一款基于Python的数据可视化库&#xff0c;凭借其丰富的图表类型…

获取Linux上的Redis的用户名、密码、端口、host等信息

目录 进入redis-cli的目录 启动./redis-cli服务 查询密码 查询用户名 查询端口 查询host 参考文章&#xff1a;解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused-阿里云开发者社区 (aliyun.com) linux查看redis用户和密码_mo…

Java构造方法详解

在Java方法内部定义一个局部变量时&#xff0c;必须要初始化&#xff0c;否则就会编译失败&#xff0c;如下&#xff1a; 要让上述代码通过编译&#xff0c;只需在使用a之前给a赋一个初始值即可 如果是对象&#xff1a;下面用一个日期类演示 我们没有给年月日赋值&#xff0c;…

纯血鸿蒙APP实战开发——首页下拉进入二楼效果案例

介绍 本示例主要介绍了利用position和onTouch来实现首页下拉进入二楼、二楼上划进入首页的效果场景&#xff0c;利用translate和opacity实现动效的移动和缩放&#xff0c;并将界面沉浸式&#xff08;全屏&#xff09;显示。 效果图预览 使用说明 向下滑动首页页面超过触发距…

实验室纳新宣讲会(java后端)

前言 2024-5-12 22:00:39 这是陈旧已久的草稿 2021-09-16 15:41:38 发布一下 当时我进入实验室&#xff0c;也是大二了&#xff0c;实验室纳新需要宣讲&#xff0c; 但是当时有疫情&#xff0c;又没宣讲成。 实验室纳新宣讲会&#xff08;java后端&#xff09; 首先&#x…

【计算机网络】物理层 通信基础、奈氏准则、香农公式 习题2

下列说法中正确的是( )。 A. 信道与通信电路类似&#xff0c;一条可通信的电路往往包含一个信道 B.调制是指把模拟数据转换为数字信号的过程 C. 信息传输速率是指通信信道上每秒传输的码元数 D.在数值上&#xff0c;波特率等于比特率与每符号所含的比特数的比值 信息传输速率&a…

【进程通信】了解信号以及信号的产生

文章目录 0.前言1.信号的基本概念1.1中断1.1.1 软中断1.1.2硬中断 1.2异步1.2.1异步和同步的比较 2.信号的主要用途3.信号的特点4.查看信号4.1Core和Term的区别4.2生成Core文件 5.初识捕捉信号5.1signal函数 6.产生信号的方式6.1.通过终端按键产生信号6.2.调用系统函数向进程发…

浅谈如何做好软件项目

如何做好软件项目&#xff0c;这是摆在软件实施团队每个人面前的关键问题。笔者在此提出一些浅见&#xff0c;供大家参考。欢迎在评论区交流&#xff01; 目录 【摘要】 【正文】 一、树立正确的需求调研理念 二、谋定而后动的开发工作 三、大道至简的系统设计 四、专注项…

hcip实验6:BGP综合实验

实验拓扑&#xff1a; 实验配置&#xff1a; ip地址配置&#xff1a; #R1 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [R1-GigabitEthernet0/0/0]int l0 [R1-LoopBack0]ip add 172.16.0.1 32 [R1-LoopBack0]int l1 [R1-LoopBack1]ip add 192.168.1.1 24#R2…

算法笔记——数位DP

一、前置知识 1.DP小知识 D P DP DP 是一种算法思想&#xff0c;用递推方程的方式解决问题。但是使用它要满足如下性质&#xff1a; 最优子结构&#xff1a; 子结构优秀&#xff0c;整个就优秀。无后效性&#xff1a;当前决策不会影响后面。 2.DP实现方法 众所周知&#xf…

环境变量(全)

概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但是照样可以链接成功&#xff0c;生成可执…

2024中国(重庆)机器人展览会8月举办

2024中国(重庆)机器人展览会8月举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 2024中国重庆机器人展会将汇聚机器人全产业链知名企业&#xff0c;世界科技领先的生产制造企业与来自多个国家和地区…

Python | Leetcode Python题解之第78题子集

题目&#xff1a; 题解&#xff1a; class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:self.res []self.backtrack([], 0, nums)return self.resdef backtrack(self, sol, index, nums):self.res.append(sol)for i in range(index, len(nums)):self…

2024中国(重庆)无人机展览会8月在重庆举办

2024中国(重庆)无人机展览会8月在重庆举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 报名&#xff1a;【交易会I 59交易会2351交易会9466】 展会背景&#xff1a; 为更好的培养航空航天产业和无人…

鸿蒙内核源码分析(Shell编辑篇) | 两个任务,三个阶段

系列篇从内核视角用一句话概括shell的底层实现为&#xff1a;两个任务&#xff0c;三个阶段。其本质是独立进程&#xff0c;因而划到进程管理模块。每次创建shell进程都会再创建两个任务。 客户端任务(ShellEntry)&#xff1a; 负责接受来自终端(控制台)敲入的一个个字符&…

OFDM802.11a的FPGA实现(十二)使用FFT IP核添加循环前缀

原文链接&#xff08;相关文章合集&#xff09;&#xff1a;OFDM 802.11a的xilinx FPGA实现 目录 1.前言2.循环前缀3.硬件实现4.ModelSim仿真 1.前言 为了能够消除传输过程当中的符号间干扰&#xff0c;在IFFT处理完毕之后还要加上循环前缀。 2.循环前缀 实际通信信道中,由于接…

HTML表单创建学习

文章目录 1、创建HTML框架2.body标签CSS3.表单创建3.1、添加fieldset与label标签3.2、为label标签添加css样式3.3、添加input标签3.4、添加提交按钮3.5、在input标签中添加required3.6、添加minlength属性3.7、pattern属性3.8、设置表单单选按钮无法同时选中3.9、添加链接3.10、…

机器人系统ros2-开发实践06-将静态坐标系广播到 tf2(Python)-定义机器人底座与其传感器或非移动部件之间的关系

发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如&#xff0c;最容易推断激光扫描仪中心框架中的激光扫描测量结果。 1. 创建包 首先&#xff0c;我们将创建一个用于本教程和后续教程的包。调用的包learning_tf2_py将依赖于geometry_msgs、pyth…

简约在线生成短网址系统源码 短链防红域名系统 带后台

简约在线生成短网址系统源码 短链防红域名系统 带后台 安装教程&#xff1a;访问 http://你的域名/install 进行安装 源码免费下载地址抄笔记 (chaobiji.cn)https://chaobiji.cn/