畢業(yè)設(shè)計(jì)(論文)基于單片機(jī)MSP430F449的USB接口數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)_第1頁
畢業(yè)設(shè)計(jì)(論文)基于單片機(jī)MSP430F449的USB接口數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)_第2頁
畢業(yè)設(shè)計(jì)(論文)基于單片機(jī)MSP430F449的USB接口數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)_第3頁
畢業(yè)設(shè)計(jì)(論文)基于單片機(jī)MSP430F449的USB接口數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)_第4頁
畢業(yè)設(shè)計(jì)(論文)基于單片機(jī)MSP430F449的USB接口數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1 緒 論1.1 usb概述1.1.1 usb的起源和發(fā)展歷史usb是英文universal serial bus的縮寫,中文含義是通用串行總線。它是一種應(yīng)用在pc領(lǐng)域的新型接口技術(shù)上面提到的外設(shè)接口沒有統(tǒng)一的標(biāo)準(zhǔn),usb就將這些接口統(tǒng)一起來,使用一個(gè)4針插頭作為標(biāo)準(zhǔn)插頭。通過這個(gè)插頭,采用菊花鏈形式可以把所有的外設(shè)連接起來,并且不會損失帶寬。usb0.9是由7家主要電腦、電子科技廠商,包括了 compaq、digital、ibm、intel、微軟、nec以及北方電訊(加拿大)在1995年11月研發(fā)出來的。1998年后,隨著微軟在windows 98中內(nèi)置了對usb接口的支持模塊,加上usb設(shè)

2、備的日漸增多,usb接口才逐步走進(jìn)了實(shí)用階段。這幾年,隨著大量支持usb的個(gè)人電腦的普及,usb成為pc的標(biāo)準(zhǔn)接口已是大勢所趨。在主機(jī)(host)端,最新推出的pc機(jī)幾乎100%支持usb;而在外設(shè)(device)端,使用usb接口的設(shè)備也與日俱增,例如數(shù)碼相機(jī)、掃描儀、游戲桿、磁帶和軟驅(qū)、圖像設(shè)備、打印機(jī)、鍵盤、鼠標(biāo)等等。1.1.2 usb的特點(diǎn)usb之所以有著巨大的魅力主要是由于它的許多其他總線無法比擬的優(yōu)點(diǎn)。這里主要就目前國內(nèi)應(yīng)用的usb1.1技術(shù)做一些研究和應(yīng)用。usb的規(guī)范能針對不同的性能價(jià)格比要求提供不同的選擇,以滿足不同的系統(tǒng)和部件及相應(yīng)不同的功能,其主要優(yōu)點(diǎn)可歸結(jié)為以下幾點(diǎn):a

3、速度快。 b設(shè)備安裝和配置容易。 c易于擴(kuò)展。d能夠采用總線供電。 e使用靈活。 f價(jià)廉物美。1.1.3 目前usb的應(yīng)用由于usb設(shè)備的諸多優(yōu)點(diǎn),自97年,微軟推出win9597后,usb進(jìn)入實(shí)戰(zhàn)階段,但由于這個(gè)版本對usb的支持屬于外掛式模塊,因此直到windows98推出后,usb接口的支持模塊才真正日趨成熟。隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,對外部總線速度的要求越來越高。在許多便攜式電腦上,已經(jīng)找不到rs-232接口。迄今為止,常用的usb總線標(biāo)準(zhǔn)有1998年發(fā)布的usb1.1版本和2000年發(fā)布的usb2.0版本。其中1.1版本支持兩種傳輸速率:1.5mbps和12mbps,主要應(yīng)用在低速傳

4、輸要求的場合;而2.0版本面向高數(shù)據(jù)率傳輸?shù)膱龊?,支?80mbps的傳輸速度,并向下完全兼容usb1.1協(xié)議。1.2 usb在嵌入式系統(tǒng)上的應(yīng)用前景usb在嵌入式系統(tǒng)中的應(yīng)用發(fā)展迅速?,F(xiàn)在,計(jì)算機(jī)外圍設(shè)備的市場上使用usb接口的數(shù)碼相機(jī),掃描儀,硬盤,鼠標(biāo)等家庭設(shè)備比較常見,但是使用usb接口的智能儀器還沒有見到。由于usb的諸多優(yōu)點(diǎn),在傳輸距離不是問題的前提下,我們可以設(shè)計(jì)出許多具有市場前途的智能儀器。1.3 usb系統(tǒng)組成一個(gè)usb系統(tǒng)主要被定義為三個(gè)部分:usb的互連,usb的設(shè)備,usb的主機(jī)。1.3.1 usb的互連usb的互連是指usb設(shè)備與主機(jī)之間進(jìn)行連接和通信的操作,主要包括

5、以下幾方面: 總線的拓?fù)浣Y(jié)構(gòu):usb設(shè)備與主機(jī)之間的各種連接方式; 內(nèi)部層次關(guān)系:根據(jù)性能疊置,usb的任務(wù)被分配到系統(tǒng)的每一個(gè)層次; 數(shù)據(jù)流模式:描述了數(shù)據(jù)在系統(tǒng)中通過usb從產(chǎn)生方到使用方的流動方式; usb的調(diào)度:usb提供了一個(gè)共享的連接。對可以使用的連接進(jìn)行了調(diào)度以支持同步數(shù)據(jù)傳輸,并且避免的優(yōu)先級判別的開銷。 總線拓樸結(jié)構(gòu)包括四個(gè)重要的組成部分。1 主機(jī)和設(shè)備:usb系統(tǒng)的基礎(chǔ)組成部分。2 物理拓樸結(jié)構(gòu):描述usb系統(tǒng)中的各組成部分是如何連接起來的。3 邏輯拓樸結(jié)構(gòu):描述usb系統(tǒng)中各種組成部分的地位和作用,以及描述從主機(jī)和設(shè)備的角度觀察到的usb系統(tǒng)。4 客戶軟件層與應(yīng)用層的關(guān)系

