0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UART寄存器介绍与中断操作详解(应用部分)

NXAf_fpg 来源:互联网 作者:佚名 2020-08-25 18:29 次阅读

我们在让Altera FPGA上的嵌入式系统和外部设备进行通信方式的时候,通常会用到拥有Avalon接口的通用异步收发传输器——UART IP核。UART核实现了RS-232通讯协议,并使得大家可以设置串口通信相关的波特率、奇偶校验位、停止位和数据位,以及可选的RTS/CTS流控制信号参数


实验任务

本节实验是:在Qsys系统中通过使用官方UART IP核和PC进行环回,将收到的字符发送给PC。

硬件设计

创建Quartus II 工程

首先要创建Quartus II工程,工程名为“UART_ip”。

创建Qsys系统

实验中要用到的IP核有:clk(时钟)、niosII(处理器)、onchip_ram(片内存储)、jtag_uart、sysid_qsys、UART。其中只有UART IP核讲解一下,其他的IP核都是按照以前的配置方法进行设置,从Library中选择UART IP核(RS-232 Serial Port)并打开,出现以下界面:

这里我们使用默认设置,直接点击【Finish】即可。

然后,我们打开niosII IP核配置界面,因为这里只用了onchip_ram IP核存储代码和指令,所以需要对相关的设置进行修改,在Reset Vector处将Reset vector memory处的选项选为onchip_ram,同时在Exception Vector处也将Exception vector memory处的选项选为onchip_ram。需要注意的是,在系统中加入onchip_ram IP核之后,niosII IP核的Reset Vector和Exception Vector选项中才会出现onchip_ram选项。

添加完IP核后就可以开始连线,大家若是不熟悉怎么连线,可以照着下面完成的Qsys系统界面图连。需要注意的是,要将UART IP核的端口引出来,引出端口的方法是双击IP核的Export一栏,然后修改名称,按下Enter键即可。

然后,点击System→Assign Base Addresses 让系统自动分配地址,这里最好把onchip_ram的地址锁住,这是因为这个IP 核里存储着指令,最好不要让其地址发生变动。锁住地址的方法是先点击 IP 核,然后点击右键→Lock Base Address。我们还可以将各个 IP 核的名称修改一下。最后就是生成系统了,操作可以按照“Hello,World”推送里的进行。

集成Qsys系统

下面两个图为集成Qsys关键步骤,详细集成步骤请参考“Hello,World”推送里的操作。

Quartus II工程中的顶层代码如下。

编译和下载

这时,我们便能够进行编译查错了,我们可以通过Quartus II软件菜单栏中的【Processing】→【Start Compilation】来进行编译,也可以通过快捷栏中的快捷键进行编译。接下来我们就需要进行配置IO,分配管脚。首先,点击Quartus II软件菜单栏中的【Assignment】→【Device】,然后我们在Device界面中找到【Device and Pin Options…】进入页面配置IO。将未使用引脚设置为高阻输入(As input tri-state),这样上电后FPGA的所有不使用引脚都将进入高阻抗状态。

接下来,将一些IO设置成普通IO,通过双击红框位置,将一个个Value的值修改过来。

通过Quartus II软件菜单栏中的【Assignments】→【Pin Planner】选项分配引脚

最后我们再进行一次全编译,成功编译硬件系统后,将产生用于配置FPGA的UART_ip.sof文件。下面我们就来说明一下将.sof文件下载到FPGA目标器件的步骤。

将下载器一端连接电脑,另一端与开发板上对应端口连接,最后连接电源线并打开电源开关。接下来我们下载程序。工程打开后通过点击工具栏中的“Programmer”图标打开下载界面,通过“Add File”按钮选择 output_files 目录下的“UART_ip.sof”文件。

开发板电源打开后,在程序下载界面点击“Hardware Setup”,在弹出的对话框中选择当前 的硬件连接为“USB-Blaster[USB-0]”。然后点击“Start”将工程编译完成后得到的 sof 文件下载到开发板中。

