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

2024-05-13 04:04

本文主要是介绍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的值赋给txdatawhile (!(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);// 使能接收准备中断,给控制寄存器相应位写1IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, ALTERA_AVALON_UART_CONTROL_RRDY_MSK);alt_ic_isr_register(UART_IRQ_INTERRUPT_CONTROLLER_ID, // 注册ISRUART_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;
}

这篇关于NIOS II实现LED流水灯以及串口输出(DE2-115开发板)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984628

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、