基于USB2.0與FPGA技術(shù)的高速數(shù)據(jù)采集系統(tǒng)的設(shè)計
ISP1581接收到主機(jī)的數(shù)據(jù)后,將根據(jù)相應(yīng)的情況設(shè)置片內(nèi)的中斷寄存器標(biāo)志中斷源,然后向單片機(jī)申請中斷,中斷服務(wù)程序流程如圖5所示。單片機(jī)響應(yīng)中斷后,首先讀取中斷標(biāo)志寄存器并判斷中斷源,然后設(shè)置相應(yīng)的標(biāo)志。在用戶的發(fā)送/接收程序中,將根據(jù)相應(yīng)的標(biāo)志產(chǎn)生相應(yīng)的動作。例如,主機(jī)發(fā)送一段數(shù)據(jù)給ISP1581,ISP1581接收、握手完畢后,設(shè)置中斷標(biāo)志并申請中斷。在用戶的任務(wù)中發(fā)現(xiàn)有數(shù)據(jù)接收的標(biāo)志,就可以讀出ISP1581中的數(shù)據(jù)。而ISP1581向主機(jī)發(fā)送數(shù)據(jù)時,首先是主機(jī)發(fā)送一個IN類型的令牌發(fā)起一次傳輸,如果此時ISP1581相應(yīng)端點的FIFO非空,則立即發(fā)送數(shù)據(jù),然后向單片機(jī)申請中斷,響應(yīng)中斷以后如果還有數(shù)據(jù)要發(fā)送,則應(yīng)該向ISP1581的FIFO中寫入數(shù)據(jù),否則直接清空中斷標(biāo)志即可。主機(jī)和數(shù)據(jù)采集器之間的握手配合要事先設(shè)計好。
本文引用地址:http://2s4d.com/article/86243.htm根據(jù)輸入傳輸要求,在具體的設(shè)計中,除了主數(shù)據(jù)傳輸端點外,還配置了一個數(shù)據(jù)緩沖區(qū)為64字節(jié)的、工作于中斷傳輸方式的端點作為命令端口,負(fù)責(zé)與主機(jī)進(jìn)行通信握手。如果主機(jī)想從設(shè)備讀取數(shù)據(jù),則首先發(fā)送一個讀取命令,單片機(jī)接收到該命令后,就向主數(shù)據(jù)端點的FIFO中寫入數(shù)據(jù),隨后主機(jī)發(fā)出讀數(shù)據(jù)令牌,正好有數(shù)據(jù)可以發(fā)送。通過命令端口還可以發(fā)送各種命令,控制數(shù)據(jù)采集器動作。
3 FPGA數(shù)據(jù)采集模塊設(shè)計
3.1 模塊劃分
FPGA模塊劃分為A/D接口、FIFO、單片機(jī)接口、DMA接口控制、主控制器等模塊,其中設(shè)置了一些可以單片機(jī)寫入的寄存器。A/D的采集速度,F(xiàn)IFO的空、滿、數(shù)據(jù)寫入、讀出速度都可以靈活配置。整個模塊以Verilog語言寫成,稍加修改可以同各種A/D芯片接口。整個設(shè)計在Altera公司的Cyclone系列的EP1C12中完成。在ACEX1K系列EC1K100器件上也可以實現(xiàn),工作時鐘頻率為50MHz。
為了提高系統(tǒng)的靈活性,在信號的調(diào)理、濾波模塊中使用了Lattice公司的ispPAC80可編程濾波器作為輸入濾波器,可以靈活地設(shè)定抗混疊濾波器的截止頻率,最大截至頻率可以達(dá)到750kHz,完全可以滿足一般中、高頻信號的濾波。FPGA作為A/D控制器可以同多種A/D芯片接口,本設(shè)計中使用了TI公司的10位高速A/D芯片TLC876。芯片工作于流水線方式,最高采樣速率為20MSPS。
3.2 與單片機(jī)及ISP1581的接口
FPGA在與單片機(jī)信號的接口過程中,使用了同步設(shè)計的方法。即首先對單片機(jī)的I/O信號進(jìn)行采樣同步化,獲得各信號上升、下降沿的時刻,輸出同步脈沖,然后在這些時刻點處根據(jù)同步脈沖的出現(xiàn)與否來控制系統(tǒng)進(jìn)行動作。這種設(shè)計的優(yōu)點是可以在設(shè)計中采用同步狀態(tài)機(jī),以獲得較高的運行速度和穩(wěn)定的工作性能。這也是ALTERA、XILINX等公司的FPGA數(shù)字系統(tǒng)設(shè)計中所推薦使用的方法。
為了提高FPGA中的FIFO與ISP1581中的數(shù)據(jù)存儲器的數(shù)據(jù)交換速度,F(xiàn)PGA與ISP1581之間采用DMA方式進(jìn)行數(shù)據(jù)交換。
ISP1581有兩種工作方式,由BUS_CONF、MODE0、MODE1三根引腳控制:
(1)如果上電時檢測到BUS_CONF引腳為低電平,則工作于分裂總線方式(Split Bus Mode)。ISP1581具有8-bit地址/數(shù)據(jù)復(fù)用總線和16-bit的DMA專用數(shù)據(jù)線。此時MODE1引腳如果為低電平,則可以將芯片的ALE/A0引腳與89X51的ALE腳直接相連,進(jìn)行地址/數(shù)據(jù)總線復(fù)用;而如果MODE1為高電平,則ALE/A0腳要接其他的89X51引腳,由用戶編程將ALE/A0腳拉高/低進(jìn)行地址/數(shù)據(jù)復(fù)用,而MODE0腳在這種方式下沒有使用或作為其他用途。
(2)如果上電時檢測到BUS_CONF引腳為高電平,則工作于通用處理器方式(Generic Processor Mode)。此時MODE1腳沒有使用(可接Vcc),MODE0引腳則可接低/高電平,這樣可以使芯片的讀/寫引腳分別符合Motorola/89X51微處理器的讀寫規(guī)范。所以讓ISP1581芯片工作于分裂總線方式可以方便地與8051系列單片機(jī)接口,其AD[7:0]作為數(shù)據(jù)/地址總線復(fù)用,RD、WE、ALE分別為讀、寫、地址鎖存線,DATA[15:0]作為DMA數(shù)據(jù)總線使用。
ISP1581芯片中與DMA相關(guān)的引腳有DREQ、DACK、DIOR、DIOW。DMA傳輸前必須設(shè)定工作模式、初始化DMA相關(guān)寄存器,然后對DMA命令寄存器寫入一個命令便可以啟動DMA傳輸。傳輸模式有主、從、IDE、ATA等方式。通用數(shù)據(jù)采集系統(tǒng)比較適合采用從模式,在這種模式下,單片機(jī)接收到主機(jī)發(fā)來的開始采集命令后,立即命令FPGA啟動采樣,然后命令I(lǐng)SP1581啟動DMA傳輸,ISP1581將DREQ引腳拉高,表示請求數(shù)據(jù),此時FPGA將數(shù)據(jù)準(zhǔn)備好后,拉低DACK引腳,待準(zhǔn)備好數(shù)據(jù)后,在DIOR線上產(chǎn)生讀脈沖,供ISP1581將數(shù)據(jù)讀入內(nèi)部FIFO。DMA也可以使用主模式,此時讀脈沖DIOR由ISP1581產(chǎn)生。DMA工作時序圖如圖6所示。
4 PC機(jī)多線程數(shù)據(jù)采集程序設(shè)計
USB的數(shù)據(jù)傳輸使用了虛擬管道的概念,可以同時接入127個設(shè)備。每個設(shè)備可以擁有若干個端點,每個端點可以跟主機(jī)組成一個連接,構(gòu)成一個通信的最小實體。在數(shù)據(jù)傳輸過程中,只要帶寬允許,主機(jī)可以同時跟幾個端點通信,因此要求在主機(jī)的應(yīng)用程序中開啟多個線程進(jìn)行通信。在本設(shè)計中,采用了命令端點和數(shù)據(jù)端點分開的方式。命令端點配置成中斷或批量傳輸方式,在主機(jī)應(yīng)用程序中專門開啟一個線程同該端點進(jìn)行通信,開啟另外一個線程進(jìn)行采樣數(shù)據(jù)傳輸,而兩個傳輸之間互相不影響。用戶界面使用另外的線程,這樣在傳輸過程中,應(yīng)用程序可以隨時響應(yīng)用戶的命令。在具體的設(shè)計中,點擊數(shù)據(jù)采集開始命令即建立并且啟動一個采集線程。在這個無限循環(huán)的線程函數(shù)中設(shè)置了一個標(biāo)志變量,如果該變量為真,則線程函數(shù)繼續(xù)運行;否則線程終止,停止采集。這樣用戶界面線程可以通過修改線程運行標(biāo)志變量來控制線程的運行。采用多線程采集程序的一個問題是線程函數(shù)必須是一個全局函數(shù),不屬于任何一個類,這樣它就無法訪問類的私有成員或保護(hù)成員,解決這個問題的方法是:因為線程函數(shù)在創(chuàng)建時允許傳送一個指針參數(shù)給它,于是可以構(gòu)造一個結(jié)構(gòu)數(shù)據(jù)類型,數(shù)據(jù)成員中包含一個指向類的指針。在創(chuàng)建線程時將想要訪問的類的指針包含在一個按前述定義的結(jié)構(gòu)變量中,并將該結(jié)構(gòu)的指針作為參數(shù)傳給線程函數(shù)。這樣就可以在線程函數(shù)中定義一個類對象,并把前述的類指針賦給它,通過類指針就可以訪問該對象中的所有成員了。在本設(shè)計中采用多線程程序設(shè)計后,系統(tǒng)工作非常穩(wěn)定。
目前,國內(nèi)外的數(shù)據(jù)采集系統(tǒng)常用的接口方式有多種,如 RS232 串行口、并行口,ISA 總線、PCI總線等。這些總線接口雖各具優(yōu)點,但也都有其難以克服的缺點而被逐漸淘汰。USB接口具有連接方便、無需外接電源、即插即用、支持熱插拔、動態(tài)加載驅(qū)動程序等特有優(yōu)點,在主機(jī)和數(shù)據(jù)采集系統(tǒng)之間可以實現(xiàn)簡單、快捷、可靠的連接和通信。本設(shè)計應(yīng)用ISP1581USB接口芯片與FPGA技術(shù),構(gòu)建了一個使用靈活的通用數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)充分利用了PC機(jī)的大存儲量,強大的數(shù)據(jù)處理能力,高清晰的大屏幕顯示(相對于嵌入式系統(tǒng)而言),以及嵌入式系統(tǒng)的實時與靈活性。目前正在使用此平臺構(gòu)建一個在消聲室環(huán)境中針對機(jī)械振動噪聲的采集與分析系統(tǒng)。此系統(tǒng)在智能儀器以及工業(yè)自動化等眾多領(lǐng)域中必將有廣泛的應(yīng)用前景。
參考文獻(xiàn)
[1] 蕭世文. USB2.0硬件設(shè)計[M].北京:清華大學(xué)出版社,2002.
[2] 周立功.PDIUSBD12USB固件編程與驅(qū)動開發(fā)[M].北京:北京航空航天大學(xué)出版社,2003.
[3] 張念淮. USB總線接口開發(fā)指南[M].北京:國防工業(yè)出版社,2001.
[4] Philips Semiconductors. ISP1581 programming guide[Z].2004.
[5] USB.org. Universal serial bus specification rev.2.0[Z].2006. http://www.usb.org/developers/docs/.
[6] 倪明輝. USB在FPGA控制的高速數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[J]. 計算機(jī)測量與控制,2006,14(2).
評論