• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于NIOS II系統(tǒng)的異步串行通信功能的實(shí)現(xiàn)

      2011-08-20 14:32:10顏麗莎朱力宏
      關(guān)鍵詞:波特率字符寄存器

      顏麗莎 朱力宏

      (鄭州鐵路職業(yè)技術(shù)學(xué)院,河南 鄭州 450052)

      NIOS II系統(tǒng)是Altera公司推出的32位RSIC嵌入式處理器。它具有完善的軟件開(kāi)發(fā)套件,包括編譯器、集成開(kāi)發(fā)環(huán)境、JTAG調(diào)試等,設(shè)計(jì)者能夠用Altera Quarter II開(kāi)發(fā)軟件的SOPC Builde系統(tǒng)開(kāi)發(fā)工具創(chuàng)建處理器系統(tǒng),并能夠根據(jù)需求添加其組件。[1]

      通用異步收發(fā)器(UART),是嵌入式系統(tǒng)上很常用的一個(gè)串行接口,由于其方便、簡(jiǎn)單、易用等特性,在嵌入式系統(tǒng)中扮演著十分重要的角色。UART通過(guò)電平轉(zhuǎn)換可實(shí)現(xiàn)RS232、RS485、RS422等工業(yè)標(biāo)準(zhǔn)的接口,在相關(guān)工業(yè)控制通信中應(yīng)用十分廣泛。UART通信主要通過(guò)RXD和TXD兩條信號(hào)線,即可實(shí)現(xiàn)全雙工串行通信。

      在一些應(yīng)用中,往往需要兩三個(gè)甚至多個(gè)串口,選用現(xiàn)成的MCU方案,顯然很難滿足需求。由于UART作為一個(gè)組件與其相關(guān)外設(shè)的IP放在SOPC Builder里,可供用戶直接調(diào)用。因此,基于FPAG芯片的NIOS系統(tǒng),可根據(jù)需求方便地配置出多個(gè),甚至是幾十個(gè)串口,而且可任意分配引腳。因此,討論和采用NIOS II系統(tǒng)實(shí)現(xiàn)串口通信功能具有重要的實(shí)際意義。

      在以往的關(guān)于基于NIOS II系統(tǒng)串口使用的文章中,往往只針對(duì)于寄存器控制等某一細(xì)節(jié)問(wèn)題進(jìn)行討論。實(shí)際使用中,串口的軟件控制可以通過(guò)HAL系統(tǒng)庫(kù)、寄存器等幾種不同的控制方法實(shí)現(xiàn)。其每一種方法又各有優(yōu)劣,適合于不同的應(yīng)用場(chǎng)合。本文從NIOS II系統(tǒng)中串口硬件定制入手,重點(diǎn)討論幾種不同軟件控制方法的實(shí)現(xiàn)及特點(diǎn),并提供了詳細(xì)的例程代碼,為NIOS II系統(tǒng)的使用開(kāi)發(fā)者提供設(shè)計(jì)參考。

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

      本設(shè)計(jì)中要實(shí)現(xiàn)帶NIOS II的FPGA系統(tǒng)與其它系統(tǒng)間的串行通訊,首先要建立硬件連接。在硬件設(shè)計(jì)中,通常采用接口芯片MAX3232構(gòu)成RS232硬件電路實(shí)現(xiàn)不同系統(tǒng)間的電平匹配。

      在Quartus II中新建工程,將圖形設(shè)計(jì)作為頂層文件,通過(guò)SOPC將NIOS II系統(tǒng)模塊建立到頂層文件中。NIOS II處理器提供了豐富的外圍設(shè)備,可以根據(jù)需求在SOPC Builder中添加,其中主要包括UART串口IP核。

      UART核實(shí)現(xiàn)了基于FPGA的嵌入式系統(tǒng)與外部器件之間的串行字符流通信。該核可實(shí)現(xiàn)RS-232協(xié)議,提供可以調(diào)節(jié)的波特率、校驗(yàn)、停止/數(shù)據(jù)位,以及可選的RTS/CTS控制信號(hào),用戶可以根據(jù)需要配置該核。

      UART核提供了一個(gè)簡(jiǎn)單的寄存器映像Avalon從端口,它允許Avalon主外設(shè)(如NIOS II處理器)簡(jiǎn)單地通過(guò)讀和寫控制寄存器與該核實(shí)現(xiàn)通信。

      該核可直接由SOPC Builder工具創(chuàng)建,創(chuàng)建完成后的接口信號(hào)有RXD、TXD、CTX和RTS(其中后兩項(xiàng)可選)。定制時(shí),可通過(guò)配置對(duì)話框設(shè)定UART核的各項(xiàng)參數(shù)。

      主要參數(shù)有:

      (1)波特率設(shè)置選項(xiàng)

      UART核可以實(shí)現(xiàn)RS-232的所有標(biāo)準(zhǔn)波特率。波特率可以設(shè)定為固定波特率和可變波特率。當(dāng)設(shè)定為固定波特率時(shí),通過(guò)下拉框可選115200/9600等,不能通過(guò)軟件修改。可變波特率可以通過(guò)寫divisor寄存器設(shè)定分頻值,來(lái)改變波特率值。

      (2)數(shù)據(jù)位、停止位和奇偶校驗(yàn)位設(shè)置

      這些參數(shù)只能在配置系統(tǒng)創(chuàng)建時(shí)設(shè)置,不能在系統(tǒng)生成后通過(guò)寫相應(yīng)的寄存器修改。

      (3)流控制

      當(dāng)流控制選項(xiàng)Include CTS/RST pin& contro lregister bits選中時(shí),UART核的cts、dcts、rts、idcts等寄存器位直接反映流控制信號(hào),如果該選項(xiàng)未被選中時(shí),這些狀態(tài)位總是讀為0。

      UART核中的Avalon接口可選擇實(shí)現(xiàn)流傳輸模式。這允許主設(shè)備僅在UART準(zhǔn)備接收一個(gè)字符時(shí)寫數(shù)據(jù),且僅在UART有效數(shù)據(jù)時(shí)讀數(shù)據(jù),當(dāng)選項(xiàng)Include end-of-packet register是on狀態(tài)時(shí),UART核可以結(jié)束一個(gè)與主設(shè)備之間的流模式數(shù)據(jù)傳輸。它能自動(dòng)將接收的字符寫到存儲(chǔ)器中,直到RxD端接收到一個(gè)指定的字符為止。結(jié)束字符由endofpacket寄存器決定。

      2 軟件編程

      建立硬件IP核完成硬件設(shè)計(jì)以后,在NIOS II集成開(kāi)發(fā)環(huán)境里,通過(guò)軟件編程及設(shè)置實(shí)現(xiàn)UART的控制。對(duì)于NIOS處理器用戶來(lái)說(shuō),我們總結(jié)了有下列三種控制UART的編程方法。

      2.1 采用HAL系統(tǒng)庫(kù)驅(qū)動(dòng)

      用戶可以使用ANSI C標(biāo)準(zhǔn)庫(kù)函數(shù)訪問(wèn)UART核,例如printf()和getchar()等。ioctl()請(qǐng)求允許HAL用戶直接控制UART核與硬件相關(guān)的功能。

      HAL系統(tǒng)庫(kù)API支持對(duì)UART核功能部件的完全訪問(wèn)。NIOS II程序把UART核看成是一個(gè)字符模式設(shè)備,使用ANSIC標(biāo)準(zhǔn)庫(kù)函數(shù)發(fā)送和接收數(shù)據(jù)。

      下面的代碼是一個(gè)最簡(jiǎn)單的串口通信程序,具體功能是使用printf函數(shù)將一個(gè)字符顯示到stdout設(shè)備上。

      需要注意的是,這個(gè)例子中的SOPC Builder系統(tǒng)包含了一個(gè)名為uart0的UART核,采用這種方法的UART編程,要在NIOS II IDE的工程配置選項(xiàng)中將所使用的串口設(shè)備uart_0配置為stout。這種方法最簡(jiǎn)單,代碼最少。但是缺點(diǎn):1.效率較低;2.由于占用了stout等通道,調(diào)試時(shí),無(wú)法用jtag_uart通過(guò)NIOS II內(nèi)部控制臺(tái)打印信息。

      2.2 采用C標(biāo)準(zhǔn)庫(kù)函數(shù)調(diào)用

      通過(guò)使用C標(biāo)準(zhǔn)庫(kù)函數(shù)對(duì)UART設(shè)備完成特定字符操作,這是對(duì)串口UART核的標(biāo)準(zhǔn)使用方法。如下面實(shí)例:

      在本例中,SOPC Builder系統(tǒng)包含了一個(gè)名為uart1的UART核,該核不需要配置為stdout設(shè)備,程序中把UART設(shè)備作為HAL系統(tǒng)支持的文件類型打開(kāi)并使用標(biāo)準(zhǔn)的文件操作函數(shù)對(duì)UART核進(jìn)行讀寫。[2]

      這種方法將串口作為一個(gè)設(shè)備調(diào)用,代碼相對(duì)簡(jiǎn)單,但運(yùn)行效率較低,適用實(shí)時(shí)性要求不高的場(chǎng)合。

      2.3 通過(guò)UART寄存器操作。

      NIOS II軟核的串口直接讀寫寄存器方式的編程方法,與C語(yǔ)言的標(biāo)準(zhǔn)輸入/輸出語(yǔ)句相比,可極大地縮短程序執(zhí)行時(shí)間,并使得CPU能同時(shí)處理其他事務(wù)。

      頭文件“altera_avalon_uart_regs.h”中定義了UART寄存器映射。[3]如下為根據(jù)寄存器實(shí)現(xiàn)UART功能的驅(qū)動(dòng)程序uart.h文件的節(jié)選:

      這段程序采用寄存器控制的方法實(shí)現(xiàn)了單個(gè)字節(jié)的發(fā)送。

      這種方法采用寄存器直接控制串口,程序較為復(fù)雜,但執(zhí)行效率最高,時(shí)間最短。

      在Nios IDE集成開(kāi)發(fā)環(huán)境中將程序進(jìn)行編譯和仿真后,可直接通過(guò)JTAG下載線進(jìn)行在線Debug調(diào)試,也可利用Flash燒寫工具Flash programer,通過(guò)JTAG下載接口,將*.pof文件和*.jdi文件燒寫到片外Flash中后,實(shí)現(xiàn)脫機(jī)工作。最后將系統(tǒng)與計(jì)算機(jī)RS232串口相連通過(guò)串口調(diào)試助手進(jìn)行通訊實(shí)驗(yàn)。

      3 串口通信調(diào)試

      在NIOS II中調(diào)試“Hello world!”的范例的時(shí)候,經(jīng)常會(huì)出現(xiàn)這樣的錯(cuò)誤:nios2 terminal:can't open uart:Permission denied。這是因?yàn)樵谡{(diào)試程序時(shí),打開(kāi)了另外的串口調(diào)試工具,或者認(rèn)為是串口偵聽(tīng)器。實(shí)際上NIOS II中已經(jīng)集成了串口調(diào)試工具(串口偵聽(tīng)器)。

      在任務(wù)管理器中nios2 terminal.exe就是這個(gè)偵聽(tīng)串口的進(jìn)程。所以,如果用NIOS II來(lái)觀察發(fā)送的數(shù)據(jù),就不要用其他的串口調(diào)試工具。如果在編譯之前就打開(kāi)了其他的串口偵聽(tīng)器,編譯鏈接的時(shí)候就會(huì)出現(xiàn)上述的錯(cuò)誤。而在程序編譯鏈接后再去打開(kāi)其他的串口偵聽(tīng)器,串口就會(huì)因?yàn)閚ios2 terminal.exe占用而無(wú)法打開(kāi)。

      解決的方法,如果想用NIOS IDE觀察的話就不要事先打開(kāi)其他的串口調(diào)試工具。而如果想用其他的串口調(diào)試工具來(lái)觀察數(shù)據(jù),通過(guò)下載器將FPGA配置文件下載到板子后,刪除任務(wù)管理器中的nios2 terminal.exe,然后打開(kāi)串口調(diào)試工具。如果程序沒(méi)有問(wèn)題,運(yùn)行后就可以看到數(shù)據(jù)。[4]

      [1]黃佳瑋,陳福深.基于NIOS II的SOPC嵌入式系統(tǒng)設(shè)計(jì)[J].電子元器件應(yīng)用,2009,(7):48-51.

      [2]王剛,張瀲.基于FPGA的SOPC嵌入式系統(tǒng)設(shè)計(jì)與典型實(shí)例[M].北京:電子工業(yè)出版社,2009:255-265.

      [3]唐佳,楊路明.FPGA通用數(shù)字信號(hào)處理實(shí)驗(yàn)板的設(shè)計(jì)與實(shí)現(xiàn)[J].科技創(chuàng)新導(dǎo)報(bào),2010,(18):29-30.

      [4]李銳.基于嵌入式NIOS II軟核的串口直接讀寫寄存器方式編程[J].西安:現(xiàn)代電子技術(shù),2010,(14):37-39.

      [5]楊英強(qiáng).一種基于FPGA的UART電路實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2005,(12):82-84.

      猜你喜歡
      波特率字符寄存器
      尋找更強(qiáng)的字符映射管理器
      CAN 總線波特率自適應(yīng)程序設(shè)計(jì)
      智能制造(2020年5期)2020-07-03 06:24:00
      Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
      字符代表幾
      一種USB接口字符液晶控制器設(shè)計(jì)
      電子制作(2019年19期)2019-11-23 08:41:50
      消失的殖民村莊和神秘字符
      基于FPGA的異步串行通信波特率容錯(cuò)設(shè)計(jì)
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      C*Core芯片SCI串口波特率容限優(yōu)化
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
      安溪县| 吴桥县| 双牌县| 乳源| 苏尼特左旗| 城固县| 芦山县| 德化县| 桃江县| 泾川县| 井研县| 彰化县| 台江县| 高唐县| 盈江县| 青阳县| 铜鼓县| 华容县| 榆树市| 乐清市| 秀山| 调兵山市| 嘉黎县| 河西区| 崇左市| 会泽县| 乌鲁木齐市| 日喀则市| 布尔津县| 新和县| 雅安市| 普陀区| 土默特右旗| 达州市| 大邑县| 油尖旺区| 左贡县| 潜山县| 苍南县| 左权县| 海口市|