6、:描述從客戶軟件層看到的應(yīng)用層的情況,以及從應(yīng)用層看到的客戶軟件層的情況。1.3.2 usb的主機(jī)圖1.1展示了usb通信模型之間基本的信息流與互連關(guān)系??蛻魎sb系統(tǒng)主機(jī)控制器功能部件usb設(shè)備usb總線接口 圖1.1 通信模型層次關(guān)系圖實(shí)際的信息流邏輯的信息流由圖可見,主機(jī)與設(shè)備都被劃分成不同的層次。主機(jī)上垂直的箭頭是實(shí)際的信息流。設(shè)備上對應(yīng)的接口是基于不同實(shí)現(xiàn)的。在主機(jī)與設(shè)備之間的所有通信最終都是通過usb的電纜進(jìn)行,然而,在上層的水平層之間存在邏輯的主機(jī)設(shè)備信息流。主機(jī)上的客戶軟件和設(shè)備功能部件之間的通信是基于實(shí)際的應(yīng)用需求及設(shè)備所能提供的能力??蛻糗浖c功能部件之間的透明通信的要求,

7、決定主機(jī)和設(shè)備下層部件的功能以及它們的界面(interface)。1.3.3 usb設(shè)備架構(gòu)usb設(shè)備可被劃分三層: 底層是傳送和接收數(shù)據(jù)包的總線接口; 中間層處理總線接口與不同端點(diǎn)之間的數(shù)據(jù)路由,端節(jié)點(diǎn)是數(shù)據(jù)的終結(jié)提供處或使用處,它可被看作數(shù)據(jù)源或數(shù)據(jù)接收端(sink); 最上層的功能由串行總線設(shè)備提供,比如鼠標(biāo),或isdn接口。2 基于msp430單片機(jī)的usb接口數(shù)據(jù)傳輸系統(tǒng)硬件設(shè)計(jì)本設(shè)計(jì)的硬件系統(tǒng)實(shí)現(xiàn)了信號的采集、轉(zhuǎn)換,并將所得的數(shù)字信號進(jìn)行傳輸,并通過大量中斷來實(shí)現(xiàn)系統(tǒng)的低功耗。本設(shè)計(jì)的硬件系統(tǒng)是以超低功耗16位單片機(jī)msp430f449為核心的數(shù)據(jù)傳輸系統(tǒng)。整個(gè)系統(tǒng)可分為:信號a/

8、d轉(zhuǎn)換系統(tǒng)、單片機(jī)系統(tǒng)、復(fù)位電路設(shè)計(jì)、電源設(shè)計(jì)及usb控制器系統(tǒng)。原理圖如圖2.1所示。 電源電路msp430f449c p us y s t e m信號的采 集u s b復(fù)位電路圖2.1 系統(tǒng)結(jié)構(gòu)圖2.1 單片機(jī)的選擇單片機(jī)以其超小型化、高可靠性和高性價(jià)比的特點(diǎn),廣泛應(yīng)用于各個(gè)領(lǐng)域。使傳統(tǒng)的電子技術(shù)產(chǎn)生了一場巨變。經(jīng)過多年的發(fā)展,單片機(jī)品種不斷增多,功能不斷增強(qiáng),應(yīng)用范圍不斷擴(kuò)大,相應(yīng)的開發(fā)技術(shù)也有了很大發(fā)展。隨著移動通信、網(wǎng)絡(luò)技術(shù)、多媒體技術(shù)等高科技產(chǎn)品應(yīng)用的日益廣泛,16位、32位單片機(jī)也都得到了長足的發(fā)展。就目前而言,嵌入式應(yīng)用硬件設(shè)計(jì)采用滿足要求的單片機(jī)是理想的選擇,采用cpu+pl

9、d+ad/da模式是明智的選擇。現(xiàn)在新型的單片機(jī)內(nèi)部已經(jīng)集成了越來越多的部件,這些部件包括一般常用的電路,例如:定時(shí)器,比較器,a/d轉(zhuǎn)換器,d/a轉(zhuǎn)換器,串行通信接口,watchdog電路,lcd控制器等。有的單片機(jī)為了構(gòu)成控制網(wǎng)絡(luò)或形成局域網(wǎng),內(nèi)部含有局域網(wǎng)絡(luò)控制模塊can。現(xiàn)在內(nèi)置flash的芯片也有帶jtag或類似接口的產(chǎn)品,支持在線程序下載,只需簡單的下載開發(fā)工具,大大方便了程序的開發(fā)和現(xiàn)場的修改。課題中所使用的單片機(jī)是美國德州儀器公司在2000年開發(fā)的msp430f449。該單片機(jī)在設(shè)計(jì)上打破常規(guī)采用了全新觀念。其突出優(yōu)點(diǎn)是低電源電壓、超低功耗、多種功能。由于其功能遠(yuǎn)遠(yuǎn)超過其他系列

10、的單片機(jī),又稱其為混合型單片機(jī)。msp430f449中的各個(gè)模塊都是完全獨(dú)立運(yùn)行的,每個(gè)模塊都可以在主cpu休眠狀態(tài)下運(yùn)行,當(dāng)需要主cpu工作時(shí)任何一個(gè)模塊都可以通過中斷喚醒cpu從而使系統(tǒng)以最低功耗運(yùn)行。這一點(diǎn)是這一款單片機(jī)最突出的優(yōu)點(diǎn),也是與其他單片機(jī)最大的區(qū)別。而且,msp430f449還內(nèi)置了液晶驅(qū)動模塊,更加簡化了外圍電路的軟件。圖2.2 msp430f449管腳示意圖msp430f449管腳示意圖如圖2.2所示。主要管腳功能如下:1 外接晶體引腳xt2in和xt2outxt2in 接外部晶體的一個(gè)引腳。在單片機(jī)內(nèi)部,它是一個(gè)反相放大器的輸入端,這個(gè)放大器構(gòu)成了片內(nèi)振蕩器。xt2ou

11、t 接外部晶體的另一端。在單片機(jī)內(nèi)部,接至上述振蕩器的反相放大器的輸出端。2 端口p0,p1和p2p0,p1和p2這3個(gè)8位端口都能用做輸入和輸出,同時(shí)都有中斷能力,每個(gè)信號都可作為一個(gè)中斷源。p0口有6個(gè)寄存器用于引腳控制,p1口和p2口有7個(gè)寄存器用于引腳控制。這些模塊寄存器位于地段地址,須用字節(jié)指令以絕對尋址模式訪問。3 端口p3,p4,p5,和p6這些端口沒有中斷能力,其余功能與p1和p2一樣,能實(shí)現(xiàn)輸入/輸出功能和外圍模塊功能。每個(gè)端口有4個(gè)寄存器供用戶使用。用戶可通過這4個(gè)寄存器對它們進(jìn)行訪問和控制。4 電源引腳dvcc和dvss 為數(shù)字電源正端和負(fù)端;avcc和avss為模擬電源

