当前位置:首页 > 电源 > 数字电源
[导读]讨论了NiosⅡ软棱的串口直接读写寄存器方式的编程方法,并给出了参考源代码。它与C语言的标准输入/输出语句相比,可极大地缩短程序执行时间,并使得CPU能同时处理其他事务。根据此代码编写了应用测试程序,并进行了测试。测试结果显示串口通信运行良好,较为稳定。

O 引言
    Altera公司的FPGA作为全定制芯片的一个代表正在得到日益广泛的应用。为了用户使用方便,Altera公司推出嵌入式软核NiosⅡ可以便利地使用工具生成并放人FPGA芯片中。NiosⅡ软核可以在用户的系统中处理一些诸如人机接口界面、内部时序逻辑控制、外部设备初始化等工作。通用异步收发器(UART),是嵌入式系统上很常用的一个串行接口,由于其方便、简单、易用等特性,在嵌入式系统中依然扮演着十分重要的角色。所以Altera才把UART作为一个连接Nios/NiosⅡ与其相关外设的IP放在SoPC Builder里面供用户使用。Nios一代调试甚至直接用串口
    NiosⅡ处理器是Intel公司为Altera公司推出的一个32位精简指令处理器软核。在Altera公司推出的软件SoPC中加载NiosⅡ软核和相应的外围接口以及与定义相应的自定义指令,然后对设计进行综合,下载到FPGA中就可以方便地实现一个具有高速DSP功能的嵌入式处理器。
    NiosⅡ处理器的软件开发是建立在ANSI C基础上的。NiosⅡIDE是NiosⅡ系列嵌入式处理器的主要软件开发工具。用户可以在NiosⅡIDE中完成所有的软件开发任务,如编辑、编译、下载、调试和闪存编程。NiosⅡ嵌入式系统的一个重要问题就是软件代码量的大小,这关系到存放代码的存储器件容量大小,因此控制和减小程序代码量是降低系统成本的重要方法,必须首先从处理器的启动顺序开始研究。

1 串口C语言方式编程
    使用该方法要加上下面语句:

    执行上面程序可以得到串口输出结果。
    如果不调用alt_main()函数,则系统默认运行步骤如下:
    (1)调用alt_os_int()函数来执行任何操作系统所特有的初始化。如果HAL是在操作系统里运行的,那么初始化alt_fd_list_lock命令。它可以控制访问HAL文件系统,初始化中断控制器并执行中断。
    (2)调用alt_sys_init()函数,以初始化系统里所有的驱动装置和软件组成部分。
    (3)重新设置C标准I/O通道(stdin,stdout,stderr),以使用合适的器件。
    (4)调用main()。
    (5)调用exit()。main()的返回代码作为exit()的输入。
    该方式使用串口比较简单,但是占用的存储资源比较大,编译时间也较长。


[!--empirenews.page--]
2 串口直接读写寄存器方式编程
2.1 串口初始化

    NiosⅡ的串口编程有多种方式,比较多的是采用标准C语言写法,占用程序空间比较大。NiosⅡ处理器的启动可采用2种方式:自动初始化和用户自定义初始化。ANSI C标准定义应用程序可以通过调用main()来开始执行。在调用main()之前,应用程序假定运行环境和所有的服务系统都被初始化并准备运行。初始化可以被硬件抽象层(HAL)系统库自动执行。程序员不需要考虑系统的输出设备以及如何初始化每一个外设,HAL会自动初始化整个系统。
    另外,ANSI C标准也提供了一个可变的入口点程序,以避免自动初始化。ANSI C标准还定义程序员能手动初始化任何所用的硬件。alt_ main()函数提供了一个独立式的编程环境,能够完全控制系统的初始化。独立式编程环境可以使程序员手动编写初始化系统的代码。
    HAL提供的系统初始化代码按以下启动顺序运行:
    (1)启动指令和数据高速缓冲存储器;
    (2)配置堆栈;
    (3)配置全局指针;
    (4)通过链接器提供的_bss_start和_bss_end来零初始化BSS层,_bss_start和_bss_end是开始和结束BSS的命令;
    (5)如果当前系统没有启动下载器,就复制.rwdata,.rodata或者剩下的部分到RAM;
    (6)调用alt_main()。
    在NiosⅡIDE工程中,只需简单定义alt_main()就可以实现用户的启动顺序,而且能够选择HAL的服务程序。如果应用程序需要一个alt_ main()入口点程序,可以复制默认的执行作为开始点,根据要求来定制它。

    使用独立式编程环境会增加NiosⅡ程序编写的复杂性。独立式编程环境的主要作用在于减小代码量,但要使用这种方法,需要对NiosⅡ处理器的外设和驱动编写都非常熟悉才行。在NiosⅡIDE中也可以通过某些选项来减小HAL系统库容量,从而达到减小代码量的目的,比使用独立式编程环境容易得多。
    串口部分程序初始化代码如下:
    //串口中断初始化  

