0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UART寄存器介紹與中斷操作詳解(應(yīng)用部分)

NXAf_fpg ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2020-08-25 18:29 ? 次閱讀

我們在讓Altera FPGA上的嵌入式系統(tǒng)和外部設(shè)備進(jìn)行通信方式的時(shí)候,通常會用到擁有Avalon接口的通用異步收發(fā)傳輸器——UART IP核。UART核實(shí)現(xiàn)了RS-232通訊協(xié)議,并使得大家可以設(shè)置串口通信相關(guān)的波特率、奇偶校驗(yàn)位、停止位和數(shù)據(jù)位,以及可選的RTS/CTS流控制信號參數(shù)。


實(shí)驗(yàn)任務(wù)

本節(jié)實(shí)驗(yàn)是:在Qsys系統(tǒng)中通過使用官方UART IP核和PC進(jìn)行環(huán)回,將收到的字符發(fā)送給PC。

硬件設(shè)計(jì)

創(chuàng)建Quartus II 工程

首先要?jiǎng)?chuàng)建Quartus II工程,工程名為“UART_ip”。

創(chuàng)建Qsys系統(tǒng)

實(shí)驗(yàn)中要用到的IP核有:clk(時(shí)鐘)、niosII(處理器)、onchip_ram(片內(nèi)存儲)、jtag_uart、sysid_qsys、UART。其中只有UART IP核講解一下,其他的IP核都是按照以前的配置方法進(jìn)行設(shè)置,從Library中選擇UART IP核(RS-232 Serial Port)并打開,出現(xiàn)以下界面:

這里我們使用默認(rèn)設(shè)置,直接點(diǎn)擊【Finish】即可。

然后,我們打開niosII IP核配置界面,因?yàn)檫@里只用了onchip_ram IP核存儲代碼和指令,所以需要對相關(guān)的設(shè)置進(jìn)行修改,在Reset Vector處將Reset vector memory處的選項(xiàng)選為onchip_ram,同時(shí)在Exception Vector處也將Exception vector memory處的選項(xiàng)選為onchip_ram。需要注意的是,在系統(tǒng)中加入onchip_ram IP核之后,niosII IP核的Reset Vector和Exception Vector選項(xiàng)中才會出現(xiàn)onchip_ram選項(xiàng)。

添加完IP核后就可以開始連線,大家若是不熟悉怎么連線,可以照著下面完成的Qsys系統(tǒng)界面圖連。需要注意的是,要將UART IP核的端口引出來,引出端口的方法是雙擊IP核的Export一欄,然后修改名稱,按下Enter鍵即可。

然后,點(diǎn)擊System→Assign Base Addresses 讓系統(tǒng)自動分配地址,這里最好把onchip_ram的地址鎖住,這是因?yàn)檫@個(gè)IP 核里存儲著指令,最好不要讓其地址發(fā)生變動。鎖住地址的方法是先點(diǎn)擊 IP 核,然后點(diǎn)擊右鍵→Lock Base Address。我們還可以將各個(gè) IP 核的名稱修改一下。最后就是生成系統(tǒng)了,操作可以按照“Hello,World”推送里的進(jìn)行。

集成Qsys系統(tǒng)

下面兩個(gè)圖為集成Qsys關(guān)鍵步驟,詳細(xì)集成步驟請參考“Hello,World”推送里的操作。

Quartus II工程中的頂層代碼如下。

編譯和下載

這時(shí),我們便能夠進(jìn)行編譯查錯(cuò)了,我們可以通過Quartus II軟件菜單欄中的【Processing】→【Start Compilation】來進(jìn)行編譯,也可以通過快捷欄中的快捷鍵進(jìn)行編譯。接下來我們就需要進(jìn)行配置IO,分配管腳。首先,點(diǎn)擊Quartus II軟件菜單欄中的【Assignment】→【Device】,然后我們在Device界面中找到【Device and Pin Options…】進(jìn)入頁面配置IO。將未使用引腳設(shè)置為高阻輸入(As input tri-state),這樣上電后FPGA的所有不使用引腳都將進(jìn)入高阻抗?fàn)顟B(tài)。

接下來,將一些IO設(shè)置成普通IO,通過雙擊紅框位置,將一個(gè)個(gè)Value的值修改過來。

通過Quartus II軟件菜單欄中的【Assignments】→【Pin Planner】選項(xiàng)分配引腳

最后我們再進(jìn)行一次全編譯,成功編譯硬件系統(tǒng)后,將產(chǎn)生用于配置FPGA的UART_ip.sof文件。下面我們就來說明一下將.sof文件下載到FPGA目標(biāo)器件的步驟。

將下載器一端連接電腦,另一端與開發(fā)板上對應(yīng)端口連接,最后連接電源線并打開電源開關(guān)。接下來我們下載程序。工程打開后通過點(diǎn)擊工具欄中的“Programmer”圖標(biāo)打開下載界面,通過“Add File”按鈕選擇 output_files 目錄下的“UART_ip.sof”文件。