12、正端和負(fù)端。2.2 usb器件的選擇2.2.1 概 述usb控制器一般有兩種類型:一種是mcu集成在芯片里面的,如 intel的8x930ax、cypress的ez-usb、siemens的c541u以及 motolora、national semiconductors等公司的產(chǎn)品;另一種就是純粹的usb接口芯片,僅處理 usb通信,如philips的pdiusbd11(i2c接口)、 pdiusbp11a、pdiusbd12(并行接口),national semiconductor的usbn9602、usbn9603、usbn9604等。前一種由于開發(fā)時(shí)需要單獨(dú)的開發(fā)系統(tǒng),因此開發(fā)成本較高;

13、而后一種只是一個(gè)芯片與mcu接口實(shí)現(xiàn)usb通信功能,因此成本較低,而且可靠性高。本課題選擇的是philips公司的pdiusbd12器件。2.2.2 pdiusbd12芯片特點(diǎn)和內(nèi)部結(jié)構(gòu)pdiusbd12是一個(gè)性能優(yōu)化的usb器件,通常用于基于微控制器的系統(tǒng)并與微控制器通過高速通用并行接口進(jìn)行通信,也支持本地dma傳輸。該器件采用模塊化的方法實(shí)現(xiàn)一個(gè) usb接口,允許在眾多可用的微控制器中選擇最合適的作為系統(tǒng)微控制器,允許使用現(xiàn)存的體系結(jié)構(gòu)并使固件投資減到最小。這種靈活性減少了開發(fā)時(shí)間、風(fēng)險(xiǎn)和成本,是開發(fā)低成本且高效的usb外圍設(shè)備解決方案的一種最快途徑。 pdiusbd12完全符合usb1.

14、1規(guī)范,也能適應(yīng)大多數(shù)設(shè)備類規(guī)范的設(shè)計(jì),如成像類、大容量存儲類、通信類、打印類和人工輸入設(shè)備等,因此,pdiusbd12 非常適合做很多外圍設(shè)備,如打印機(jī)、掃描儀、外部大容量存儲器( zip驅(qū)動器)和數(shù)碼相機(jī)等?,F(xiàn)在用scsi實(shí)現(xiàn)的很多設(shè)備如果用 usb來實(shí)現(xiàn)可以直接降低成本。 pdiusbd12掛起時(shí)的低功耗以及l(fā)azyclock輸出符合acpi 、onnow和usb電源管理設(shè)備的要求。低功耗工作允許實(shí)現(xiàn)總線供電的外圍設(shè)備。pdiusbd12還集成了像softconnect、goodlink、可編程時(shí)鐘輸出、低頻晶振和終端電阻等特性。所有這些特性都能在系統(tǒng)實(shí)現(xiàn)時(shí)節(jié)省成本,同時(shí)在外圍設(shè)備上很容

15、易實(shí)現(xiàn)更高級的 usb功能。 pdiusbd12的內(nèi)部結(jié)構(gòu)框圖如圖2.3所示。 圖2.3 pdiusbd12的內(nèi)部結(jié)構(gòu)框圖 模擬收發(fā)器。集成的收發(fā)器直接通過終端電阻與usb電纜接口。 電壓校準(zhǔn)器。片上集成的1個(gè)3.3 v電壓校準(zhǔn)器為模擬收發(fā)器供電,也提供連接到外部1.5 k上拉電阻的輸出電壓。 pll。片上集成1個(gè)648 mhz的倍頻pll(鎖相環(huán)),允許使用6 mhz的晶振,emi也由于使用低頻晶振而減小。pll的工作不需要外部器件。 位時(shí)鐘恢復(fù)。位時(shí)鐘恢復(fù)電路用4倍過采樣原理從輸入的usb 數(shù)據(jù)流中恢復(fù)時(shí)鐘,能跟蹤usb規(guī)范中指出的信號抖動和頻率漂移。 philips串行接口引擎sie。p

16、hilips的sie完全實(shí)現(xiàn)usb協(xié)議層??紤]到速度,它是全硬件的,不需要固件(微程序)介入。這個(gè)模塊的功能包括:同步模式識別、并 /串轉(zhuǎn)換、位填充/不填充、crc校驗(yàn)、pid確認(rèn)、地址識別以及握手鑒定。 softconnect。高速設(shè)備與usb的連接是靠把d通過1個(gè)1.5 k的上拉電阻接到高電平來建立的。在pdiusbd12中,這個(gè)上拉電阻是集成在芯片內(nèi)的,缺省是沒有連接到vdd,這個(gè)連接是靠外部 mcu發(fā)一個(gè)命令來建立的。這使得系統(tǒng)微處理器可以在決定建立 usb連接之前完成初始化。重新初始化usb總線連接也可以不用拔掉電纜來完成。 goodlink。goodlink是靠一個(gè)引腳接發(fā)光二極管

17、實(shí)現(xiàn)的。在 usb設(shè)備枚舉時(shí)led指示燈將立即閃亮;當(dāng)pdiusbd12被成功枚舉并配置時(shí), led指示燈將會始終亮;經(jīng)過pdiusbd12的usb數(shù)據(jù)傳輸過程中, led將一閃一閃,傳輸成功后led熄滅;在掛起期間,led熄滅。這種特性可以使我們知道 pdiusbd12的狀態(tài),方便電路調(diào)試。 存儲器管理單元mmu和集成ram。mmu和集成ram能緩沖usb(工作在 12mb/s)數(shù)據(jù)傳輸和微控制器之間并行接口之間的速度差異,這允許微控制器以自己的速度讀寫usb包。 并行和dma接口。并行接口容易使用、速度快并且能直接與主微控制器接口。對于微控制器,pdiusbd12可以看成是一個(gè)有8位數(shù)據(jù)總

