實驗說明
本節說明了如何基于在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文章
1367瀏覽量
114527 -
定時器
+關注
關注
23文章
3237瀏覽量
114467 -
uart
+關注
關注
22文章
1227瀏覽量
101171
原文標題:基于 NIOS II 處理器的RT-Thread物聯網操作系統移植與使用教程
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論