基于NI-VISA與LabVIEW的 USB接口應(yīng)用設(shè)計(jì)
3.1 系統(tǒng)的工作原理
根據(jù)USB協(xié)議,任何傳輸都是由主機(jī)(host)開(kāi)始的,單片機(jī)的前臺(tái)工作就是等待。主機(jī)Pc首先要發(fā)送令牌包給USB,D12接收到令牌包就給單片機(jī)發(fā)中斷,單片機(jī)進(jìn)入中斷服務(wù)程序。首先讀D12的中斷寄存器,判斷LJSB令牌包的類(lèi)型,然后執(zhí)行相應(yīng)的操作,因此,USB單片機(jī)程序主要就是中斷服務(wù)程序的編寫(xiě)。在USB單片機(jī)程序中要完成對(duì)各種令牌包的響應(yīng),主要是對(duì)端口的編程。
3.2軟件部分的設(shè)計(jì)
系統(tǒng)的固件程序從功能上分為兩部分,整個(gè)編程在Keil C環(huán)境下完成。
(1)溫度傳感器DSl8B20的讀取程序時(shí)
Dsl8B20單線通信功能是分時(shí)實(shí)現(xiàn)的。它有很?chē)?yán)格的時(shí)序要求,對(duì)它的操作必須按協(xié)議進(jìn)行,即初始化→發(fā)ROM操作命令→發(fā)存儲(chǔ)器操作命令→數(shù)據(jù)處理。
(2)MCU和USB接口的通信程序
本程序使用D12的端點(diǎn)1和端點(diǎn)2進(jìn)行上位計(jì)算機(jī)與MCU P89C52之間的命令和數(shù)據(jù)的傳輸。端點(diǎn)1和端點(diǎn)2設(shè)置成模式0(非同步方式)。其中端點(diǎn)1以中斷傳輸和應(yīng)答端點(diǎn)2以批量方式進(jìn)行數(shù)據(jù)的傳輸。端點(diǎn)1接收上位機(jī)發(fā)送過(guò)來(lái)的讀指令,端點(diǎn)2返回讀成功數(shù)據(jù)。
系統(tǒng)的固件程序編寫(xiě)以分層結(jié)構(gòu)展開(kāi)。它足一種積木式結(jié)構(gòu),如圖3所示。
①硬件提取層:單片機(jī)的I/O口、數(shù)據(jù)總線等硬件接口進(jìn)行操作。
②PDIUSBDl2命令接口:對(duì)D12器件進(jìn)行操作的模塊子程序集
③中斷服務(wù)程序:當(dāng)D12向單片機(jī)發(fā)出中斷請(qǐng)求時(shí),讀取D12中斷傳輸來(lái)的數(shù)據(jù),并設(shè)定事件標(biāo)志"EPPFIAGS"和Setup包數(shù)據(jù)緩沖區(qū)"CONROL_XFER"傳輸給主循環(huán)程序。
④標(biāo)準(zhǔn)設(shè)備請(qǐng)求處理程序:對(duì)USB的標(biāo)準(zhǔn)設(shè)備請(qǐng)求進(jìn)行處理。
⑤廠商請(qǐng)求處理程序:對(duì)用戶添加的廠商請(qǐng)求進(jìn)行處理。
⑥主程序:出USB數(shù)據(jù)傳輸請(qǐng)求,處理總線事件和調(diào)用用戶自定義功能子程序
以NI-VISA為驅(qū)動(dòng)的主機(jī)LabVIEW應(yīng)用程序的設(shè)計(jì),NI-VISA采用3.2版本,LabVIEW采用7.1版本。
整個(gè)應(yīng)用程序的主要框架使用了WHILE循環(huán)來(lái)進(jìn)行不斷的查詢。在程序的編寫(xiě)過(guò)程中,采用了類(lèi)似Windows程序中的事件驅(qū)動(dòng)機(jī)制,LabVIEW提供了這樣的結(jié)構(gòu)--事件結(jié)構(gòu)。各個(gè)消息的產(chǎn)生利用了各種界面控件并由Case選擇結(jié)構(gòu)給出,程序結(jié)構(gòu)圖如圖4所示。
為了便于說(shuō)明USB操作次序,把圖4中事件結(jié)構(gòu)展發(fā)USB驅(qū)動(dòng)應(yīng)用程序的捷徑。
在圖5中,USB RAW設(shè)備通信采用端點(diǎn)l以中斷傳輸方式接收上位機(jī)操作命令,協(xié)議可以自己約定。端點(diǎn)2以批量傳輸方式給上位機(jī)發(fā)回溫度數(shù)據(jù)。其中端點(diǎn)數(shù)"130"是對(duì)應(yīng)十六進(jìn)制數(shù)"0082"的十進(jìn)制數(shù),此數(shù)表示端點(diǎn)2批量輸入;而端點(diǎn)數(shù)"1"則是對(duì)應(yīng)十六進(jìn)制數(shù)"0001"的十進(jìn)制數(shù),此數(shù)表示端點(diǎn)1中斷輸出。
因?yàn)镹I-VISA3.2版本不支持USB屬性"中斷輸出"(interrupt out),因此為了實(shí)現(xiàn)USB端點(diǎn)1的中斷輸出問(wèn)題,這里把USB屬性"批量輸出"(bulk out pipe)和"VI Write"節(jié)點(diǎn)組合在一起,來(lái)實(shí)現(xiàn)端點(diǎn)1中斷輸出。從NI-VISA3.3起,可以直接利用"中斷輸出"(interrupt out)屬性來(lái)實(shí)現(xiàn)。
結(jié) 語(yǔ)
經(jīng)實(shí)踐證明,采用基于NI-VISA驅(qū)動(dòng)的USB接口應(yīng)用系統(tǒng)的設(shè)計(jì)非常容易,開(kāi)發(fā)難度低,對(duì)開(kāi)發(fā)者的要求不高;開(kāi)發(fā)出的系統(tǒng)穩(wěn)定可靠,即使對(duì)Windows編程不熟悉的人也可以開(kāi)發(fā)USB出應(yīng)用系統(tǒng)。它提供了另一種開(kāi)發(fā)USB驅(qū)動(dòng)應(yīng)用程序的捷徑。
參考文獻(xiàn):
[1].80C51datasheethttp://www.dzsc.com/datasheet/80C51_103447.html.
[2].ROMdatasheethttp://www.dzsc.com/datasheet/ROM_1188413.html.
[3].DS18B20datasheethttp://www.dzsc.com/datasheet/DS18B20_819975.html.
[4].P89C52X2datasheethttp://www.dzsc.com/datasheet/P89C52X2_538908.html.
評(píng)論