18、線和1位地址線的存儲設(shè)備。 pdiusbd12支持多路復(fù)用和非多路復(fù)用的地址和數(shù)據(jù)總線。在主端點(diǎn)(端點(diǎn) 2)和局部共享存儲器之間也可使用dma(直接存儲器存?。﹤鬏?。它支持單周期模式和塊傳送模式 兩種dma傳輸。2.3 單片機(jī)外圍電路2.3.1 晶振電路單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,引腳xt2in和xt2out分別是此放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外晶體或陶瓷諧振器一起構(gòu)成一個(gè)自激振蕩器。本設(shè)計(jì)系統(tǒng)中的晶振電路如圖2.4所示:圖2.4 本設(shè)計(jì)系統(tǒng)中的晶振電路2.3.2 復(fù)位電路設(shè)計(jì)無論用戶使用哪種類型的單片機(jī),總要涉及到單片機(jī)復(fù)位電路的設(shè)計(jì)。而單片機(jī)復(fù)

19、位電路設(shè)計(jì)的好壞,直接影響到整個(gè)系統(tǒng)工作的可靠性。許多用戶在設(shè)計(jì)完單片機(jī)系統(tǒng),并在實(shí)驗(yàn)室調(diào)試成功后,在現(xiàn)場卻出現(xiàn)了“死機(jī)”、“程序走飛” 等現(xiàn)象,這主要是單片機(jī)的復(fù)位電路設(shè)計(jì)不可靠引起的。目前為止,單片機(jī)復(fù)位電路主要有四種類型:(1)微分型復(fù)位電路;(2)積分型復(fù)位電路;(3)比較器型復(fù)位電路;(4)看門狗型復(fù)位電路。1 微分型復(fù)位電路微分型復(fù)位電路的等效電路如圖2.5所示。 圖2.5 微分型復(fù)位電路2 積分型復(fù)位電路積分型復(fù)位電路常常在二次電源開關(guān)相對較短的時(shí)間間隔情況下出現(xiàn)異常。這主要是由于放電回路與充電回路相同,導(dǎo)致放電時(shí)間常數(shù)較大,從而導(dǎo)致uc電壓下降過度。如圖2.6所示 圖2.6 積

20、分型復(fù)位電路3 比較器型復(fù)位電路比較器型復(fù)位電路的基本原理是:上電復(fù)位時(shí),由于組成了一個(gè)rc低通網(wǎng)絡(luò),所以比較器的正相輸入端的電壓比負(fù)相端輸入電壓延遲一定時(shí)間。而比較器的負(fù)相端網(wǎng)絡(luò)的時(shí)間常數(shù)遠(yuǎn)遠(yuǎn)小于正相端rc網(wǎng)絡(luò)的時(shí)間常數(shù),因此在正端電壓還沒有超過負(fù)端電壓時(shí),比較器輸出低電平,經(jīng)反相器后產(chǎn)生高電平。復(fù)位脈沖的寬度主要取決于正常電壓上升的速度。4 看門狗型復(fù)位電路看門狗型復(fù)位電路主要利用cpu正常工作時(shí),定時(shí)復(fù)位計(jì)數(shù)器,使得計(jì)數(shù)器的值不超過某一值;當(dāng)cpu不能正常工作時(shí),由于計(jì)數(shù)器不能被復(fù)位,因此其計(jì)數(shù)會超過某一值,從而產(chǎn)生復(fù)位脈沖,使得cpu恢復(fù)正常工作狀態(tài)。典型應(yīng)用的watchdog復(fù)位電路

21、的可靠性主要取決于軟件設(shè)計(jì),即將定時(shí)向復(fù)位電路發(fā)出脈沖的程序放在何處。一般設(shè)計(jì),將此段程序放在定時(shí)器中斷服務(wù)子程序中。本系統(tǒng)中所采用的復(fù)位電路在本設(shè)計(jì)的系統(tǒng)中,由于電路較為簡化,系統(tǒng)性能應(yīng)該較為穩(wěn)定,所以采用微分型的復(fù)位電路,它的電路如圖2.7所示。 圖2.7 本系統(tǒng)中的復(fù)位電路2.3.3 電源的設(shè)計(jì)由于系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)了超低功耗,用紐扣電池供電是非常適合的。節(jié)省了器件的空間,減輕了重量,大大提高了實(shí)用性,攜帶非常方便。在電源的正負(fù)極之間并聯(lián)了一個(gè)電容,以增強(qiáng)系統(tǒng)性能的穩(wěn)定性和可靠性。2.4 a/d轉(zhuǎn)換器的選擇單片機(jī)控制系統(tǒng)通常要用到a/d轉(zhuǎn)換。根據(jù)輸出的信號格式,比較常用的a/d轉(zhuǎn)換方式可分為

22、并行a/d和串行a/d。并行方式一般在轉(zhuǎn)換后可直接接收,但芯片的引腳比較多;串行方式所用芯片引腳少,封裝小,在pcb板上占用的空間也小,但需要軟件處理才能得到所需要的數(shù)據(jù)。2.4.1 tlc0834串行a/d轉(zhuǎn)換器簡介串行a/d轉(zhuǎn)換器是公司生產(chǎn)的位逐次逼近模數(shù)轉(zhuǎn)換器具有輸入可配置的多通道多路器和串形輸入輸出方式。其多路器可由軟件配置為單端或差分輸入,也可以配置為偽差分輸入。另外,其輸入基準(zhǔn)電壓大小可以調(diào)整。在全位分辨率下,它允許任意小的模擬電壓編碼間隔。由于tlc0834轉(zhuǎn)換器采用的是串行輸入結(jié)構(gòu),因此封裝體積小,可節(jié)省單片機(jī)i/o資源,價(jià)格也較適中。2.4.2 tlc0834串行a/d轉(zhuǎn)換器

23、工作特點(diǎn)tlc0834轉(zhuǎn)換器可通過和控制處理器相連的串行數(shù)據(jù)鏈路來傳送控制命令,因而可用軟件對通道進(jìn)行選擇和輸入端進(jìn)行配置。輸入配置可在多路器尋址時(shí)序中進(jìn)行。多路器地址可通過di端移入轉(zhuǎn)換器。多路器地址選擇模擬輸入通道可決定輸入是單端輸入還是差分輸入。當(dāng)輸入是差分時(shí),應(yīng)分配輸入通道的極性,并應(yīng)將差分輸入分配到相鄰的輸入通道對中。例如通道0和通道1可被選為一對差分輸入。另外,在選擇差分輸入方式時(shí),極性也可以選擇。一對輸入通道的兩個(gè)輸入端的任何一個(gè)都可以作為正極或負(fù)極。通常tlc0834轉(zhuǎn)換器在輸出以最高位(msb)開頭的數(shù)據(jù)流后,會以最低位(lsb)開頭重輸出一遍(前面的數(shù)據(jù)流)。其工作時(shí)序如圖

