文獻(xiàn)標(biāo)識(shí)碼: B
文章編號(hào): 0258-7998(2010)11-0086-05
目前國(guó)內(nèi)外在解決儀器GPIB接口與RS-232或USB接口的轉(zhuǎn)接問題時(shí)能常遵循“微處理器+專用接口控制芯片”和“微處理器+FPGA”的設(shè)計(jì)思路,,其中微處理器主要為單片機(jī)、ARM,、PowerPC 和 MIPS等硬核處理器,;FPGA的作用主要是用來(lái)實(shí)現(xiàn)專用接口芯片的功能,方法是在FPGA內(nèi)部編寫專用接口芯片的IP核,?!拔⑻幚砥?專用接口控制芯片”的設(shè)計(jì)方案雖然成本較低,,技術(shù)門檻也不高,但是不利于系統(tǒng)的功能擴(kuò)展與性能升級(jí),;而“微處理器+FPGA”的設(shè)計(jì)方案中,,IP核的編寫難度較大,開發(fā)周期太長(zhǎng),;如果購(gòu)買IP核,,價(jià)格又過于昂貴。綜合分析以上方法的優(yōu)缺點(diǎn),,本文提出一種基于Nios II軟核處理器的SoPC解決方案,,利用Nios II軟核處理器的優(yōu)異性能以及uC/OS-II嵌入式實(shí)時(shí)操作系統(tǒng)在執(zhí)行效率、占用內(nèi)存,、實(shí)時(shí)性能以及可擴(kuò)展性等方面的優(yōu)勢(shì),,設(shè)計(jì)了GPIB、RS-232和USB接口協(xié)議轉(zhuǎn)換器,,實(shí)現(xiàn)了GPIB-USB,、GPIB-UART及UART-USB協(xié)議之間的轉(zhuǎn)換[1,2]。該方案具有設(shè)計(jì)靈活,、可重構(gòu),、集成度高、實(shí)現(xiàn)風(fēng)險(xiǎn)低,、開發(fā)周期短的優(yōu)點(diǎn),。1 總體設(shè)計(jì)方案
設(shè)計(jì)選用Altera公司的低成本SoPC平臺(tái)——Cyclone II系列FPGA。Cyclone II提供百萬(wàn)級(jí)門陣列資源,,包含4 608~68 416個(gè)邏輯單元,;提供1個(gè)全局時(shí)鐘網(wǎng)絡(luò)與4個(gè)鎖相環(huán);支持的存儲(chǔ)器類型包括雙端口及單口RAM,、ROM和FIFO緩沖器,,存儲(chǔ)器的數(shù)據(jù)總線最大可達(dá)36 bit,頻率可達(dá)250 MHz,。Cyclone II系列提供最高622個(gè)用戶自定義I/O引腳,為接口協(xié)議轉(zhuǎn)換器的設(shè)計(jì)提供了充裕的接口資源,。圖1給出了基于Cyclone II平臺(tái)的儀器接口協(xié)議轉(zhuǎn)換器的總體設(shè)計(jì)方案,。
圖1中的Nios II微處理器、存儲(chǔ)器接口,、片上存儲(chǔ)器,、定時(shí)器以及各類接口控制器都是由FPGA內(nèi)部的邏輯單元和RAM資源提供的。方案中RS-232接口協(xié)議的實(shí)現(xiàn)相對(duì)比較簡(jiǎn)單,,可以根據(jù)Altera公司提供的UART軟核配置獲得,而USB和GPIB協(xié)議部分均選用專用接口芯片來(lái)完成,。Nios處理器通過Avalon Switch Fabric總線將Nios II處理器,、存儲(chǔ)器和接口控制器等系統(tǒng)組件橋接在一起,形成一個(gè)接口統(tǒng)一的高性能SoPC系統(tǒng)[3],。其中,,Nios II處理器主要完成協(xié)議之間的轉(zhuǎn)換,并將?滋C/OS-II操作系統(tǒng)內(nèi)核移植到Nios II處理器上。開發(fā)中使用的工具包括Quartus II(含有集成的SoPC Builder工具包),、Nios II IDE以及仿真軟件ModelSim,,利用Verilog語(yǔ)言進(jìn)行硬件設(shè)計(jì),利用C語(yǔ)言進(jìn)行軟件開發(fā),。
2 接口硬件電路設(shè)計(jì)
2.1 GPIB接口電路設(shè)計(jì)
GPIB接口芯片選用NI公司的標(biāo)準(zhǔn)GPIB控制芯片NAT9914,,它能夠完成IEEE488.2標(biāo)準(zhǔn)協(xié)議中所有接口功能,并且在軟件上與TI公司的TMS9914A及NEC公司的?滋PD7120兼容,,具有可編程時(shí)鐘和波特率,,直接存儲(chǔ)器存取等功能。NAT9914配套使用數(shù)據(jù)轉(zhuǎn)換器75160以及握手線和控制線轉(zhuǎn)換器75162完成GPIB接口的設(shè)計(jì),。GPIB接口電路設(shè)計(jì)如圖2所示,。
2.2 USB接口電路設(shè)計(jì)
ISP1362是飛利浦公司推出的OTG(On-The-Go)產(chǎn)品,在單芯片上集成了一個(gè)OTG控制器,、一個(gè)高級(jí)主控制器(PSHC)和一個(gè)基于飛利浦公司ISP1181的外設(shè)控制器,。ISP1362的OTG控制器完全兼容USB2.0及OTG Suppliment 1.0協(xié)議,主機(jī)和設(shè)備控制器兼容USB 2.0協(xié)議,,支持12 Mb/s的高速傳輸和1.5 Mb/s的低速傳輸,。本設(shè)計(jì)中USB接口目前主要用來(lái)完成設(shè)備的功能,但考慮到以后繼續(xù)開發(fā)中功能升級(jí)的需要,,所以選用ISP1362芯片來(lái)完成USB接口的設(shè)計(jì),,它可以實(shí)現(xiàn)繼續(xù)開發(fā)中USB的主機(jī)和OTG功能。
2.3 RS-232接口電路設(shè)計(jì)
SoPC Builder的標(biāo)準(zhǔn)組件庫(kù)中提供了UART組件,,使用這個(gè)組件可以方便地實(shí)現(xiàn)UART接口功能,。為了保證UART的電氣相容性,使用了一片MAX232來(lái)實(shí)現(xiàn)UART的電平轉(zhuǎn)換,。
圖3為RS-232接口系統(tǒng)框圖,具有Avalon接口的通用UART核在FPGA上的Nios II處理器和外設(shè)之間實(shí)現(xiàn)了一種串行字符流通信方式,,然后通過MAX232芯片實(shí)現(xiàn)電平轉(zhuǎn)換,從而實(shí)現(xiàn)了RS-232接口功能,??梢愿鶕?jù)需要對(duì)其硬件進(jìn)行配置,改變其波特率,、奇偶校驗(yàn)位,、停止位、傳輸?shù)臄?shù)據(jù)位以及其他可選的RTS-CTS流控制信號(hào)等,。
3 SoPC Builde中總體架構(gòu)設(shè)計(jì)
設(shè)計(jì)中的Nios II微處理器內(nèi)核,、onchip_mem IP核,、timer IP核、 JTAG調(diào)試模塊jtag_uart,、Flash控制器cfi_flash,、SDRAM控制器sdram、UART組件uart以及用于液晶屏顯示的組件lcd等均使用SoPC Builder工具在標(biāo)準(zhǔn)組件庫(kù)中定制,而用于實(shí)現(xiàn)Avalon總線與片外NAT9914芯片和ISP1362芯片連接的接口控制器組件是通過自己編寫Verilog代碼來(lái)自定制的,。在SoPC Builder中通過Avalon Switch Fabric總線將各組件互連起來(lái),。
Nios II嵌入式處理器是基于哈佛結(jié)構(gòu)的RISC通用嵌入式處理器軟核,能與用戶邏輯相結(jié)合,,編程至Altera的FPGA中,。處理器具有32位指令集,32位數(shù)據(jù)通道和可配置的指令以及數(shù)據(jù)緩沖,。它針對(duì)可編程邏輯進(jìn)行了優(yōu)化設(shè)計(jì),,也為可編程單芯片系統(tǒng)設(shè)計(jì)了一套綜合解決方案[2]。Nios II處理器系列包括三種內(nèi)核:高性能的內(nèi)核Nios II/f,、低成本內(nèi)核Nios II/e及性能/成本折中的標(biāo)準(zhǔn)內(nèi)核Nios II/s,。本系統(tǒng)采用高性能的內(nèi)核Nios II/f以獲得最強(qiáng)的處理器性能。
4 接口協(xié)議轉(zhuǎn)換器軟件開發(fā)
4.1 軟件總體框架
軟件部分需要完成的任務(wù)主要包括:GPIB接口功能的開發(fā),、RS-232接口功能的開發(fā)和USB接口功能的開發(fā),;μC/OS-II嵌入式操作系統(tǒng)在Nios II處理器上的移植;在Nios II處理器上實(shí)現(xiàn)接口協(xié)議的轉(zhuǎn)換,,完成各個(gè)接口之間的相互通信,。Nios II系統(tǒng)下的軟件分層架構(gòu)如圖4所示。
Nios II 處理器硬件系統(tǒng)是軟件開發(fā)的基礎(chǔ),,同時(shí)也是整個(gè)分層架構(gòu)的核心,。
設(shè)備驅(qū)動(dòng)軟件是實(shí)現(xiàn)處理器與設(shè)備通信的特殊程序,它相當(dāng)于硬件的接口,,操作系統(tǒng)只有通過這個(gè)接口才能控制硬件設(shè)備的工作,,如果設(shè)備沒有對(duì)應(yīng)的驅(qū)動(dòng)軟件便不能正常工作。
硬件抽象層應(yīng)用程序接口HAL API(Application Program Interface),,是由HAL系統(tǒng)庫(kù)提供的,,它常與NewLib C標(biāo)準(zhǔn)庫(kù)集成在一起,為用戶訪問外設(shè)提供了標(biāo)準(zhǔn)的接口,,開發(fā)人員可以非常方便地使用這些接口來(lái)與底層硬件通信,。
μC/OS-II內(nèi)核在Nios II的HAL系統(tǒng)庫(kù)之上進(jìn)行操作,它可以訪問所有的HAL服務(wù),,并且能夠調(diào)用HAL的API函數(shù)。μC/OS-II提供信號(hào)量,、消息郵箱,、消息隊(duì)列,、事件標(biāo)志、消息傳遞,、存儲(chǔ)管理,、時(shí)間管理等函數(shù)。本設(shè)計(jì)中主要用它來(lái)完成接口協(xié)議轉(zhuǎn)換時(shí)的多任務(wù)調(diào)度,。
GPIB組件,、USB組件和RS-232組件分別實(shí)現(xiàn)了Nios II微處理器和GPIB、USB,、RS-232外設(shè)之間的通信,。
系統(tǒng)初始化部分用于初始化μC/OS-II、GPIB組件,、USB組件和RS-232組件,,實(shí)現(xiàn)所有應(yīng)用程序的任務(wù)、信號(hào)量,、隊(duì)列和事件標(biāo)志的實(shí)時(shí)操作系統(tǒng)任務(wù)之間通信資源的創(chuàng)建,。
最外一層包含發(fā)送GPIB命令和數(shù)據(jù)任務(wù)、接收GPIB數(shù)據(jù)和命令任務(wù),、發(fā)送USB命令和數(shù)據(jù)任務(wù),、接收USB命令和數(shù)據(jù)任務(wù)、發(fā)送RS-232命令和數(shù)據(jù)任務(wù),、接收RS-232命令和數(shù)據(jù)任務(wù)等,。同時(shí),該層通過信號(hào)量,、隊(duì)列和事件標(biāo)志實(shí)現(xiàn)任務(wù)之間的通信,。
4.2 GPIB接口的軟件開發(fā)
GPIB數(shù)據(jù)通信部分的代碼編程方式主要有查詢方式和中斷方式兩種。盡管查詢方式也能較好地實(shí)現(xiàn)數(shù)據(jù)通信的基本要求,,但其功能單一,、系統(tǒng)資源利用率低,不適合系統(tǒng)功能的維護(hù)和擴(kuò)展,。因此,,本設(shè)計(jì)中主要采用了中斷方式完成GPIB數(shù)據(jù)通信部分的代碼編程。引起NAT9914向處理器發(fā)出中斷信號(hào)的事件主要有發(fā)送數(shù)據(jù)事件(BO),、接收數(shù)據(jù)事件(BI),、接收數(shù)據(jù)結(jié)束事件(END)、接收GET命令事件和接收DCAS命令事件,。一旦這些事件發(fā)生,,NAT9914就會(huì)觸發(fā)Nios II處理器的外部中斷,Nios II終止正常工作,,將現(xiàn)場(chǎng)數(shù)據(jù)壓入堆棧保護(hù),,并調(diào)用外部中斷處理函數(shù),,響應(yīng)NAT9914芯片的中斷申請(qǐng)[3-4]。中斷處理服務(wù)流程圖如圖5所示,。
4.3 UART接口的軟件開發(fā)
在 Nios II 下,,由于HAL的存在,UART編程已經(jīng)變成標(biāo)準(zhǔn)的文件操作了,。Nios II 把對(duì)UART的流操作當(dāng)成了一種文件操作,。操作一個(gè)UART時(shí),只需要對(duì)它相應(yīng)的設(shè)備驅(qū)動(dòng)讀寫數(shù)據(jù),。Altera提供的UART驅(qū)動(dòng)程序是一個(gè)集成到HAL系統(tǒng)中的HAL字符模式設(shè)備驅(qū)動(dòng)程序,,可以采用標(biāo)準(zhǔn)輸入/輸出流的方式使用UART。使文件指針指向打開的UART設(shè)備,,即可通過標(biāo)準(zhǔn)C庫(kù)函數(shù)fwrite,、fread、fprintf,、fget等來(lái)進(jìn)行串口的讀/寫操作了,。
在寫設(shè)備程序時(shí)需要通過寄存器直接訪問UART。altera_avalon_uart_reg.h定義了UART核的寄存器映像,,提供訪問底層硬件的符號(hào)常量,,該文件的符號(hào)僅被設(shè)備驅(qū)動(dòng)程序使用。altera_avalon_uart.h,、altera_avalon_uart.c為HAL庫(kù)提供了UART核設(shè)備的驅(qū)動(dòng)程序,。
4.4 USB接口的軟件開發(fā)[5]
ISP1362在設(shè)計(jì)中作為USB設(shè)備使用。USB設(shè)備與Nios II系統(tǒng)通信的原理框圖如圖6所示,。系統(tǒng)上電后,,Nios II首先自身進(jìn)行初始化,初始化完成后,,通過發(fā)送相關(guān)指令,,完成對(duì)ISP1362芯片的初始化。ISP1362芯片初始化完成后,,主機(jī)就會(huì)給設(shè)備分配地址,,并根據(jù)設(shè)備提供的描述符完成對(duì)設(shè)備的配置,從而實(shí)現(xiàn)USB設(shè)備的一般功能,。
USB接口控制器的軟件結(jié)構(gòu)如圖7所示,。軟件包括信息處理和中斷服務(wù)例程兩部分。硬件抽象層用于將數(shù)據(jù)從硬件傳輸?shù)綄⒁恢餮h(huán)處理的存儲(chǔ)器空間中,。HAL4SYS.C,、HAL4D13.C、ISR.C、CHAP_9.C,、D13BUS.C和MAINLOOP.C是實(shí)現(xiàn)USB設(shè)備控制器功能的六個(gè)主要的程序文件,。其中,HAL4SYS.C和HAL4D13.C程序文件作為硬件抽象層,ISR.C程序文件作為中斷服務(wù)例程,,CHAP_9.C和D13BUS.C作為協(xié)議層,MAINLOOP.C用于主循環(huán)控制,。
ISP1362在Nios II系統(tǒng)中采用中斷的方法進(jìn)行任務(wù)處理,。當(dāng)ISP1362收到包含設(shè)備地址的輸出或設(shè)置事務(wù)時(shí),通過軟件控制將接收到的數(shù)據(jù)存儲(chǔ)在適當(dāng)?shù)亩它c(diǎn)位置,,然后觸發(fā)一個(gè)中斷,。設(shè)備的中斷服務(wù)例程處理接收到的數(shù)據(jù)。當(dāng)設(shè)備收到包含設(shè)備地址的輸入事務(wù)時(shí),,如果ISP1362有準(zhǔn)備傳給主機(jī)的數(shù)據(jù),,它從指定的端點(diǎn)送出數(shù)據(jù),然后觸發(fā)一個(gè)中斷,,設(shè)備的中斷服務(wù)例程做適當(dāng)?shù)奶幚?,然后?zhǔn)備下一個(gè)輸入事務(wù)。
4.5 μC/OS-II實(shí)時(shí)操作系統(tǒng)
根據(jù)多功能儀器接口協(xié)議轉(zhuǎn)換器的特點(diǎn),,設(shè)計(jì)需滿足實(shí)時(shí)性和并發(fā)性的要求,,以便更好地支持多種接口協(xié)議運(yùn)行時(shí)的多任務(wù)環(huán)境的調(diào)度,所以應(yīng)用軟件應(yīng)該基于嵌入式實(shí)時(shí)操作系統(tǒng),??紤]到?滋C/OS-II的規(guī)模較小、實(shí)時(shí)性和可靠性較高,以及Nios II IDE開發(fā)環(huán)境對(duì)?滋C/OS-II的良好支持,,故操作系統(tǒng)選擇?滋C/OS-II,。它通過為每個(gè)任務(wù)分配單獨(dú)的任務(wù)堆棧來(lái)保存任務(wù)工作環(huán)境,提供任務(wù)管理與調(diào)度,,任務(wù)間的同步,、互斥與通信,時(shí)間和中斷管理,、內(nèi)存的動(dòng)態(tài)分配等多種系統(tǒng)服務(wù),。設(shè)計(jì)中?滋C/OS-II主要完成任務(wù)的管理與調(diào)度,通過創(chuàng)建消息郵箱,、信號(hào)量實(shí)現(xiàn)任務(wù)與任務(wù)之間,、任務(wù)與中斷服務(wù)程序之間的同步與互斥,以保證它們協(xié)調(diào)運(yùn)行[6],。
5 系統(tǒng)功能驗(yàn)證
5.1 RS-232與GPIB接口通信功能測(cè)試
通過UART數(shù)據(jù)線將計(jì)算機(jī)的UART接口與接口轉(zhuǎn)換器的UART接口連接,,將接口轉(zhuǎn)換器的GPIB接口與Aglient 33250A連接。
運(yùn)行串口調(diào)試助手,并在串口調(diào)試助手中進(jìn)行如下設(shè)置:串口設(shè)置為COM1,,波特率設(shè)置為57 600,,校驗(yàn)位為NONE,數(shù)據(jù)位為8,,停止位為1,。設(shè)置完成后,在串口調(diào)試助手中手動(dòng)發(fā)送GPIB接口的SCPI命令,。
以發(fā)送*IDN?命令為例,,串口調(diào)試助手下方輸入*IDN?,之后點(diǎn)擊發(fā)送,,觀察串口調(diào)試助手接收窗口的顯示變化,,這時(shí)會(huì)顯示Received String: Agilent Technologies,33250A,0,2.04-1.01-2.00-03-2,其中Agilent Technologies,33250A,0,2.04-1.01-2.00-03-2是33250A接收到來(lái)自計(jì)算機(jī)串口的識(shí)別查詢命令后,要將自己的標(biāo)識(shí)發(fā)往的計(jì)算機(jī)串口號(hào),。
5.2 RS-232與USB接口通信功能測(cè)試
分別通過USB接口線和RS-232接口線將計(jì)算機(jī)主機(jī)USB接口與接口轉(zhuǎn)換器USB接口相連,,同時(shí)通過UART數(shù)據(jù)線將計(jì)算機(jī)的UART接口與接口轉(zhuǎn)換器的UART接口連接。
運(yùn)行USB調(diào)試助手和串口調(diào)試助手,,同時(shí)觀察USB接口發(fā)送數(shù)據(jù)到串口的情況,。主機(jī)通過USB調(diào)試助手向協(xié)議轉(zhuǎn)換器發(fā)送8 B數(shù)據(jù)“6e 69 68 61 6f 6d 61 00”,這8 B數(shù)據(jù)ASCII碼對(duì)應(yīng)的字符串為“nihaoma”,,觀察USB調(diào)試助手接收區(qū)和串口調(diào)試助手的接收區(qū),,這時(shí)USB調(diào)試助手接收區(qū)顯示“6e 69 68 61 6f 6d 61 00”,串口調(diào)試助手的接收區(qū)顯示“usb received 8 bytes data is:nihaoma”,。
系統(tǒng)基于SoPC平臺(tái),,采用軟硬件協(xié)同設(shè)計(jì)的方法完成了GPIB、UART和USB接口協(xié)議轉(zhuǎn)換器的設(shè)計(jì),。實(shí)現(xiàn)了RS-232接口的收發(fā)功能,、USB設(shè)備控制器功能、GPIB接口的控者,、聽者,、講者、源方掛鉤,、受方掛鉤五大功能,以及通過RS-232接口控制GPIB接口功能和通過USB接口控制RS-232接口功能,。
參考文獻(xiàn)
[1] 吳杲,顧亞平,,陳光礻禹 . USB-GPIB控制器設(shè)計(jì)[J].測(cè)控技術(shù),,2004,23(3):59-61.
[2] 李蘭英. Nios II 嵌入式軟核SoPC設(shè)計(jì)原理及應(yīng)用[M]. 北京:航空航天大學(xué)出版社,2006.
[3] 黃君凱,,吳延軍. RS232-GPIB控制器的設(shè)計(jì)[J]. 電子技術(shù)應(yīng)用,,2006,32(3):90-92.
[4] National Instruments Corp. Nat9914 Reference Manual[Z]. 1995.
[5] Philips Semiconductors. ISP1362 Embedded Programming Guide Rev: 0.9[Z]. 2002.
[6] [美] Jean J. Labrosse. 嵌入式實(shí)時(shí)操作系統(tǒng)?滋C/OS-II [M]. 邵貝貝,,等譯. 第2版. 北京:北京航空航天大學(xué)出版社,2003.