2.2 串口收发通信程序
    串口的收发可采用查询和中断方式,中断方式要更好一些。
    查询方式发送子程序代码如下:


   [!--empirenews.page--] 查询方式接收子程序代码如下:

    因为串口的中断号是惟一的,所以中断方式接收发送只能在一个中断函数内。中断方式接收发送子程序代码如下:

    该中断处理程序可进行中断方式接收发送,如果程序需要进行精确的接收发送,还需加上中断程序和主程序的相互控制变量。
2.3 串口通信调试
    在Nios中调试“Hello world!”范例的时候往往会出现这样的错误:nios2-terminal:can't open uart:Permission denied。这是因为在调试程序时,打开了另外的串口调试工具,或者可以说是串口侦听器。但实际上NIOS IDE中已经集成了串口调试工具,或者串口侦听器。在任务管理器中nios2-terminal.exe就是这个侦听串口的进程。
    所以,如果用NIOS IDE来观察发送的数据,就不要用其他的串口调试工具,如果在编译之前就打开了其他的串口侦听器,编译链接的时候就会出现上述的错误。而在程序编译链接后再去打开其他的串口侦听器,串口就会因为nios2-terminal.exe占用而无法打开。解决的方法,如果想用NIOS IDE观察的话就不要事先打开其他的串口调试工具。而如果想用其他的串口调试工具来观察数据,通过USB_BLASTER将数据下载到板子后,删除任务管理器中的nios2_terminal.exe,然后打开串口调试工具。如果程序没有问题,运行后就可以看到数据。

3 结果与讨论
    为证明以上程序的可运用性,特别制作了电路来验证,芯片使用EP3C40,PC端使用串口调试助手,波特率为19 200 b/s,8位数据位,1位停止位,无校验位。实验结果如图2所示。


    经实验证明,该方法简单可靠,可以生成比较小的代码。

4 结语
    本文讨论了嵌入式软核NiosⅡ中串口模块的编程方法,给出了串口模块编程的示例代码,经实际运用,效果良好,具有一定的参考意义。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在这篇文章中,小编将对工业机器人的相关内容和情况加以介绍以帮助大家增进对工业机器人的了解程度,和小编一起来阅读以下内容吧。

关键字: 工业机器人 机器人 编程

现在网上有很多播放量巨高的免费编程项目教程,很多学编程的同学可能都看过,就导致大家可能写在简历上的内容都差不多。

关键字: 项目 编程 简历

串口作为单片机开发的一个常用的外设,应用范围非常广。大部分时候,串口需要接收处理的数据长度是不定的。那么怎么才能判断一帧数据是否结束呢,今天就以STM32单片机为例,介绍几种接收不定长数据的方法。

关键字: 单片机 串口 STM32

经过几十年发展,嵌入式技术已经用在了我们生活中的方方面面,但是嵌入式始终都带有小众,专业性强的属性,让很多非嵌入式领域的同学望而却步。近十几年的发展,物联网覆盖了越来越多领域,包括了家居,商业,工业,农业等领域,不仅吸引...

关键字: 嵌入式 物联网 技术

随着IT技术飞速发展,互联网已经进入了“物联网”时代。物联网中需要的大量设备不在依赖人与人之间的交互产生联系,更多通过协议、通信、程序设计等方式连接到一处。即 “物联网”的目的则是让所有的物品都具有计算机的智能但并不以通...

关键字: 嵌入式 物联网 计算机

最近看到APP上,给我推送了很多类似的回答,借此机会,也想着重新审视一下自己的学习历程,以及结合自身和大牛,分享一些学习经验,希望对大家有所启发和帮助。

关键字: APP 嵌入式 C语言

本文中,小编将对无线模块予以介绍,如果你想对无线模块的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 无线模块 寄存器 处理器

万物智联时代,嵌入式技术及其应用的形态将更加丰富和多元,同时也将日益呈现深度物理融合、混合架构共存、群体智能协同、网络安全攸关等诸多新的计算特性。显然,经典的嵌入式系统体系结构、软硬件技术和开发方法都已很难应对新趋势下的...

关键字: 嵌入式 物联网 计算机

物联网是新一代信息技术的重要组成部分,是互联网与嵌入式系统发展到高级阶段的融合。通用计算机经历了从智慧平台到互联网的独立发展道路;嵌入式系统则经历了智慧物联到局域智慧物联的独立发展道路。

关键字: 嵌入式 物联网 计算机

今天,小编将在这篇文章中为大家带来工控主板的有关报道,通过阅读这篇文章,大家可以对工控主板具备清晰的认识,主要内容如下。

关键字: 工控主板 嵌入式 主板

数字电源

15504 篇文章

关注

发布文章

编辑精选

技术子站

关闭