24、2.8所示。圖2.8 tlc0834時(shí)序圖2.4.3 tlc0834串行a/d轉(zhuǎn)換器引腳功能tlc0834轉(zhuǎn)換器的引腳排列如圖2.9所示,其中ch0ch3為模擬輸入端;cs 為片選端;di為串行數(shù)據(jù)輸入,該端僅在多路器尋址時(shí)(mux settling time)才被檢測;d0為a/d轉(zhuǎn)換結(jié)果的三態(tài)串行輸出端;clk為時(shí)鐘;sars為轉(zhuǎn)換狀態(tài)輸出端,該端為高電平時(shí),表示轉(zhuǎn)換正在進(jìn)行,為低電平則表示轉(zhuǎn)換完成;ref為參考電壓輸入端;vcc為電源;dgtl gnd為數(shù)字地,angl gnd為模擬地。圖2.9 tlc0834引腳圖2.5 a/d轉(zhuǎn)換器與單片機(jī)的接口電路設(shè)計(jì)tlc0834與msp430單

25、片機(jī)的硬件接口電路的電路原理如圖2.10所示。圖中,單片機(jī)的p6.7接tlc0834的片選信號,p6.6用于產(chǎn)生a/d轉(zhuǎn)換的時(shí)鐘, p6.5為一個(gè)雙向i/o口位,可用于對模擬輸入進(jìn)行配置及輸出轉(zhuǎn)換所得的數(shù)據(jù)。在這里,模擬信號以單端方式輸入,參考電壓為5v,即a/d模擬量的輸入范圍為05v。p6.5p6.6p6.7圖2.10 tlc0834與msp430單片機(jī)的硬件電路圖2.6 pdiusbd12與msp430單片機(jī)的連接2.6.1 pdiusbd12引腳說明pdiusbd12引腳圖如圖2.11所示,引腳說明如表2.1所列。圖2.11 pdiusbd12 引腳圖表2.1 pdiusbd12引腳說

26、明2.6.2 pdiusbd12與msp430單片機(jī)的連接圖2.12所示的是采用了msp430系列微控制器與pdiusbd12集成電路相互連接的原理圖。圖2.12 pdiusbd12與msp430單片機(jī)的原理圖由于msp430系列單片機(jī)是近些年以來,應(yīng)用比較廣泛的一種單片機(jī)微控制器,軟件開發(fā)工作者在其基礎(chǔ)上開發(fā)大量的軟件開發(fā)平臺,大多數(shù)電子工程師對其都比較熟悉的原因。因此,可以利用比較熟悉的微處理器(msp430)進(jìn)行核心程序的設(shè)計(jì),即用msp430來實(shí)現(xiàn)其所需的功能,具體將數(shù)據(jù)信號轉(zhuǎn)換為符合usb規(guī)則的信號,則完全由pdiusbd12來完成。這樣以來,既可以利用單片機(jī)中豐富的軟件資源,又可以

27、利用usb總線技術(shù)的即插即用、熱插拔等特性,可以使開發(fā)設(shè)備的成本降低、縮短開發(fā)產(chǎn)品的時(shí)間周期。在這樣的連接中,ale始終接低電平,說明采用單獨(dú)地址和數(shù)據(jù)總線配置。d0腳接msp430單片機(jī)的p1.0 i/o引腳,控制是命令還是數(shù)據(jù)輸入到pdiusbd12的數(shù)據(jù)總線相連接,clkout時(shí)鐘輸出為msp430提供時(shí)鐘輸入。2.7 本設(shè)計(jì)系統(tǒng)的原理圖及制版圖的繪制protel99se能實(shí)現(xiàn)從電學(xué)概念設(shè)計(jì)到輸出物理生產(chǎn)數(shù)據(jù),以及這之間的所有分析、驗(yàn)證和設(shè)計(jì)數(shù)據(jù)管理。因而今天的protel已不是單純的pcb(印制電路板)設(shè)計(jì)工具,而是一個(gè)系統(tǒng)工具,覆蓋了以pcb為核心的整個(gè)物理設(shè)計(jì)。protel99se

28、共分5個(gè)模塊,分別是原理圖設(shè)計(jì)、pcb設(shè)計(jì)(包含信號完整性分析)、自動布線器、原理圖混合信號仿真、pld設(shè)計(jì)。圖2.13為本設(shè)計(jì)的protel原理圖。做pcb板就是把設(shè)計(jì)好的原理圖變成一塊實(shí)實(shí)在在的pcb電路板,請別小看這一過程,有很多原理上行得通的東西在工程中卻難以實(shí)現(xiàn),或是別人能實(shí)現(xiàn)的東西另一些人卻實(shí)現(xiàn)不了,因此說做一塊pcb板不難,但要做好一塊pcb板卻不是一件容易的事情。 同樣的原理設(shè)計(jì),同樣的元器件,不同的人制作出來的pcb就具有不同的結(jié)果,那么如何才能做出一塊好的pcb板呢?結(jié)合畢業(yè)設(shè)計(jì)的經(jīng)驗(yàn),想就以下幾方面談?wù)勛约旱南敕?1.要明確設(shè)計(jì)目標(biāo)接受到一個(gè)設(shè)計(jì)任務(wù),首先要明確其設(shè)計(jì)目標(biāo)

29、,如果是普通的pcb板,只要做到布局布線合理整齊,機(jī)械尺寸準(zhǔn)確無誤即可,如有中負(fù)載線和長線,就要采用一定的手段進(jìn)行處理。圖2.13 基于msp430f449的usb接口數(shù)據(jù)傳輸系統(tǒng)原理圖2.還要考慮其他一些相關(guān)因素,如板子層數(shù),采用元器件的封裝外形,板子的機(jī)械強(qiáng)度等。在做pcb板子前,要做到對該設(shè)計(jì)的設(shè)計(jì)目標(biāo)心中有數(shù)。3.元器件布局的考慮 元器件的布局首先要考慮的一個(gè)因素就是電性能,把連線關(guān)系密切的元器件盡量放在一起,尤其對一些高速線,布局時(shí)就要使它盡可能地短,功率信號和小信號器件要分開。在滿足電路性能的前提下,還要考慮元器件擺放整齊、美觀,便于測試,板子的機(jī)械尺寸,插座的位置等也需認(rèn)真考慮。