開發(fā)板電源打開后,在程序下載界面點(diǎn)擊“Hardware Setup”,在彈出的對話框中選擇當(dāng)前 的硬件連接為“USB-Blaster[USB-0]”。然后點(diǎn)擊“Start”將工程編譯完成后得到的 sof 文件下載到開發(fā)板中。

至此,硬件部分設(shè)計(jì)完成,下面開始基于Nios II SBT for Eclipse的軟件部分的設(shè)計(jì)。

軟件設(shè)計(jì)

我們通過Quartus II軟件菜單欄中的【Toos】→【Nios II SBT for Eclipse】,來啟動NiosII SBT for Eclipse軟件。打開Nios II SBT for Eclipse軟件后,會彈出Workspace Launcher頁面。我們這里將工作空間設(shè)置為qsys路徑下的software文件夾,如圖所示。

設(shè)置好工作空間后,我們點(diǎn)擊【OK】進(jìn)入Nios II SBT for Eclipse軟件主界面中,在該頁面我們通過單擊菜單欄中的【File】→【New】→【Nios II Application and BSP from Template】,來新建工程。

單擊【…】按鈕來選擇qsyshardware下的UART_ip.sopcinfo文件,即指向當(dāng)前硬件設(shè)計(jì)系統(tǒng)。Nios II SBT for Eclipse軟件會自動識別Qsys系統(tǒng)中CPU的名稱,所以CPU name一項(xiàng)會自動生成。接下來,要給Nios II SBT for Eclipse軟件中的工程命名,這里的名稱沒有特殊要求,我們這里名為UART。然后將工程存放的位置修改為qsyssoftwareUART。注意不要漏掉了“UART”,不然生成系統(tǒng)的時(shí)候會報(bào)錯(cuò)。最后我們來看下Project template窗口,該窗口中陳列的都是已經(jīng)設(shè)計(jì)好的軟件工程。我們可以從中選擇一個(gè),作為自己的工程的模板來使用。當(dāng)然也可以選擇Bland Project(空白工程),就需要自己寫所有的代碼。這里我們選擇的是Hello World模板工程,然后我們在它的基礎(chǔ)上進(jìn)行修改,這樣比空白工程更加方便。設(shè)置完工程后,直接點(diǎn)擊【Finish】完成工程創(chuàng)建。然后,在Nios II SBT for Eclipse軟件的

左側(cè)Project Explorer窗口中有兩個(gè)工程:UART 和 UART_bsp。其中UART 是C/C++應(yīng)用工程,而UART_bsp是描述Qsys系統(tǒng)硬件細(xì)節(jié)的系統(tǒng)庫。打開UART 工程里的 hello_world.c文件。

我們在這里要驗(yàn)證之前創(chuàng)建的Qsys系統(tǒng)是否能正常工作,驗(yàn)證方法和“Hello,World”是一樣的。

這時(shí)大家點(diǎn)擊【Run As】→【Nios II Hardware】,然后點(diǎn)擊【Target Connection】標(biāo)簽,然后在Target Connection窗口中點(diǎn)擊【Refresh Connections】按鈕后。這時(shí)軟件便會自動識別我們開發(fā)板上的Qsys系統(tǒng),并顯示Qsys系統(tǒng)的相關(guān)信息。我們接著點(diǎn)擊【Run】,軟件會把irq.elf文件下載至開發(fā)板中運(yùn)行起來。更加詳細(xì)的圖和文字描述,可以在“Hello,World”下載驗(yàn)證部分查看。

這時(shí),若之前創(chuàng)建的Qsys系統(tǒng)無誤,代碼下載完成后在Nios II console窗口會顯示“Hello from Nios II!”字符,如下圖所示。

驗(yàn)證完Qsys系統(tǒng)是否能正常運(yùn)行之后,我們就可以開始軟件部分的設(shè)計(jì)了。這時(shí)只需要在當(dāng)前的代碼窗口修改代碼就可以了。

下載驗(yàn)證

現(xiàn)在可以編譯UART工程了。右鍵UART工程,點(diǎn)擊build project。稍等片刻,Console窗口顯示的內(nèi)容如下圖所示,這表示工程編譯成功。

右鍵UART工程,點(diǎn)擊【Run As】→【Nios II Hardware】,代碼就被下載到開發(fā)板上了。接下來需要連接串口線并利用串口助手進(jìn)行驗(yàn)證。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5268

    瀏覽量

    119646
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    893

    瀏覽量

    41319
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1214

    瀏覽量

    100997

原文標(biāo)題:NIOS II 處理器系統(tǒng)設(shè)計(jì)之異步收發(fā)傳輸U(kuò)ART ip核(應(yīng)用部分)

