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