30、制版圖如下圖2.14所示:圖2.14 基于msp430f449的usb接口數(shù)據(jù)傳輸系統(tǒng)制版圖3 基于msp430單片機(jī)的usb接口數(shù)據(jù)傳輸系統(tǒng)軟件設(shè)計(jì)3.1 單片機(jī)軟件開發(fā)單片機(jī)生產(chǎn)廠家不斷增多,單片機(jī)品種層出不窮。單片機(jī)廣泛選擇是當(dāng)今產(chǎn)品開發(fā)的一個(gè)重要環(huán)節(jié)。每個(gè)單片機(jī)系列的指令系統(tǒng)不同,與指令系統(tǒng)對應(yīng)的匯編助記符就不同。匯編語言的不兼容性使得一種單片機(jī)上編制的程序,在另一種單片機(jī)上不能運(yùn)行,單片機(jī)重新選型后程序必須重新編制。匯編語言的難記、難讀及容易搞混,即使自己編制的程序過一段時(shí)間修改時(shí),往往要重讀很大部分,經(jīng)過長時(shí)間回憶才能找到問題所在。修改別人的匯編程序,若程序的注釋說明不詳細(xì)、程序的

31、思路不清晰、子程序使用不夠多,此時(shí)還不如自己重新編制。用c語言編程是單片機(jī)軟件開發(fā)的必然趨勢。c語言是一種編譯型程序設(shè)計(jì)語言,她兼顧了多種高級語言的特點(diǎn),并具備匯編語言的功能。c語言有功能豐富的庫函數(shù)、運(yùn)算速度快、編譯效率高、可移植性好,而且可以直接實(shí)現(xiàn)對系統(tǒng)硬件的控制。c語言是一種結(jié)構(gòu)化程序設(shè)計(jì)語言,支持當(dāng)前程序設(shè)計(jì)中廣泛采用的自頂向下結(jié)構(gòu)化程序設(shè)計(jì)技術(shù)。采用c語言編譯器可以自動完成變量存儲單元的分配,編程者專注于應(yīng)用軟件部分的設(shè)計(jì)即可,大大加快了軟件的開發(fā)速度。采用c語言可以很容易進(jìn)入單片機(jī)程序的移植工作,有利于產(chǎn)品中單片機(jī)的重新選型。c語言的可讀性,可以輕松的借鑒前人的開發(fā)經(jīng)驗(yàn),提高自己

32、的軟件設(shè)計(jì)水平。對于c語言生成代碼的時(shí)空效率,程序代碼長度增加20%,程序執(zhí)行速度約減慢20%。這在片內(nèi)程序存儲器不斷擴(kuò)大、晶振頻率不斷提高的今天,已不是主要考慮的問題。在非常注重代碼效率的場合,可以是以c語言為主,匯編語言為輔。在可移植性方面,單片機(jī)c語言都符合ansic標(biāo)準(zhǔn),差別主要是片內(nèi)資源的不同配置及使用,這可以通過采用不同的頭文件,經(jīng)過少量的加工就可以實(shí)現(xiàn)。隨著國內(nèi)單片機(jī)開發(fā)工具研制水平的提高,現(xiàn)在的單片仿真器普遍支持c語言程序調(diào)試,為單片機(jī)編程使用c語言提供了便利的條件。3.2 單片機(jī)固件結(jié)構(gòu)及功能3.2.1 固件結(jié)構(gòu)pdiusbd12是一款帶有并行總線和局部dma傳輸能力的高速u

33、sb接口器件, 固件設(shè)計(jì)的日標(biāo)就是使pdiusbd12在usb上達(dá)到最大的傳輸速率。pdiusbd12的固件設(shè)計(jì)成完全的中斷驅(qū)動。當(dāng)cpu處理前臺任務(wù)時(shí),usb的傳輸可在后臺進(jìn)行。這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時(shí)簡化了編程和調(diào)試。后臺isr中斷服務(wù)程序和前臺主程序循環(huán)之間的數(shù)據(jù)交換,通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實(shí)現(xiàn),例如pdiusbd12的批量輸出端點(diǎn),可使用循環(huán)的數(shù)據(jù)緩沖區(qū),當(dāng)pdiusbd12從usb收到一個(gè)數(shù)據(jù)包,那么就對cpu產(chǎn)生一個(gè)中斷請求,cpu立即響應(yīng)中斷。在isr中固件將數(shù)據(jù)包從pdiusbd12內(nèi)部緩沖區(qū)移到循環(huán)數(shù)據(jù)緩沖區(qū),并在隨后清零pdiusbd12的內(nèi)部緩沖

34、區(qū),以使能接收新的數(shù)據(jù)包,cpu可以繼續(xù)它當(dāng)前的前臺任務(wù),直到完成。例如,打印當(dāng)前頁,然后返回到主循環(huán),檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù)并開始其它的前臺任務(wù)。由于這種結(jié)構(gòu)主循環(huán)不關(guān)心數(shù)據(jù)是來自usb,串口還是并口,它只檢查循環(huán)緩沖區(qū)內(nèi)需要處理的新數(shù)據(jù),這個(gè)概念很重要,這樣主循環(huán)程序?qū)W⒂跀?shù)據(jù)的處理,而isr能夠以最大可能的速度進(jìn)行數(shù)據(jù)的傳輸,相似的控制端點(diǎn)在數(shù)據(jù)包處理時(shí)采用了同樣的概念,isr接收和保存數(shù)據(jù)緩沖區(qū)中的控制傳輸并設(shè)置相應(yīng)的標(biāo)志寄存器,主循環(huán)向協(xié)議處理程序發(fā)出請求,由于所有的標(biāo)準(zhǔn)器件級別和廠商請求都是在協(xié)議處理程序中進(jìn)行處理,isr得以保持它的效率,而且一旦增加新的請求只需要在協(xié)議層

35、進(jìn)行修改。固件結(jié)構(gòu)和數(shù)據(jù)流向如圖3.1所示。圖3.1 固件結(jié)構(gòu)和數(shù)據(jù)流向各模塊程序的分工如下:pdiusbd12命令接口:對pdiusbdi2器件進(jìn)行操作的模塊子程序集。中斷服務(wù)程序:當(dāng)pdiusbd12向單片機(jī)發(fā)出中斷請求時(shí),讀取pdiusbd12的中斷傳輸來的數(shù)據(jù),并設(shè)定事件標(biāo)志“eppflags” 和setup包數(shù)據(jù)緩沖區(qū)“control_ xfer” 傳輸給主循環(huán)程序.標(biāo)準(zhǔn)設(shè)備請求處理程序:對usb的標(biāo)準(zhǔn)設(shè)備請求進(jìn)行處理.廠商請求處理程序:對用戶添加的廠商請求進(jìn)行處理主循環(huán)程序:發(fā)送usb請求,處理usb總線事件用戶功能處理等3.2.2 固件功能固件實(shí)現(xiàn)的功能主要有:(1)設(shè)備枚舉:這

