您的位置 首页 知识

嵌入式软核Nios Ⅱ串口直接读写寄存器的编程办法

在Altera公司推出的软件SoPC中加载NiosⅡ软核和相应的外围接口以及与定义相应的自定义指令,然后对设计进行综合,下载到FPGA中就可以方便地实现一个具有高速DSP功能的嵌入式处理器。

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()的输入。

  该办法运用串口比较简略,可是占用的存储资源比较大,编译时刻也较长。

 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 串口收发通讯程序

  串口的收发可选用查询和中止办法,中止办法要更好一些。

  查询办法发送子程序代码如下:

 


  查询办法接纳子程序代码如下:

 

  由于串口的中止号是专一的,所以中止办法接纳发送只能在一个中止函数内。中止办法接纳发送子程序代码如下:


该中止处理程序可进行中止办法接纳发送,假如程序需求进行准确的接纳发送,还需加上中止程序和主程序的彼此操控变量。

  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Ⅱ中串口模块的编程办法,给出了串口模块编程的示例代码,经实践运用,作用杰出,具有必定的参阅含义。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/196809.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部