实验说明
本节说明了如何基于在Qsys中搭建支持RT-Thread操作系统的基本NIOS II处理器系统,并在此基础上实现创建2个LED闪烁的静态线程的示例。RT-Thread操作系统版本:3.0软件版本:Quartus II 13.0开发环境:Windows7 64位旗舰版硬件平台:小梅哥AC620 FPGA开发板嵌入式处理器:NIOS II
操作步骤
搭建支持RT-Thread操作系统的NIOS II CPU系统
在Qsys中搭建能够支持RT-Thread操作系统的NIOS II 处理器系统,除了必要的NIOS II处理器、RAM存储器(片上RAM、SRAM、SDRAM、DDR2)、FLASH存储器(EPCS)外,为了支持RT-Thread操作系统的运行,还需要添加UART串口外设、定时器外设、以及为了使系统能够工作在较高的频率,而添加PLL锁相环。同时,为了能够驱动LED灯,还需要根据实际硬件情况添加一定位宽的输出型PIO以驱动LED灯。本系统主要包含以下外设:
PLL 时钟管理单元,输出2路相位相差90°的时钟,一路提供给系统内所有逻辑使用,一路输出到SDRAM芯片的clk管脚上。(相位为-90°)
NIOS II 处理器 ,选择f(快速)版本,其他默认。
SDRAM控制器,16位数据位宽,12位行地址,9位列地址,用作NIOS II的数据和指令存储器
EPCS控制器,用以掉电存储FPGA和NIOS II的软硬件固件信息
UART(RS232)控制器,用作系统标准输入输出设备,默认115200波特率
Timer定时器,设置默认10毫秒定时器,并可通过软件修改寄存器以修改定时时间。
PIO,仅输出型PIO,4位,对应开发板上4个LED灯
下图为搭建好的最小NIOS II应用系统
其中需要注意的是,驱动LED的PIO为4位,并直接命名为了led,uart串口被命名为了RS232,这是为了与RT-Thread官方提供的NIOS II的BSP文件中相关代码相对应。
NIOS II CPU相关设置
定时器参数设置
UART控制器相关设置
LED PIO相关设置
在Quartus II工程中例化CPU系统
设计顶层文件
将Qsys中搭建的系统命名为mysystem,然后generate得到HDL文件,在Quartus II软件中添加mysystem.qsys文件,新建Verilog文件,完善顶层例化信息,完善后的代码如下所示:
module ac620_ghrd( input wire reset_n, input wire clk, output wire [11:0] sdram_addr, output wire [1:0] sdram_ba, output wire sdram_cas_n, output wire sdram_cke, output wire sdram_clk, output wire sdram_cs_n, inout wire [15:0] sdram_dq, output wire [1:0] sdram_dqm, output wire sdram_ras_n, output wire sdram_we_n, output wire [3:0] led, input wire uart_rxd, output wire uart_txd, output wire epcs_dclk, output wire epcs_sce, output wire epcs_sdo, input wire epcs_data0 ); mysystem u0 ( .clk_in_reset_reset_n (reset_n), .clk_in_clk (clk), .sdram_addr (sdram_addr), .sdram_ba (sdram_ba), .sdram_cas_n (sdram_cas_n), .sdram_cke (sdram_cke), .sdram_cs_n (sdram_cs_n), .sdram_dq (sdram_dq), .sdram_dqm (sdram_dqm), .sdram_ras_n (sdram_ras_n), .sdram_we_n (sdram_we_n), .led_export (led), .uart_rxd (uart_rxd), .uart_txd (uart_txd), .sdram_cko_clk (sdram_clk), .epcs_dclk (epcs_dclk), .epcs_sce (epcs_sce), .epcs_sdo (epcs_sdo), .epcs_data0 (epcs_data0), .altpll_0_phasedone_conduit_export (), .altpll_0_locked_conduit_export (), .altpll_0_areset_conduit_export () ); endmodule
设置EPCS管脚功能
根据AC620 FPGA开发板引脚分配表或者开发板背面的丝印对用到的引脚功能一一分配正确的管脚。注意设置所有的IO电平为3.3LVTTL,以防止无法正确驱动SDRAM存储器。另外由于使用到了EPCS,因此需要在Quartus中设置其功能为regular IO,如下图所示:
添加SDC约束文件
在做基于NIOS II的SOPC开发时,务必要添加SDC约束文件,对系统的时钟进行约束,以保证Quartus II软件能够按照运行的频率要求对系统进行布局布线,否则,在没有加约束的情况下,整个系统可能最高运行频率比50MHz还要低,就会出现系统无法正常运行,软件无法下载等各种故障。本实例中约束文件比较简单,大家只需要将下述内容新建一个sdc文件保存起来并添加到Quartus II工程中即可:
set_time_format -unit ns -decimal_places 3 create_clock -name {clk} -period 20.000 -waveform { 0.000 10.000 } [get_ports {clk}] derive_pll_clocks
添加完成后编译整个工程,得到sof文件。
创建NIOS II应用工程模版
打开Quartus II集成的NIOS II软件开发工具(基于Eclipse),然后切换工作空间到Quartus II工程目录下。
然后新建一个空白模版工程和bsp工程,如下所示。注意,sopcinfo文件路径一定不能错。
移植RT-Thread操作系统
下载RT-Thread操作系统源码
从git上下载RT-Thread操作系统的源文件,源码地址:https://github.com/RT-Thread/rt-thread选择master分支,点击Clone or download按钮,选择Download zip来下载源文件,当然也可以从我们提供的本实例的压缩包中得到该文件。
下载完成之后的文件名为:rt-thread-master.zip
移植RT-Thread操作系统源码
在RTT_Test工程下新建一个文件夹,命名为”rt-thread”,添加src文件夹,include文件夹到rt-thread文件夹下,然后添加libcpu下nios部分内容到rt-thread文件夹下。注意,libcpu下提供了对各种体系架构的cpu的支持,我们这里只需要nios部分即可,其他部分不需要添加到工程中。上述就完成了RT-Thread操作系统源码的添加。但是此时还并不完整,我们还需要添加对NIOS II CPU的bsp文件,该文件在bsp路径下的nios ii路径下,我们拷贝该路径下的所有.c和.h文件到工程中,注意,application.c是整个系统的应用部分,也就是main函数所在文件,因此将该文件从rt-thread文件夹中移出到软件工程的根目录(拖动即可),添加完成后的工程如下所示(具体可以参考我们提供的实例工程文件)。
设置头文件搜索路径
添加完所有的文件之后,我们还必须要在软件的设置中添加头文件搜索路径,选中RTT_test工程,鼠标右击选择Properties选项,在弹出的对话框中选中Nios II Application Paths选项,添加include和bsp文件夹道头文件路径中,然后确认关闭。如果弹出下述相对路径转换提示,选择Yes即可。
至此,所有的运行RT-Thread操作系统的要求都已经满足了。
关闭FINSH支持功能
接下来,我们打开工程的rt-thread -> bsp -> rtconfig.h文件,定位到第80行左右,将#define RT_USING_FINSH这句话前面加上单行注释符“//”,以屏蔽该定义,即不使用FINSH功能。
运行RT-Thread操作系统
编译运行程序
然后对整个工程进行全编译(快捷键为Ctrl + B),编译无误,就会得到可下载到NIOS II CPU中运行的elf文件,然后在菜单栏中依次点击RUN -> Run Configurations选项,打开下载运行页面。
新建一个硬件运行配置并选择RTT_test工程,然后切换到Target Connection选项卡,刷新连接以确认硬件USB Blaster已经找到CPU。注意,在此操作之前需要先将Quartus II软件编译生成的sof文件下载到开发板中,并使用Micro USB数据线连接开发板和电脑,并打开串口调试工具,以找到开发板对应串口,设置波特率115200,ASCII接收。
勾选忽略system id和时间戳选项,然后点击Run。即可开始软件程序的下载。
实验结果
下载完成后,即可在串口调试助手上看到系统运行时打印的信息,同时,开发板上4个LED灯循环闪烁。
-
RAM
+关注
关注
8文章
1353浏览量
114411 -
定时器
+关注
关注
23文章
3228浏览量
114253 -
uart
+关注
关注
22文章
1216浏览量
101066
原文标题:基于 NIOS II 处理器的RT-Thread物联网操作系统移植与使用教程
文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论