至此,硬件部分设计完成,下面开始基于Nios II SBT for Eclipse的软件部分的设计。

软件设计

我们通过Quartus II软件菜单栏中的【Toos】→【Nios II SBT for Eclipse】,来启动NiosII SBT for Eclipse软件。打开Nios II SBT for Eclipse软件后,会弹出Workspace Launcher页面。我们这里将工作空间设置为qsys路径下的software文件夹,如图所示。

设置好工作空间后,我们点击【OK】进入Nios II SBT for Eclipse软件主界面中,在该页面我们通过单击菜单栏中的【File】→【New】→【Nios II Application and BSP from Template】,来新建工程。

单击【…】按钮来选择qsyshardware下的UART_ip.sopcinfo文件,即指向当前硬件设计系统。Nios II SBT for Eclipse软件会自动识别Qsys系统中CPU的名称,所以CPU name一项会自动生成。接下来,要给Nios II SBT for Eclipse软件中的工程命名,这里的名称没有特殊要求,我们这里名为UART。然后将工程存放的位置修改为qsyssoftwareUART。注意不要漏掉了“UART”,不然生成系统的时候会报错。最后我们来看下Project template窗口,该窗口中陈列的都是已经设计好的软件工程。我们可以从中选择一个,作为自己的工程的模板来使用。当然也可以选择Bland Project(空白工程),就需要自己写所有的代码。这里我们选择的是Hello World模板工程,然后我们在它的基础上进行修改,这样比空白工程更加方便。设置完工程后,直接点击【Finish】完成工程创建。然后,在Nios II SBT for Eclipse软件的

左侧Project Explorer窗口中有两个工程:UART 和 UART_bsp。其中UART 是C/C++应用工程,而UART_bsp是描述Qsys系统硬件细节的系统库。打开UART 工程里的 hello_world.c文件。

我们在这里要验证之前创建的Qsys系统是否能正常工作,验证方法和“Hello,World”是一样的。

这时大家点击【Run As】→【Nios II Hardware】,然后点击【Target Connection】标签,然后在Target Connection窗口中点击【Refresh Connections】按钮后。这时软件便会自动识别我们开发板上的Qsys系统,并显示Qsys系统的相关信息。我们接着点击【Run】,软件会把irq.elf文件下载至开发板中运行起来。更加详细的图和文字描述,可以在“Hello,World”下载验证部分查看。

这时,若之前创建的Qsys系统无误,代码下载完成后在Nios II console窗口会显示“Hello from Nios II!”字符,如下图所示。

验证完Qsys系统是否能正常运行之后,我们就可以开始软件部分的设计了。这时只需要在当前的代码窗口修改代码就可以了。

下载验证

现在可以编译UART工程了。右键UART工程,点击build project。稍等片刻,Console窗口显示的内容如下图所示,这表示工程编译成功。

右键UART工程,点击【Run As】→【Nios II Hardware】,代码就被下载到开发板上了。接下来需要连接串口线并利用串口助手进行验证。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5328

    浏览量

    120116
  • 中断
    +关注

    关注

    5

    文章

    895

    浏览量

    41419
  • uart
    +关注

    关注

    22

    文章

    1230

    浏览量

    101223

原文标题:NIOS II 处理器系统设计之异步收发传输UART ip核(应用部分)