文章出處:【微信號:fpgaerZT,微信公眾號:FPGA科技室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    DSP2812寄存器詳解

    DSP2812寄存器詳解DSP2812寄存器詳DSP2812寄存器詳解
    發(fā)表于 01-08 14:17 ?8次下載

    寄存器傳輸語言詳解

    數(shù)字系統(tǒng)中最常用到的微操作可分為四類: 1、寄存器傳送微操作 它可把二元信息從一個(gè)寄存器傳送到另一個(gè)寄存器,在
    發(fā)表于 08-16 09:32 ?6060次閱讀
    <b class='flag-5'>寄存器</b>傳輸語言<b class='flag-5'>詳解</b>

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解
    發(fā)表于 10-16 13:04 ?14次下載
    51<b class='flag-5'>寄存器</b>的所有<b class='flag-5'>寄存器</b>名稱,(包括<b class='flag-5'>寄存器</b>每一位的作用及用法)資源<b class='flag-5'>詳解</b>

    移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途

    移位寄存器是一個(gè)具有移位功能的寄存器,是指寄存器中所存的代碼能夠在移位脈沖的作用下依次左移或右移。本文主要介紹了移位寄存器的用途以及移位
    發(fā)表于 12-22 15:49 ?2w次閱讀

    寄存器操作方法_對寄存器操作的通用方法總結(jié)

    本文主要詳解寄存器操作方法以及對寄存器操作的通用方法總結(jié),具體的跟隨小編來了解一下。
    的頭像 發(fā)表于 05-22 15:53 ?2.2w次閱讀

    Zynq uart軟件中斷hook的操作過程

    早期運(yùn)用的arm芯片規(guī)模較小,在芯片上直接有uart中斷服務(wù)函數(shù)地址寄存器,直接將中斷服務(wù)函數(shù)的地址寫入寄存器就搞定了。
    發(fā)表于 05-02 14:36 ?1690次閱讀

    如何選擇51單片機(jī)的中斷寄存器

    首先介紹一下51的寄存器組:通過設(shè)置PSW寄存器的第3位和第4位可以任意切換寄存器組。在進(jìn)入中斷前,切換
    發(fā)表于 04-17 17:27 ?0次下載
    如何選擇51單片機(jī)的<b class='flag-5'>中斷寄存器</b>組

    ATMEL SAMC21的UART驅(qū)動寄存器操作和程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是ATMEL SAMC21的UART驅(qū)動寄存器操作和程序免費(fèi)下載。
    發(fā)表于 06-20 08:00 ?20次下載
    ATMEL SAMC21的<b class='flag-5'>UART</b>驅(qū)動<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>和程序免費(fèi)下載

    使用寄存器的邏輯操作指令是什么?

    操作系統(tǒng)中硬件相關(guān)的部分集中體現(xiàn)在匯編指令和對寄存器操作中,因此我們對ARM體系結(jié)構(gòu)的介紹也圍繞ARMv8-A的匯編指令和
    的頭像 發(fā)表于 06-18 15:49 ?3642次閱讀

    UART寄存器介紹中斷操作詳解

    通信的任務(wù)。所以在簡介部分,我們會對常用的寄存器進(jìn)行詳細(xì)的介紹。 上圖為一個(gè)典型系統(tǒng)中的UART核,它有兩個(gè)用戶可見的部分: l可通過Ava
    的頭像 發(fā)表于 08-25 16:46 ?1.6w次閱讀
    <b class='flag-5'>UART</b><b class='flag-5'>寄存器</b><b class='flag-5'>介紹</b>與<b class='flag-5'>中斷</b><b class='flag-5'>操作</b><b class='flag-5'>詳解</b>

    51單片機(jī)與中斷相關(guān)的寄存器

    51單片機(jī)與中斷相關(guān)的寄存器簡介中斷控制寄存器IE中斷優(yōu)先級控制寄存器IP定時(shí)
    發(fā)表于 11-12 11:36 ?8次下載
    51單片機(jī)與<b class='flag-5'>中斷</b>相關(guān)的<b class='flag-5'>寄存器</b>

    STM32的寄存器操作

    STM32的寄存器操作在使用STM32單片機(jī)編程時(shí)一般都用ST給的庫函數(shù)編程,庫函數(shù)編程的底層就是對單片機(jī)寄存器操作,庫函數(shù)就是一系列寄存器
    發(fā)表于 01-13 15:43 ?19次下載
    STM32的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通過寄存器模型對RTL中寄存器進(jìn)行讀寫訪問,或者同步寄存器模型與RTL中寄存器
    的頭像 發(fā)表于 07-12 09:37 ?977次閱讀
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>指南

    Linux驅(qū)動操作寄存器

    ,第四個(gè)參數(shù)是映射的大小。 驅(qū)動中操作: #define?OFFSET??0x60?//某個(gè)寄存器的偏移地址 static?int?my_probe(struct?platform_device
    的頭像 發(fā)表于 09-26 16:34 ?726次閱讀

    U54內(nèi)核中斷控制和狀態(tài)寄存器

    中斷控制和狀態(tài)寄存器 Machine Status Register (mstatus) mstatus 寄存器跟蹤并控制 hart 的當(dāng)前操作狀態(tài),包括是否啟用
    的頭像 發(fā)表于 10-08 09:54 ?786次閱讀
    U54內(nèi)核<b class='flag-5'>中斷</b>控制和狀態(tài)<b class='flag-5'>寄存器</b>