36、是固件的一個(gè)非常重要的任務(wù),它使主機(jī)和設(shè)備建立通信關(guān)系并使主機(jī)為設(shè)備加載正確的驅(qū)動程序。(2)數(shù)據(jù)傳輸:開發(fā)板和主機(jī)可以進(jìn)行雙向數(shù)據(jù)傳輸。其中最關(guān)鍵的是設(shè)備向主機(jī)傳輸數(shù)據(jù)的功能,目前開發(fā)板可以達(dá)到400kb/s的傳輸速度。(3)狀態(tài)監(jiān)控:開發(fā)板的狀態(tài)監(jiān)控采用控制傳輸,具備雙向狀態(tài)數(shù)據(jù)傳輸功能。主機(jī)可以方便地了解并控制設(shè)備的運(yùn)行狀態(tài),這一點(diǎn)對于調(diào)試非常關(guān)鍵。(4) led燈控制:目前有三種狀態(tài):暗、亮和閃爍。用于直觀顯示開發(fā)板運(yùn)行狀態(tài),主機(jī)通過控制傳輸對led進(jìn)行控制。3.2.3 主循環(huán)流程圖mcu 一旦上電就需要初始化其所有端口、存儲區(qū)、定時(shí)器和中斷服務(wù)程序。之后mcu將重新連接usb,包括將

37、soft connect寄存器設(shè)置為on。這些過程是很重要的,因?yàn)樗_保了在mcu準(zhǔn)備好服務(wù)d12之前d12不會進(jìn)行操作。在主循環(huán)程序中,mcu對鍵盤進(jìn)行輪詢。如果任何一個(gè)特定的按鍵被按下,鍵處理命令將執(zhí)行子程序并返回主循環(huán)。當(dāng)輪詢到了檢測建立包時(shí),它確認(rèn)建立標(biāo)志在之前是否被中斷服務(wù)程序所置位。如果建立標(biāo)志置位,它將向協(xié)議層發(fā)送一個(gè)器件請求進(jìn)行處理。圖3.2所示的是主程序在前臺執(zhí)行的流程:圖3.2 主循環(huán)程序流程圖3.3 單片機(jī)驅(qū)動程序設(shè)計(jì)usb的傳輸總是從pc開始的,傳輸有四種不同的通信類型:控制傳輸、中斷傳輸、塊傳輸和等時(shí)傳輸。單片機(jī)系統(tǒng)使用的是控制傳輸和塊傳輸。控制傳輸由usb系統(tǒng)和客戶

38、用于發(fā)送接收相對少量的數(shù)據(jù)。塊傳輸用于在兩個(gè)方向傳輸大量數(shù)據(jù)。我們主要針對塊傳輸編寫驅(qū)動程序。該程序通過一個(gè)或多個(gè)管道訪問一個(gè)功能設(shè)備。管道是主機(jī)和設(shè)備之間單向或雙向的數(shù)據(jù)傳輸通道,同樣的管道也有四種類型。控制管道是雙向的,中斷管道是單向到主機(jī)的,塊管道和等時(shí)管道是單向的,沿任一個(gè)方向。缺省管道用于控制傳輸。圖3.3是設(shè)備和usbdi表現(xiàn)給客戶驅(qū)動程序的邏輯實(shí)體。一個(gè)設(shè)備顯露一系列的管道連接點(diǎn),稱為節(jié)點(diǎn)。多個(gè)節(jié)點(diǎn)組合在一起構(gòu)成一個(gè)接口。一個(gè)或多個(gè)接口組合成一個(gè)配置。一個(gè)設(shè)備通常只含有一個(gè)配置和一個(gè)接口,但是,也可以含有多個(gè)配置和接口。usb客戶是使用標(biāo)準(zhǔn)windows系統(tǒng)usb類驅(qū)動程序訪問設(shè)

39、備的驅(qū)動程序的。usbd.sys是usb類驅(qū)動程序,它使用uhcd.sys訪問通用主機(jī)控制器接口設(shè)備。,或者使用openhci.sys訪問開放式主機(jī)控制器接口設(shè)備。usbhub.sys是根集線器和外部集線器的usb驅(qū)動程序。在pci枚舉器發(fā)現(xiàn)每個(gè)usb主機(jī)控制器時(shí),裝入相關(guān)的驅(qū)動程序。事實(shí)上,系統(tǒng)usb驅(qū)動程序(usbd)處理連接usb設(shè)備的大多繁雜的工作,甚至一些hid usb設(shè)備(如鍵盤、鼠標(biāo)和游戲設(shè)備)是自動識別的,不許要額外的驅(qū)動程序。但是單片機(jī)系統(tǒng)要響應(yīng)用戶的請求,因此驅(qū)動程序是不可缺少的。設(shè)備配置1接口0其他接口其他配置節(jié)點(diǎn)0(管道0)節(jié)點(diǎn)1(管道1)接口 1 節(jié)點(diǎn)圖3.3 usb

40、邏輯結(jié)構(gòu)3.3.1 頭文件說明開發(fā)usb設(shè)備的驅(qū)動程序需要包含幾個(gè)頭文件,他們在windows 中的ddk中,需要安裝ddk。這幾個(gè)頭文件及功能描述如下:usb100.h各種usb常量和結(jié)構(gòu)。usbioctl.hioctl定義。usbdlib.hurb構(gòu)造和各種例程。usbdi.husbdi例程,包括urb結(jié)構(gòu)。在sources文件中還要特別提到usb庫:targetlibs=d:win98ddklib386freeusbd.lib,安裝路徑。3.3.2 usbdi的ioctlusb類驅(qū)動程序主要通過usb驅(qū)動程序接口(usbdi)的內(nèi)部ioctl使用。因?yàn)樗麄兪莾?nèi)部ioctl,所以只能可用于