文章出处:【微信号:fpgaerZT,微信公众号:FPGA科技室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DSP2812寄存器详解

    DSP2812寄存器详解DSP2812寄存器详DSP2812寄存器详解
    发表于 01-08 14:17 8次下载

    寄存器传输语言详解

    数字系统中最常用到的微操作可分为四类: 1、寄存器传送微操作 它可把二元信息从一个寄存器传送到另一个寄存器,在
    发表于 08-16 09:32 6183次阅读
    <b class='flag-5'>寄存器</b>传输语言<b class='flag-5'>详解</b>

    51寄存器的所有寄存器名称,(包括寄存器每一位的作用及用法)资源详解

    51寄存器的所有寄存器名称,(包括寄存器每一位的作用及用法)资源详解
    发表于 10-16 13:04 14次下载
    51<b class='flag-5'>寄存器</b>的所有<b class='flag-5'>寄存器</b>名称,(包括<b class='flag-5'>寄存器</b>每一位的作用及用法)资源<b class='flag-5'>详解</b>

    移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途

    移位寄存器是一个具有移位功能的寄存器,是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移。本文主要介绍了移位寄存器的用途以及移位
    发表于 12-22 15:49 2w次阅读

    寄存器操作方法_对寄存器操作的通用方法总结

    本文主要详解寄存器操作方法以及对寄存器操作的通用方法总结,具体的跟随小编来了解一下。
    的头像 发表于 05-22 15:53 2.3w次阅读

    Zynq uart软件中断hook的操作过程

    早期运用的arm芯片规模较小,在芯片上直接有uart中断服务函数地址寄存器,直接将中断服务函数的地址写入寄存器就搞定了。
    发表于 05-02 14:36 1733次阅读

    如何选择51单片机的中断寄存器

    首先介绍一下51的寄存器组:通过设置PSW寄存器的第3位和第4位可以任意切换寄存器组。在进入中断前,切换
    发表于 04-17 17:27 0次下载
    如何选择51单片机的<b class='flag-5'>中断寄存器</b>组

    ATMEL SAMC21的UART驱动寄存器操作和程序免费下载

    本文档的主要内容详细介绍的是ATMEL SAMC21的UART驱动寄存器操作和程序免费下载。
    发表于 06-20 08:00 20次下载
    ATMEL SAMC21的<b class='flag-5'>UART</b>驱动<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>和程序免费下载

    使用寄存器的逻辑操作指令是什么?

    操作系统中硬件相关的部分集中体现在汇编指令和对寄存器操作中,因此我们对ARM体系结构的介绍也围绕ARMv8-A的汇编指令和
    的头像 发表于 06-18 15:49 3677次阅读

    UART寄存器介绍中断操作详解

    通信的任务。所以在简介部分,我们会对常用的寄存器进行详细的介绍。 上图为一个典型系统中的UART核,它有两个用户可见的部分: l可通过Ava
    的头像 发表于 08-25 16:46 1.6w次阅读
    <b class='flag-5'>UART</b><b class='flag-5'>寄存器</b><b class='flag-5'>介绍</b>与<b class='flag-5'>中断</b><b class='flag-5'>操作</b><b class='flag-5'>详解</b>

    51单片机与中断相关的寄存器

    51单片机与中断相关的寄存器简介中断控制寄存器IE中断优先级控制寄存器IP定时
    发表于 11-12 11:36 8次下载
    51单片机与<b class='flag-5'>中断</b>相关的<b class='flag-5'>寄存器</b>

    STM32的寄存器操作

    STM32的寄存器操作在使用STM32单片机编程时一般都用ST给的库函数编程,库函数编程的底层就是对单片机寄存器操作,库函数就是一系列寄存器
    发表于 01-13 15:43 19次下载
    STM32的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 07-12 09:37 1035次阅读
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>指南

    Linux驱动操作寄存器

    ,第四个参数是映射的大小。 驱动中操作: #define OFFSET  0x60 //某个寄存器的偏移地址 static int my_probe(struct platform_device
    的头像 发表于 09-26 16:34 799次阅读

    U54内核中断控制和状态寄存器

    中断控制和状态寄存器 Machine Status Register (mstatus) mstatus 寄存器跟踪并控制 hart 的当前操作状态,包括是否启用
    的头像 发表于 10-08 09:54 915次阅读
    U54内核<b class='flag-5'>中断</b>控制和状态<b class='flag-5'>寄存器</b>