41、內(nèi)核的其他部分,但不能用于用戶態(tài)應(yīng)用程序。最重要的內(nèi)部ioctl是ioctl_internal_usb_submit_urb,它發(fā)出usb請求塊(urb)由usb類驅(qū)動程序處理。有30多個(gè)不同的urb功能代碼。usb客戶使用urb做它們大多數(shù)的工作。urb結(jié)構(gòu)是一個(gè)聯(lián)合,含有16個(gè)不同的_urb_*結(jié)構(gòu)。3.3.3 創(chuàng)建設(shè)備創(chuàng)建設(shè)備函數(shù)帶兩個(gè)參數(shù)調(diào)用,一個(gè)參數(shù)是指向驅(qū)動程序?qū)ο蟮闹羔槪硪粋€(gè)參數(shù)是指向物理設(shè)備對象的指針。ntstatus eval_create( in pdevice_object deviceobject, in pirp irp )ntstatus ntstatus;irp

42、-iostatus.status = status_success;irp-iostatus.information = 0;iocompleterequest( irp, io_no_increment ); ntstatus = irp-iostatus.status;return ntstatus;3.3.4 關(guān)閉設(shè)備ntstatus eval_close( in pdevice_object deviceobject, in pirp irp )return status_success;3.3.5 讀取設(shè)備數(shù)據(jù)當(dāng)客戶應(yīng)用程序有讀取設(shè)備數(shù)據(jù)的要求時(shí),系統(tǒng)將此要求以irp_mj_read

43、的irp形式傳遞給功能驅(qū)動程序,并以下代碼執(zhí)行,然后再由以下代碼指定usb總線驅(qū)動程序直接與單片機(jī)系統(tǒng)實(shí)現(xiàn)信息交互。ntstatus eval_read(in pdevice_object deviceobject,in pirp irp)usbd_interface_information* pinterfaceinfo;usbd_pipe_information* ppipeinfo;pio_stack_location irpstack;pdevice_extension deviceextension;ntstatus ntstatus;ulong pipenum;ulong read

44、len;ulong siz;purb urb;ulong transferflags = 0;char* iobuffer;irpstack = iogetcurrentirpstacklocation( irp );/得到當(dāng)前irp的staacklocation部分。deviceextension = deviceobject-deviceextension;/得到當(dāng)前設(shè)備。readlen = irpstack-parameters.read.length;/得到當(dāng)前i/o緩沖區(qū)的長度。pinterfaceinfo = deviceextension-interface;/得到設(shè)備的接口pi

45、penum = 15;/ pdiusbd12的讀數(shù)據(jù)管道15,此管道為輸入管道,采用塊傳輸方式。ppipeinfo = &( pinterfaceinfo-pipes pipenum );/得到指定管道的當(dāng)前信息。siz = sizeof( struct _urb_bulk_or_interrupt_transfer );/得到數(shù)據(jù)流模式結(jié)構(gòu)長度。urb = exallocatepool( nonpagedpool, siz );/得到內(nèi)存分頁if( urb=null)/如果沒有可以供利用的內(nèi)存空間,返回錯(cuò)誤信息。return status_insufficient_resources; tr

46、ansferflags = usbd_short_transfer_ok;transferflags |= usbd_transfer_direction_in;usbbuildinterruptorbulktransferrequest(urb,(ushort)siz,ppipeinfo-pipehandle,irp-mdladdress,readlen,transferflags,null);/建立中斷或者塊傳輸?shù)膇rpntstatus = eval_callusbd( deviceobject, urb );/調(diào)用讀取設(shè)備的函數(shù)。if( nt_success( ntstatus ) &

47、usbd_success( urb-urbheader.status)irp-iostatus.information = readlen;/得到數(shù)據(jù)長度。else/構(gòu)造irp中的相關(guān)域irp-iostatus.information = 0;ntstatus=status_unsuccessful;irp-iostatus.status = ntstatus;exfreepool( urb );/釋放此urbiocompleterequest( irp, io_no_increment );return( ntstatus );3.3.6 對設(shè)備寫入數(shù)據(jù)當(dāng)客戶應(yīng)用程序有讀取設(shè)備數(shù)據(jù)的要求時(shí),

48、系統(tǒng)將此要求以irp_mj_write的irp形式傳遞給功能驅(qū)動程序,并以下代碼執(zhí)行,然后再由以下代碼指定usb總線驅(qū)動程序直接與pdiusbd12接口芯片實(shí)現(xiàn)信息交互。ntstatus eval_write(in pdevice_object deviceobject,in pirp irp)usbd_interface_information* pinterfaceinfo;usbd_pipe_information* ppipeinfo;pio_stack_location irpstack;pdevice_extension deviceextension;ntstatus ntsta

49、tus;char* iobuffer;ulong writelen;ulong pipenum;ulong siz;purb urb;ulong transferflags = 0;irpstack = iogetcurrentirpstacklocation( irp );/得到當(dāng)前的irpdeviceextension = deviceobject-deviceextension;/得到設(shè)備對象writelen = irpstack-parameters.write.length;/得到當(dāng)前i/o緩沖區(qū)的長度。pinterfaceinfo = deviceextension-interfa

50、ce;/得到設(shè)備接口設(shè)置pipenum = 16;/pdiusbd12的寫數(shù)據(jù)管道16,此管道采用塊傳輸方式,是單向輸出管道。ppipeinfo = &( pinterfaceinfo-pipes pipenum );/得到管道信息。siz = sizeof( struct _urb_bulk_or_interrupt_transfer );/得到數(shù)據(jù)流模式結(jié)構(gòu)長度。urb = exallocatepool( nonpagedpool, siz );/得到內(nèi)存分頁if( urb=null)return status_insufficient_resources;transferflags =

51、usbd_short_transfer_ok;usbbuildinterruptorbulktransferrequest( urb,(ushort)siz,ppipeinfo-pipehandle,irp-mdladdress,writelen,transferflags,null);/建立中斷或者塊傳輸?shù)膇rpntstatus = eval_callusbd( deviceobject, urb ); /調(diào)用讀取設(shè)備的函數(shù)。if( nt_success( ntstatus ) & usbd_success( urb-urbheader.status)irp-iostatus.information = writelen; /得到數(shù)據(jù)長度。else/構(gòu)造irp中的相關(guān)域irp-iostatus.information = 0;ntstatus=status_unsuccessful;irp-iostatus.status = ntstatus;exfreepool( urb );io

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論