




已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
文 摘 通過實際系統(tǒng)的設(shè)計、開發(fā)和調(diào)試,我們覺得對于現(xiàn)在各種以串行口、并行口為接口的產(chǎn)品,都可以設(shè)計成帶USB接口的產(chǎn)品。在硬件設(shè)計時,只需把串口控制芯片或并口控制芯片換成USB接口芯片即可。目前USB芯片的價格也不是很高,一般的只需十幾元或幾十元人民幣即可,這樣不僅沒有增加成本,而且極大提高了數(shù)據(jù)傳輸速度,同時也使得系統(tǒng)具有USB所具有的支持即插即用、熱插拔、靈活、方便等技術(shù)優(yōu)勢,極大地改善了系統(tǒng)的性能,給用戶帶來了極大的方便,尤其是適用于產(chǎn)品改造型設(shè)計。USB接口完全可以代替串行口和并行口實現(xiàn)數(shù)據(jù)傳輸。關(guān)鍵字 數(shù)據(jù)采集系統(tǒng);USB接口;單片機(jī)1 方案提出的背景1.1 研究課題的提出 信息技術(shù)與電子技術(shù)的迅猛發(fā)展,使得計算機(jī)和外圍設(shè)備也得到飛速發(fā)展和應(yīng)用。過去人們單純追求計算機(jī)與外設(shè)之間的傳輸速度,現(xiàn)在糾錯能力和操作安裝的簡易性也成為人們關(guān)注的目標(biāo)。USB通訊技術(shù)的出現(xiàn),使高傳輸速度、強(qiáng)糾錯能力、易擴(kuò)展性、方便的即插即用,有機(jī)的結(jié)合在一起。USB設(shè)備需要依據(jù)USB協(xié)議進(jìn)行數(shù)據(jù)的解包與打包,底層硬件設(shè)備與操作系統(tǒng)之間需要以驅(qū)動程序為橋梁。驅(qū)動程序以WDM為模型,以DDK為開發(fā)工具,以IRP為消息傳播載體,來實現(xiàn)與Windows系統(tǒng)底層核心機(jī)制向交互的功能。隨著控制系統(tǒng)的日益復(fù)雜,所要采集的量也會越來越多。因此尋求一種高速、安全、方便的通訊形式是十分必要的。USB技術(shù)雖然出現(xiàn)的時間并不長,但是由于它的種種優(yōu)點(diǎn),被越來越多的廠商和用戶所接受,出現(xiàn)了USB打印機(jī)、攝像頭等產(chǎn)品。隨著機(jī)日益廣泛的應(yīng)用,其外設(shè)也逐日增多,但機(jī)接口的數(shù)量是一定的,這就限制了機(jī)掛接外設(shè)的數(shù)量。在很多應(yīng)用場合,如工業(yè)數(shù)據(jù)采集,常使用采集板卡來完成工作,采用板卡不僅安裝麻煩、易受機(jī)箱內(nèi)環(huán)境的干擾,而且受計算機(jī)插槽數(shù)量和地址、中斷資源的限制,不可能掛接很多設(shè)備,而通用串行總線可以很容易的實現(xiàn)高可靠性、多點(diǎn)的數(shù)據(jù)采集。1.2 USB接口的主要優(yōu)點(diǎn)接口主要優(yōu)點(diǎn)為:(1)速度快。USB接口有高速和低速兩種方式,主模式為高速模式,速率為12/, USB2.0版規(guī)范允許480/的速率傳輸數(shù)據(jù),另外為了適應(yīng)一些不需要很大吞吐量和很高實時性的設(shè)備(如鼠標(biāo)等),還提供低速方式,速率為1.5/。(2)設(shè)備安裝和配置容易。安裝USB設(shè)備不必打開機(jī)箱,加減已安裝過的設(shè)備不用關(guān)閉計算機(jī)。所有USB設(shè)備支持熱插拔,系統(tǒng)對其進(jìn)行自動配置。(3)易于擴(kuò)展。通過使用戶HUB擴(kuò)展可接多達(dá)127個外設(shè)。標(biāo)準(zhǔn)電纜長度為3(5低速),通過USB或中繼器可以使外設(shè)距離達(dá)到30。(4)使用靈活。有控制傳輸(contronl)、同步傳輸(synchronization)、中斷傳輸(interrupt)、批量傳輸(bulk)4種傳輸模式和2種傳輸速率,可以適應(yīng)不同設(shè)備的需要。2 系統(tǒng)的原理及其組成基于USB的數(shù)據(jù)采集和控制系統(tǒng)的硬件模塊主要是由A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、微處理器、USB接口控制芯片、串行口控制芯片、放大器等組成。本數(shù)據(jù)采集和控制系統(tǒng)是以飛利浦 公司的 PDIUSBD12 作為系統(tǒng)的微控制器,管理和控制整個系統(tǒng)。該芯片集成度高,與51單片機(jī)兼容,不同的是片內(nèi)是8KB的flash內(nèi)存。 整個數(shù)據(jù)采集和控制系統(tǒng)的總體結(jié)構(gòu)框圖如圖1所示: 從結(jié)構(gòu)圖中可知,模擬輸入信號通過信號處理(放大和濾波)后,輸出到A/D轉(zhuǎn)換器,微控制器把經(jīng)過A/D轉(zhuǎn)換器轉(zhuǎn)換后的數(shù)字信號通過USB控制芯片輸出給計算機(jī),同時可以在計算機(jī)上實現(xiàn)數(shù)據(jù)的顯示和鍵盤控制;另一方面,經(jīng)過A/D轉(zhuǎn)換器采集到的數(shù)字信號可以通過算法實現(xiàn)控制后,經(jīng)過D/A轉(zhuǎn)換器輸出,進(jìn)而可以對其它設(shè)備進(jìn)行控制;同時,該系統(tǒng)還可以作為一種USB和串行口的轉(zhuǎn)接卡,通過串行口與USB接口實現(xiàn)數(shù)據(jù)之間的交互,充分利用了USB的快速性和RS-232遠(yuǎn)距離的優(yōu)勢,實現(xiàn)了資源優(yōu)勢互補(bǔ),可以通過該板卡實現(xiàn)數(shù)據(jù)的遠(yuǎn)程控制和數(shù)據(jù)傳輸,既提高了傳輸速率,又增加了傳輸距離。 而USB主機(jī)及顯示部分則通過輸出接口在PC機(jī)上顯示,采用軟件來模擬顯示輸入信號的波形。同時可以控制A/D轉(zhuǎn)換器的啟停、數(shù)據(jù)存取器的存取、USB外設(shè)芯片的工作、顯示圖形的放大和縮小等。 USB數(shù)據(jù)傳輸?shù)挠布Y(jié)構(gòu)由以下三部分組成:通用USB控制芯片,微處理器,USB接口。它們構(gòu)成了一個USB數(shù)據(jù)傳輸?shù)淖钚∠到y(tǒng)。其功能為:USB收發(fā)器負(fù)責(zé)處理所有與USB總線事務(wù)有關(guān)的任務(wù),如總線喚醒、數(shù)據(jù)接受/發(fā)送、打包、CRC校驗等,但該收發(fā)器不負(fù)責(zé)解釋這些數(shù)據(jù)的意義;微處理器負(fù)責(zé)處理數(shù)據(jù)、響應(yīng)主機(jī)請求、以及控制USB收發(fā)器的工作;內(nèi)存負(fù)責(zé)存儲和提供數(shù)據(jù)。 圖1 設(shè)計數(shù)據(jù)采集和控制系統(tǒng)原理圖其中,狀態(tài)監(jiān)視器是一個高速的單穩(wěn)態(tài)多頻振蕩器,用來實現(xiàn)掉電和恢復(fù)操作的,當(dāng)系統(tǒng)連續(xù)3ms檢測不到主機(jī)的請求時,系統(tǒng)就會進(jìn)入掛起狀態(tài);當(dāng)系統(tǒng)從掛起狀態(tài)退出以后,狀態(tài)監(jiān)控器就產(chǎn)生一個正脈沖以復(fù)位/喚醒整個系統(tǒng)。3 數(shù)據(jù)采集系統(tǒng)的硬件設(shè)計基于USB的數(shù)據(jù)采集和控制系統(tǒng)主要利用了A/D轉(zhuǎn)換技術(shù)、D/A轉(zhuǎn)換技術(shù)和USB技術(shù),是伴隨著USB技術(shù)的迅速發(fā)展與新的數(shù)據(jù)采集技術(shù)的發(fā)展而發(fā)展起來的。采集到的數(shù)據(jù)通過主機(jī)接口(USB口)發(fā)送到上位機(jī)并實時顯示出來,其波形保真性能與A/D轉(zhuǎn)換器的轉(zhuǎn)換速率、分辨率與精度密切相關(guān)。A/D轉(zhuǎn)換速率越高,復(fù)現(xiàn)的波形的分辨率也就越高;A/D轉(zhuǎn)換器位數(shù)越多,精度越高,波形保真性越高。在選擇一個芯片時,用戶一般考慮的是芯片含有的功能、價位、是否容易取得以及是否容易開發(fā)等因素。一個芯片是否容易開發(fā)與開發(fā)工具是否容易取得及其品質(zhì),設(shè)備的驅(qū)動程序,有無示例程序代碼,以及對設(shè)備結(jié)構(gòu)等的了解而定。下面對本系統(tǒng)中芯片的選擇作一個簡單的介紹。3.1 芯片的選擇 基于USB的外置式硬件電路的設(shè)計核心是USB控制器的選擇,在進(jìn)行一個具體的USB設(shè)備開發(fā)之前,首先要根據(jù)具體要求選擇合適的USB控制器,整個USB外圍設(shè)備的設(shè)計將圍繞該控制器展開。在選定USB控制器以后,如果是帶USB接口的單片機(jī),則是一般單片機(jī)應(yīng)用系統(tǒng)的開發(fā);若是USB外設(shè)接口芯片,就是USB外設(shè)接口芯片與單片機(jī)應(yīng)用系統(tǒng)的接口問題。一般USB接口芯片都支持多種并行總線結(jié)構(gòu)(復(fù)用/非復(fù)用),可以方便地與多種單片機(jī)連接。 目前,市場上可供選擇的USB接口芯片很多,按照功能基本上分為兩類:一類是純粹的USB接口芯片或通用USB外設(shè)接口芯片(也稱USB設(shè)備器件);另一類是帶有USB接口芯片的單片機(jī)(也稱USB主控制器)。(1)帶USB接口的單片機(jī)(USB主控制器)這類芯片主要有Cypress公司的CY7C63xxx/CY7C64xxx系列和EZ-USB, Intel公司的8X930/8x931, Philips公司的ISP 1161 (USB 1.1) / ISP I 561 (USB2.0 ), Scanlogic的SL11R以及Motorola的MC68HC908JB8系列等。這種方案的最大好處在于開發(fā)難度較小,因為大多數(shù)這樣的單片機(jī)芯片都是基于8051結(jié)構(gòu)或者其它常見的結(jié)構(gòu),有自己的精簡指令集,與單片機(jī)類似,熟悉單片機(jī)開發(fā)的開發(fā)者對系統(tǒng)結(jié)構(gòu)和指令集非常熟悉,但其開發(fā)一般需要專用的仿真器,對于簡單或低成本系統(tǒng),價格高將會是最大的障礙。(2)純粹的USB外設(shè)接口芯片(USB設(shè)備器件)這類芯片主要有NS公司的USBN9602/9603/9604, Scan logic的SUIT以及Philips公司的PDIUSBD11/PDIUSBD12 (USB1.1) /ISP1581 (USB2.0)等。純粹的USB外設(shè)接口芯片僅處理USB總線相關(guān)事務(wù),必須有一個外部微處理器來進(jìn)行協(xié)議處理和數(shù)據(jù)交換。這種方案的主要特點(diǎn)是價格便宜、接口形式多樣、可靠性高、靈活性大,尤其適合于產(chǎn)品的改型設(shè)計,缺點(diǎn)是開發(fā)者需要非常熟悉USB協(xié)議,還必須用微處理器來控制USB外設(shè)接口芯片的工作。綜合比較,PDIUSBD 12是一款性價比很高的USB器件,可使設(shè)計者選擇最合適的微控制器,減少開發(fā)時間、風(fēng)險及費(fèi)用,是最實用最快捷的方法實現(xiàn)最經(jīng)濟(jì)的USB外設(shè)的方案。該芯片支持一個控制端點(diǎn)以及4個額外的端點(diǎn)地址。一個端點(diǎn)的緩沖區(qū)可以儲存到128個字節(jié),而雙緩沖區(qū)可以到256個字節(jié)。PDIUSBD 12通常用作微控制器系統(tǒng)中實現(xiàn)與微控制器進(jìn)行通信的高速通用并千示接口,并支持本地DMA傳輸。PDIUSBD 12完全符合USB1.1規(guī)范,并符合大多數(shù)器件的分類規(guī)格:成像類、海量存儲器件、通信器件、打印設(shè)備以及人機(jī)接口設(shè)備。同樣地,PDIUSBD 12還適用于打印機(jī)、掃描儀、外部存儲設(shè)備和數(shù)碼相機(jī)等等。另外,該芯片還集成了許多特性,包括SoftConnect, GoodLink、可編程時鐘輸出、低頻晶振和終止寄存器集合,簡化USB功能在外設(shè)上的應(yīng)用。由于51系列的單片機(jī)是應(yīng)用非常廣泛的一種微處理器,在其基礎(chǔ)上開發(fā)了大量的軟件包,對其內(nèi)部結(jié)構(gòu)和工作原理我們都非常了解,故本系統(tǒng)中我們采用8902進(jìn)行核心程序的設(shè)計來實現(xiàn)其所需的功能。A/D選用我們熟悉而且能滿足要求的AD0809。而PDIUSBDI2能夠完成將數(shù)據(jù)信號到符合USB規(guī)范的信號的轉(zhuǎn)換。為此,我們利用89C52中豐富的軟件資源和USB總線技術(shù)即插即用、熱插拔特性來完成高速數(shù)據(jù)采集系統(tǒng)。這樣可以降低開發(fā)成本,縮短開發(fā)周期、降低風(fēng)險。3.2 PDIUSBD12的性能特點(diǎn)和內(nèi)部結(jié)構(gòu)PDIUSBD12是一款性價比很高的USB器件,通常用作微控制器系統(tǒng)中實現(xiàn)與微控制器進(jìn)行通信的高速通用并行接口,它還支持本地的DAM傳輸。PDI USBD12(以下簡稱D12)完全符合USB1. 1規(guī)范,它具有的低掛起功好耗連同LazyClock輸出可以滿足使用ACPI, OnNOW和USB電源管理的要求。D12集成了許多新的特性,包括可編程時鐘輸出、SoftConnet, GoodLink、低頻晶振。(1)可編程時鐘輸出:不必考慮電路設(shè)計時使用高頻晶振產(chǎn)生的EMI問題D12的CLKOUT引腳輸出時鐘信號,可用作MCU時鐘,最低4MHZ,最高達(dá)48MHZ. D12內(nèi)部有倍頻電路,外部只需6M晶振即可提供D12自身工作時鐘(48MHZ)及輸出時鐘。(2)軟連接(SoftConnet)技術(shù):芯片內(nèi)集成有1.5 K的USB上拉電阻,連接此電阻將D+置為高設(shè)置為高速USB設(shè)備。連接的建立通過外部MCU發(fā)送命令來實現(xiàn),這就允許設(shè)備在決定與USB總線建立連接之前完成初始化時序。USB總線連接的連接可以重新初始化而不需要拔插USB電纜。(3)GoodLink技術(shù):可提供良好的USB連接指示。在枚舉中,LED指示根據(jù)通信情況間歇閃爍。當(dāng)成功枚舉和配置后,LED指示將一直點(diǎn)亮。USB支持兩種信號速率。USB的最高速率是12Mb/s,但它可以工作在1. 5Mb/s的較低速率,同一個USB系統(tǒng)可同時支持這兩種模式,但1. 15Mb/s低速率方式主要為了降低對速度要求不高的設(shè)備的成本,只支持少數(shù)像鼠標(biāo)這樣的低帶寬要求的設(shè)備。 (4)可編程的時鐘頻率輸出:集成320字節(jié)多結(jié)構(gòu)FIFO存儲器,具體組成如字節(jié)數(shù)端點(diǎn)0端點(diǎn)1端點(diǎn)320=16(IN)+16(OUT)+16(IN)+16(OUT)+64(IN)+64(OUT) * 2(雙緩沖)主端點(diǎn)的雙緩沖配置增加了數(shù)據(jù)吞吐量,并輕松實現(xiàn)實時數(shù)據(jù)傳輸;(5)多中斷模式實現(xiàn)批量和同步傳輸。端點(diǎn)可通過Set Mode命令配置為4種不同的模式,分別為: 模式0 Non-ISO模式(非同步傳輸) 模式1 ISO-OUT模式(同步輸出傳輸) 模式2 ISO-IN模式(同步輸入傳輸) 模式3 ISO-IO模式(同步輸入輸出傳輸)USB電纜可以允許使用不同長度的電纜,最長可達(dá)幾米。為了提供可靠的輸入電壓和適當(dāng)?shù)慕K端阻抗,在電纜的每一端帶偏壓的終端。該終端可以發(fā)現(xiàn)任一端口上USB設(shè)備的“插入”和“拔除”操作,并能區(qū)分全速和低速設(shè)備。圖2指示了高速USB設(shè)備在集線器的終端位置及其所連的功能設(shè)備,從中可以看出在電纜的下行端的電阻Rpu是接在D+線上的,在低速設(shè)備中,Rpu電阻是接在 D-線上的。PD工USBD12的軟連接(SoftConnet)技術(shù)使得在電路設(shè)計中可以省去此電阻,并可以通過軟件設(shè)置。 圖2 PDIUSBD12的原理圖(1)模擬收發(fā)器:集成的收發(fā)器接口可通過終端電阻直接與USB電纜相連。(2)電壓調(diào)整器:片內(nèi)集成了一個3. 3V的調(diào)整器用于模擬收發(fā)器的供電,該電壓還作為輸出連接到外部上拉電阻??蛇x擇D12提供的帶有上拉電阻的軟件連接技術(shù)。(3)倍頻電路(PLL)片內(nèi)集成了6M到48M時鐘乘法PLL,就可使用低成本的6M晶振。(4)位時鐘恢復(fù):位時鐘恢復(fù)電路使用4X過采樣規(guī)則,從進(jìn)入的USB數(shù)據(jù)流中恢復(fù)時鐘。它能跟蹤USB規(guī)定范圍內(nèi)的抖動和頻漂。(5)串行接口引擎(SIE):串行接口引擎實現(xiàn)了全部的USB協(xié)議層,完全由硬件實現(xiàn)而不需要固件的參與。該模塊的功能包括同步模式的識別、并行/串行轉(zhuǎn)換、位填充/解除填充、CRC校驗/產(chǎn)生、PID校驗/產(chǎn)生、地址識別和握手評估等。(6)存儲器管理單元(ME)和集成RAM:在進(jìn)行數(shù)據(jù)傳輸并與微處理器的并口相連時,MMU和集成RAM作為USB間傳輸?shù)木彌_區(qū),允許MCU以它自己速率對USB信息包讀寫。PDIUSBD12內(nèi)部結(jié)構(gòu)框圖如圖3所示:(1)模擬收發(fā)器(ANALOG TX/RX ):集成的收發(fā)器直接通過終端電阻與USB電纜接口。(2)電壓調(diào)整器:片上集成的1個3.3V電壓調(diào)整器為模擬收發(fā)器供電,也提供連接到外部1.5k Q上拉電阻的輸出電壓。PDIUSBDI2提供集成1.5k 0上拉電阻的SoftConnect技術(shù)。(3)PLL(鎖相環(huán)):片上集成I個6-48MHz的倍頻PLL,允許使用6MHz的晶振,EMI也由于使用低頻晶振而減小。PLL的工作不需要外部器件。(4)位時鐘恢復(fù):位時鐘恢復(fù)電路用4倍過采樣原理,從輸入的USB數(shù)據(jù)流中恢復(fù)時鐘,能跟蹤USB規(guī)范中指出的信號抖動和頻率漂移。(5)串行接口引擎(S I E): PHILIPS的SIE完全實現(xiàn)USB協(xié)議層。考慮到速度,它是全硬件的,不需要固件(微程序)介入。這個模塊的功能包括:同步模式識別、并/串轉(zhuǎn)換、位填充/不填充、CRC校驗、PID確認(rèn)、地址識別以及握手鑒定。6MHZD+ 3.3V 1.5K電壓調(diào)整器ANALOGTX/AXsoftconnectD-上行端口PLL位時鐘恢復(fù)PHILIPSSIE內(nèi)存管理單元集成RAM并行和DAM接口D+ 圖3 PDIUSBD12的內(nèi)部框圖(6)Soft Connect:高速設(shè)備與USB的連接是靠把D+通過1個1.5k。的上拉電阻接到高電平來建立的。在PDIUSBD 12中,這個上拉電阻集成在芯片內(nèi),缺省情況下沒有連接到VDD,這個連接是靠外部MCU發(fā)一個命令來建立。這使得系統(tǒng)微處理器可以在決定建立USB連接之前完成初始化。重新初始化USB總線連接也可以不用拔掉電纜來完成。(7)Good Link: GoodLink是靠一個引腳接發(fā)光二極管實現(xiàn)的。在USB設(shè)備枚舉時LED指示燈將立即閃亮:當(dāng)PDIUSBD 12被成功枚舉并配置時,LED指示燈將會一直亮;在PDIUSBD 12的USB數(shù)據(jù)傳輸過程中,LED將閃爍;在掛起期間,LED熄滅。這種特性可以使我們了解芯片狀態(tài)和方便電路調(diào)試。3.3 PDIUSBD12的端點(diǎn)描述端點(diǎn)(Endpoint)是一個USB設(shè)備唯一可以確認(rèn)的部分,它是主機(jī)與設(shè)備之間的通信流終點(diǎn)。一系列相互獨(dú)立的端點(diǎn)在一起構(gòu)成了USB邏輯設(shè)備。每個邏輯設(shè)備有一個唯一的地址,這個地址是在設(shè)備連上主機(jī)時,由主機(jī)分配的,而設(shè)備中的每個端點(diǎn)在設(shè)備內(nèi)部有唯一的端點(diǎn)號。這個端點(diǎn)號是在設(shè)備設(shè)計時被給定的。每個端點(diǎn)都是一個簡單的連接點(diǎn),或者支持?jǐn)?shù)據(jù)流進(jìn)設(shè)備,或者支持其流出設(shè)備,兩者不可得兼。端點(diǎn)具有確定端點(diǎn)與客戶軟件之間通信所需要的傳輸服務(wù)類型的功能,一個端點(diǎn)可通過下列幾個方面的特性來描述自己:總線訪問頻率要求、總線延遲要求、帶寬要求、端點(diǎn)號、錯誤處理的方法、接收或發(fā)送包的最大長度、傳送類型、數(shù)據(jù)傳輸方向。 (1)端點(diǎn)0要求:所有USB設(shè)備都需要實現(xiàn)一個缺省的控制方法。這種方法將端點(diǎn)0作為輸入端點(diǎn),同時也將端點(diǎn)0作為輸出端點(diǎn)。USB系統(tǒng)用這個缺省方法初始化及一般地使用邏輯設(shè)備(即設(shè)置此設(shè)備)。缺省控制通道支持了對控制的傳送,一旦設(shè)備接上,并加電,且又收到一個總線復(fù)位命令,端點(diǎn)0就是可訪問的了。(2)非0端點(diǎn)要求:設(shè)備可以有除0以外的其它端點(diǎn),這取決于這些設(shè)備的實現(xiàn)。低速設(shè)備在0號輸入及輸出端點(diǎn)外,只能有2個額外的可選端點(diǎn)。而高速設(shè)備可具有的額外端點(diǎn)數(shù)僅受限于協(xié)議的定義,協(xié)議中規(guī)定,最多15個額外的輸入端點(diǎn)和最多15個額外的輸出端點(diǎn)。非0端點(diǎn)在被配置前處于未知狀態(tài),在設(shè)備配置以后才能使用。 D12的端點(diǎn)適用于不同類型的設(shè)備,并可通過“Set Mode”命令配置為4種不同的模式:模式0(非同步模式),模式1(同步輸出模式),模式2(同步輸入模式),模式3(同步輸入輸出模式)。本設(shè)計中只用到了模式0配置,同步模式配置未使用。端點(diǎn)可用來存放從主機(jī)接受到或者設(shè)備發(fā)送來的數(shù)據(jù),每個端點(diǎn)都有屬于自己的緩沖區(qū)。模式0配置下的端點(diǎn)緩沖區(qū)如表1所示。 端點(diǎn)2(主端點(diǎn))是進(jìn)行吞吐大數(shù)據(jù)量的主要端點(diǎn),具有64字節(jié)雙緩沖區(qū)結(jié)構(gòu),可以減輕傳輸大量數(shù)據(jù)的任務(wù):1雙緩沖。允許USB與本地CPU之間的并行讀寫操作這樣就增加了數(shù)據(jù)的吞吐量緩沖區(qū)切換是自動處理的這導(dǎo)致了透明的緩沖區(qū)操作。2支持DMA直接存儲器訪問操作??梢院蛯ζ渌它c(diǎn)的正常I/0操作交叉進(jìn)行。3 DMA操作中的自動指針處理。在跨過緩沖區(qū)邊界時不需要本地CPU的干預(yù)。4可配置為同步傳輸或非同步批量和中斷傳輸。表1 端點(diǎn)緩沖區(qū)配置(模式0)端點(diǎn)號端點(diǎn)索引傳輸類型 端點(diǎn)類型 方向緩沖區(qū)長度(字節(jié))0 0控制輸出 默認(rèn) 輸出 16 1控制輸出 默認(rèn) 輸入 161 2普通輸出 普通 輸出 16 3普通輸出 普通 輸入 162 4普通輸出 普通 輸出 64 5普通輸出 普通 輸入 643.4 PDIUSBD12的指令集 PDIUSBD12有自己的專用指令集,用于設(shè)置USB芯片、讀取USB芯片的狀態(tài)和控制USB總線傳輸。D12芯片內(nèi)有一系列的寄存器對應(yīng)著這些指令,微處理器把要設(shè)置的值按字節(jié)寫入D12的這些寄存器,或者從D12的這些寄存器中讀出USB總線的狀態(tài)。D12有三種基本的類型的命令:初始化、數(shù)據(jù)流和通用命令。(1)初始化命令初始化命令在USB總線進(jìn)行枚舉處理時使用,這些命令用于使能端點(diǎn)的功能,還可用來設(shè)置USB分配的地址,包括:設(shè)置地址/使能、設(shè)置端點(diǎn)使能、設(shè)置模式(設(shè)置分頻系數(shù)、軟連接、端點(diǎn)模式以及中斷模式等)、DMA設(shè)置等命令。表2初始化命令指令集 命令名 接收者 編碼 數(shù)據(jù) 初始化命令設(shè)置地址使能器件 D0h 寫1字節(jié)設(shè)置端點(diǎn)使能器件D8h寫1字節(jié)設(shè)置模式器件F3h寫2字節(jié)設(shè)置DMA器件FBh寫/讀1字節(jié)(2)數(shù)據(jù)流命令數(shù)據(jù)流命令用于管理USB端點(diǎn)和外部微控制器之間的數(shù)據(jù)傳輸,D12通過微控制器中斷初始化大量的數(shù)據(jù)流。微控制器利用這些命令訪問和決定端點(diǎn)的FIFO是否含有有效的數(shù)據(jù)。包括:讀中斷寄存器、選擇端點(diǎn)、讀最后處理狀態(tài)寄存器、讀緩沖區(qū)、寫緩沖區(qū)、使緩沖區(qū)有效、清除緩沖區(qū)、設(shè)置端點(diǎn)狀態(tài)、應(yīng)答建立等命令。表3數(shù)據(jù)流命令指令集 數(shù)據(jù)流命令 讀中斷寄存器 器件 F4h 讀2字節(jié)選擇端點(diǎn) 控制輸出 00h 讀1字節(jié)(可選)控制輸入 01h 讀1字節(jié)(可選)端點(diǎn)1輸出 02h 讀1字節(jié)(可選)端點(diǎn)1輸入 03H 讀1字節(jié)(可選)端點(diǎn)2輸出 04h 讀1字節(jié)(可選)端點(diǎn)2輸入 05h 讀1字節(jié)(可選)讀最后處理狀態(tài) 控制輸出 40h 讀1字節(jié)控制輸入 41h 讀1字節(jié)端點(diǎn)1輸出 42h 讀1字節(jié)端點(diǎn)1輸入 43h 讀1字節(jié)端點(diǎn)2輸出 44h 讀1字節(jié)端點(diǎn)2輸入 45h 讀1字節(jié) 讀緩沖區(qū) 選擇的端點(diǎn) F0h 寫n字節(jié) 寫緩沖區(qū) 選擇的端點(diǎn) F0h 寫n字節(jié) 設(shè)置端點(diǎn)狀態(tài)控制輸出 40h 寫1字節(jié)控制輸入 41h 寫1字節(jié)端點(diǎn)1輸出 42h 寫1字節(jié)端點(diǎn)1輸入 43h 寫1字節(jié)端點(diǎn)2輸出 44h 寫1字節(jié)端點(diǎn)2輸入 45h 寫1字節(jié) 應(yīng)答設(shè)置 選擇的端點(diǎn)F1h 無 緩沖區(qū)清零 選擇的端點(diǎn)F2h 無 使緩沖區(qū)有效 選擇的端點(diǎn) FAh 無(3)普通命令:包括發(fā)送恢復(fù)、讀當(dāng)前幀數(shù)目兩個命令。表4普通命令指令集 普通指令 發(fā)送恢復(fù)F6h無讀當(dāng)前楨樹木F5h讀1或2字節(jié)3.5 PDIUSBD12的管腳配置 PD12共有28個管腳,具有S028和TSSOP28兩種封裝形式,管腳圖如圖4具體的管腳功能如表5:圖 4 PBIUSBBI2的管腳配置3.5 A/D與單片機(jī)接口電路ADC0809允許的最大時鐘頻率為1280kHz,主要管腳功能如下:INO-IN7: 8路模擬量輸入端,可從這8個腳輸入0V-5V待轉(zhuǎn)換的模擬電壓ADDA,ADDB,ADDC:管道地址輸入端。通過編碼的方式來實現(xiàn)管道地址的選擇。CLOCK:時鐘輸入端。ADC0809只有在時鐘脈沖信號的同步下才能進(jìn)行A/D轉(zhuǎn)換時鐘頻率越高轉(zhuǎn)換得越快。典型時鐘頻率是640kHz。 ALE:地址鎖存允許端。START:啟動脈沖輸入端。在時鐘脈沖頻率為640kHz時,START脈寬應(yīng)大于100ns-200ns。EOC:轉(zhuǎn)換結(jié)束信號端。在A/D轉(zhuǎn)換期間,EOC=0表示轉(zhuǎn)換正在進(jìn)行,輸出數(shù)據(jù)不可信,轉(zhuǎn)換完畢后立即使EOC=1表示轉(zhuǎn)換已經(jīng)完成,輸出數(shù)據(jù)可信。D7-DO:轉(zhuǎn)換所得八位輸出數(shù)據(jù),D7是最高位,而DO是最低位。OE:允許輸出端。OE端控制輸出鎖存器的三態(tài)門。當(dāng)OE=1時,轉(zhuǎn)換所得數(shù)據(jù)出現(xiàn)在D7-D0腳,當(dāng)OE-0時D7-DO腳對外是高阻抗。89C52通過P1.4和讀、寫控制線來控制轉(zhuǎn)換器的模擬輸入通道地址鎖存、啟動和允許輸出。編程時注意啟動AD0809后,EOC在一定時間才能變成低電平。表5 PD12的管腳功能 圖5 ADC0809與89C52的接口電路3.6 PDIUSBD12與單片機(jī)接口電路PDIUSBD12與89C52的連接電路如圖6所示。89C52的ALE和PD12的ALE相接,表示采用單獨(dú)地址和數(shù)據(jù)總線配置。其AO腳接高電平用于控制命令或數(shù)據(jù)輸入到PDIUSBD I2,也就是編程中outportcmd()和outportdata()函數(shù)。此外89C52的多位地址/數(shù)據(jù)復(fù)用總線PO可直接與PDIUSBD12的數(shù)據(jù)總線相連,CLKOUT時鐘輸出為89C52提供時鐘輸入。在該數(shù)據(jù)采集系統(tǒng)中,用ADC0809采集0-5V的電壓信號,經(jīng)A/D轉(zhuǎn)換后將數(shù)字量存入預(yù)先設(shè)定的緩沖區(qū)里,利用接口芯片D12將數(shù)據(jù)送至USB總線上。設(shè)備應(yīng)用程序從緩沖區(qū)里取數(shù)據(jù)顯示,通過數(shù)值來說明USB接口的采集速率比一般的串行總線速度高。當(dāng)前端的電壓信號不斷變化的同時,在PC上可以觀察到數(shù)據(jù)的變化,這就表明利用USB接口在數(shù)字采集系統(tǒng)中進(jìn)行數(shù)據(jù)傳輸是能夠?qū)崿F(xiàn)的,而且能夠很好的實現(xiàn),硬件電路原理圖祥見附圖。4 系統(tǒng)軟件4.1 PDIUSBD12的固件編程4.1.1 PDIUSBD12的固件編程思想 PDIUSBD 12是一款帶有并行總線和局部DMA傳輸能力的高速USB接口器件,固件設(shè)計的目標(biāo)就是使PDIUSBD 12在USB上達(dá)到最大的傳輸速率。外圍設(shè)備例如打印機(jī)、掃描儀、外部的海量存儲器和數(shù)碼相機(jī)都可使用PDIUSBD 12在USB上傳輸數(shù)據(jù)。這些設(shè)備的CPU要忙于處理許多設(shè)備控制和數(shù)據(jù)以及圖像處理等任務(wù)。PDIUSBD 12的固件設(shè)計成完全的中斷驅(qū)動。當(dāng)CPU處理前臺任務(wù)時,USB的傳輸可在后臺進(jìn)行。這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時簡化了編程和調(diào)試。 圖6 PDIUSBD12與89C52的連接電路 圖7 前后臺工作原理 后臺ISR(中斷服務(wù)程序)和前臺主程序循環(huán)之間的數(shù)據(jù)交換通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實現(xiàn)。其原理圖如圖7所示。例如,PDIUSBD12的批量輸出端點(diǎn)可使用循環(huán)的數(shù)據(jù)緩沖區(qū),當(dāng)PDIUSBD12從USB收到一個數(shù)據(jù)包,那么就對CPU產(chǎn)生一個中斷請求,CPU立即響應(yīng)中斷。ISR中固件將數(shù)據(jù)包從PDIUSBD12內(nèi)部緩沖區(qū)移到循環(huán)數(shù)據(jù)緩沖區(qū),并在隨后清零PDIUSBD12的內(nèi)部緩沖區(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ù)。這個概念很重要,這樣主循環(huán)程序?qū)W⒂跀?shù)據(jù)的處理而ISR能夠以最大可能的速度進(jìn)行數(shù)據(jù)的傳輸。相似的,控制端點(diǎn)在數(shù)據(jù)包處理時采用了同樣的概念。ISR接收和保存數(shù)據(jù)緩沖區(qū)中的控制傳輸并設(shè)置相應(yīng)的標(biāo)志寄存器。主循環(huán)向協(xié)議處理程序發(fā)出請求。由于所有的標(biāo)準(zhǔn)器件,級別和廠商請求都是在協(xié)議處理程序中進(jìn)行處理,ISR得以保持它的效率,而且一旦增加新的請求只需要在協(xié)議層進(jìn)行修改。4.1.2 PDIUSBD12固件編程的結(jié)構(gòu)固件的積木式結(jié)構(gòu)如圖8所示,圖中箭頭表示數(shù)據(jù)傳輸方向。主循環(huán):采集數(shù)據(jù),發(fā)出USB請求,和處理USB總線事件和用戶功能等等 MAINLOOP.C中斷服務(wù)程序 ISR. C標(biāo)準(zhǔn)請求處理 CHAP 9. C廠商請求處理PROTODMA.CPDIUSBD12命令接口 D12CI. C硬件提取層EPPHAL. C 圖8 固件結(jié)構(gòu)和數(shù)據(jù)流向 下面是事件標(biāo)志“EPPFLAGS”和Setup包數(shù)據(jù)緩沖區(qū)“CONROL_ XFER”的結(jié)構(gòu)體: /事件標(biāo)志 typedef union_ epp_ flagsstruct_flags unsigned char timer:1; unsigned char bus-reset:1; unsigned char suspend:1; unsigned char setup_packet:1; unsigned char remote_wakeup:1; unsigned char in_isr:1; unsigned char control_state:2; unsigned char configuration:1; unsigned char verbose:1; unsigned char epl_rxdone:1; unsigned char setup_dma:1; unsigned char dma_state:2; bits; unsigned short valueEPPFLAGS;/USB設(shè)備請求寄存器typedef struct_ device_request unsigned char bmRequesetType; unsigned char bRequest; unsigned short wValue; unsigned short windex; unsigned short wLength;DEVICE_ REQUEST;/Setup包數(shù)據(jù)緩沖區(qū)typedef struct_control_ xfer DEVICE_ REQUSET DeviceRequest; unsigned short wLength unsigned short wCount; unsigned char*pData; unsigned char dataBufferMAX_ CONTROLDATA_ SIZE:CONTROL_ XFER;4.1.3 PDIUSBD12固件編程的實現(xiàn)1 中斷服務(wù)程序-ISR.C 這部分代碼處理由PDIUSBD12產(chǎn)生的中斷,它將數(shù)據(jù)從PD工USBD12的內(nèi)部FIFO取回到CPU存儲器并建立正確的事件標(biāo)志-通知主循環(huán)進(jìn)行處理。在ISR的入口固件使用D12_ Read Interrupt Register( )來決定中斷源,然后將進(jìn)入相應(yīng)的子程序進(jìn)行處理。PDIUSBD12的固件完全由中斷驅(qū)動ISR的流程圖8如下所示:例如,在OUT數(shù)據(jù)階段的建立包時,工SR將建立包和OUT數(shù)據(jù)都存入CONTROL_ XFER”緩沖區(qū)中,然后將“setup_packer”標(biāo)志就到主循環(huán)這將減少主循環(huán)不必要的服務(wù)時間,并且簡化了主循環(huán)的編程??偩€復(fù)位和掛起并不要求在ISR中進(jìn)行特殊的處理。ISR只需在EPPFLAGS中設(shè)置“bus_ reset”或“suspends”標(biāo)志位,然后退出即可。ISR與前臺主循環(huán)通過事件標(biāo)志EPPFLAGS和數(shù)據(jù)緩沖區(qū)CONROL_ XFER進(jìn)行通信。 主循環(huán)和ISR之間的任務(wù)分配是這樣的:ISR從D12收集數(shù)據(jù)而主循環(huán)對數(shù)據(jù)進(jìn)行處理。當(dāng)工SR收集了足夠的數(shù)據(jù)時,它只通知主循環(huán)己經(jīng)準(zhǔn)備好等待處理。4.1.4 控制端點(diǎn)處理程序控制傳輸總是在SETUP階段開始,之后為可選的DATA階。然后在STATUS階段結(jié)束。如圖10所示為控制端點(diǎn)不同狀態(tài)的轉(zhuǎn)變。固件使用這3種狀態(tài)來正確地處理控制傳輸。 如圖11所示為控制輸出處理程序。為了說明它,舉一個主機(jī)請求的例子叫做“Get Descriptor()”的標(biāo)準(zhǔn)設(shè)備請求。當(dāng)USB器件D12接收到建立包,將產(chǎn)生一個中斷通知MCU,微控制器響應(yīng)中斷,通過讀D12中斷寄存器決定包是發(fā)到控制端點(diǎn)還是普通端點(diǎn)。如果包是送往控制端點(diǎn),MCU要通過讀D12的最后處理狀態(tài)寄存器進(jìn)一步確定數(shù)據(jù)是否是一個建立包,第一個包必須是建立包。yesyesNo No No No No No No No yesyesyesyesyesyesyesyes中斷服務(wù)中斷服務(wù)讀取D12中斷寄存器總線復(fù)位掛起改變?DMA傳輸結(jié)束?控制輸入? 控制輸出?端點(diǎn)1輸出?端點(diǎn)1輸入?端點(diǎn)2輸入?端點(diǎn)2輸出?中斷服務(wù)結(jié)束設(shè)置總線復(fù)位標(biāo)志設(shè)置掛起改變標(biāo)志DMA傳輸結(jié)束處理控制端點(diǎn)發(fā)送數(shù)據(jù)處理控制端點(diǎn)接收數(shù)據(jù)處理端點(diǎn)1發(fā)送數(shù)據(jù)處理端點(diǎn)1接收數(shù)據(jù)處理端點(diǎn)2發(fā)送數(shù)據(jù)處理端點(diǎn)2接收數(shù)據(jù)處理No No No No No yesyesyesyesyesyesyesyes讀取D12中斷寄存器總線復(fù)位掛起改變?DMA傳輸結(jié)束?控制輸入? 控制輸出?端點(diǎn)1輸出?端點(diǎn)1輸入?端點(diǎn)2輸入?端點(diǎn)2輸出?中斷服務(wù)結(jié)束設(shè)置總線復(fù)位標(biāo)志設(shè)置掛起改變標(biāo)志DMA傳輸結(jié)束處理控制端點(diǎn)發(fā)送數(shù)據(jù)處理控制端點(diǎn)接收數(shù)據(jù)處理端點(diǎn)1發(fā)送數(shù)據(jù)處理端點(diǎn)1接收數(shù)據(jù)處理端點(diǎn)2發(fā)送數(shù)據(jù)處理端點(diǎn)2接收數(shù)據(jù)處理YyyyyesNo No No 圖9 中斷服務(wù)程序流程無數(shù)據(jù)控制返回狀態(tài)空閑接收發(fā)送輸入輸出 圖10 控制端的安處理程序轉(zhuǎn)換從下面的流程圖10中可以看出,MCU需要通過選擇控制輸出端點(diǎn)提取建立包的內(nèi)容來決定端點(diǎn)是為滿還是空。如果控制端點(diǎn)為滿,MCU將從緩沖區(qū)讀出內(nèi)容并將其存入存儲區(qū)。之后,它將從存儲區(qū)使主設(shè)備請求生效。如果是一個有效的請求,MCU必須向控制輸出端點(diǎn)發(fā)送應(yīng)答建立命令以重新使能下一個建立階段接下來MCU需要證實控制傳輸是控制讀還是寫,這可以通過讀建立包中bmRequestType的第8位來實現(xiàn)。如果控制傳輸是一個控制讀類型,那就是說器件需要在下一個數(shù)據(jù)階段向主機(jī)發(fā)回數(shù)據(jù)包。MCU需要設(shè)置一個標(biāo)志以指示USB設(shè)備現(xiàn)在正處于傳輸模式,即準(zhǔn)備在主機(jī)發(fā)送請求時發(fā)送數(shù)據(jù)。建立階段結(jié)束之后,主機(jī)會執(zhí)行數(shù)據(jù)階段。D12等待接收Control_ In包,過程如下面的流程圖12“控制輸入處理程序”所示。MCU首先需要通過讀D12的最后處理狀態(tài)寄存器清零Control_ In中斷標(biāo)志位,接著MCU再確認(rèn)D12處于傳輸模式后進(jìn)行數(shù)據(jù)包的發(fā)送。 由于D12的控制端點(diǎn)只有16字節(jié)FIFO,如果傳輸?shù)拈L度大于16字節(jié),MCU在傳輸階段就必須控制數(shù)據(jù)的數(shù)量。如流程圖11所示,MCU必須檢查要發(fā)送到主機(jī)的當(dāng)前和剩余的數(shù)據(jù)大小。如果剩下的字節(jié)數(shù)大于16, MCU將先發(fā)送16字節(jié)并用減去參考長度(要求的長度)16。當(dāng)下一個Corntol_ In標(biāo)志來到時,MCU將確定剩余的字節(jié)是否為零。如果己經(jīng)沒有數(shù)據(jù)要發(fā)送,MCU需要發(fā)送一個空的包以指示主機(jī)數(shù)據(jù)已經(jīng)發(fā)送完畢。如果建立包為Set-Descriptor( )請求,那么建立包中的控制傳輸將指示此包為控制寫類型。在執(zhí)行完Set_ Descriptor請求過程后,MCU等待數(shù)據(jù)階段。主機(jī)發(fā)送一個Control_ Out標(biāo)志,MCU從D12緩沖區(qū)中減去數(shù)據(jù)。流程現(xiàn)在處于Control_ Out處理程序的右端。MCU首先確認(rèn)D12是否處于USB_ Receive模式。然后MCU通過檢查選擇控制輸出端點(diǎn)確認(rèn)緩沖區(qū)是否己滿并將數(shù)據(jù)從緩沖區(qū)讀出。NONONOYesYesYes讀端點(diǎn)處理狀態(tài) 清中斷標(biāo)志控制輸入入口發(fā)送狀態(tài)剩下數(shù)據(jù)16字節(jié)子程序結(jié)束剩下0 字節(jié)發(fā)送16個字節(jié)數(shù)據(jù)設(shè)置為發(fā)送狀態(tài)發(fā)送剩下數(shù)據(jù)設(shè)置為等待狀態(tài)發(fā)送一個空包設(shè)置為等待狀態(tài) 圖11 控制輸入處理流程4.1.5 普通端點(diǎn)處理程序 端點(diǎn)1和端點(diǎn)2這里定義為普通輸入輸出。普通輸出端點(diǎn)配置為從主機(jī)接收數(shù)據(jù)包。當(dāng)MCU從主機(jī)接收Generic_ Out標(biāo)志(通過讀中斷寄存器識別)時,D12中斷位必須清零。選擇端點(diǎn)將清零Generic_ Out緩沖區(qū),接下來MCU需要確認(rèn)NONONONONONOYesYesYesYesYesYesYes控制輸出入口讀端點(diǎn)處理狀態(tài) 清中斷標(biāo)志建立包?接收數(shù)據(jù)出錯讀取斷電數(shù)據(jù)并保對控制輸入端點(diǎn)和控制輸出斷電進(jìn)行建立數(shù)據(jù)對應(yīng)包設(shè)置等待狀態(tài)停止控制端點(diǎn)設(shè)置為等待狀態(tài)數(shù)據(jù)長度出錯子程序結(jié)束處于接收狀態(tài)設(shè)置等待狀態(tài),設(shè)置建立包標(biāo)志標(biāo)志設(shè)置發(fā)送狀態(tài),設(shè)置建立包標(biāo)志標(biāo)志設(shè)置等待狀態(tài)帶數(shù)據(jù)的要求:讀取要求?讀取端點(diǎn)數(shù)據(jù)并保存接收完畢 ?設(shè)置為等待狀態(tài)設(shè)置建立包標(biāo)志NO 圖12 控制輸出處理流程數(shù)據(jù)的長度并把數(shù)據(jù)讀出,然后設(shè)置收到數(shù)據(jù)標(biāo)志位bEPPflag。對于普通輸入端點(diǎn)的中斷,只要讀取端點(diǎn)號的最后處理狀態(tài)寄存器來消除中斷寄存器的相應(yīng)位,把狀態(tài)清零就可以了。Generic_ In標(biāo)志是在發(fā)送完數(shù)據(jù)后才產(chǎn)生的,當(dāng)還有數(shù)據(jù)要發(fā)送時可以在中斷程序里接著繼續(xù)發(fā)。注意:這里的數(shù)據(jù)發(fā)送完成標(biāo)志是指在主機(jī)的一個有效的IN事務(wù)后才發(fā)生的。當(dāng)主機(jī)發(fā)出IN事務(wù)而設(shè)備沒有送出數(shù)據(jù)時,是不會產(chǎn)生中斷的。4.1.6 主循環(huán)-MAINLOOP.C MCU一旦上電就需要初始化其所有端口、存儲區(qū)、定時器和中斷服務(wù)程序。之后MCU將重新連接USB,包括將Soft_ Connect寄存器設(shè)置為ON。這些過程是很重要的,因為它確保了在MCU準(zhǔn)備好服務(wù)D12之前D12不會進(jìn)行操作。 在主循環(huán)程序中MCU對鍵盤進(jìn)行輪詢。如果任何一個特定的按鍵被按下,鍵處理命令將執(zhí)行子程序并返回主循環(huán)。增加該子程序的目的僅僅是為了調(diào)試。1ms定時器用于激活該子程序以檢測在評估板上的任何按鍵。當(dāng)輪詢到了檢測建立包時,它確認(rèn)建立標(biāo)志在之前是否被中斷服務(wù)程序所置位。如果建立標(biāo)志置位,它將向協(xié)議層發(fā)送一個器件請求進(jìn)行處理。下面所示的流程圖13是主程序在前臺執(zhí)行的流程。4.1.7 PDISBD12固件編程的關(guān)鍵注意事項(1)在編寫PDIUSBDI2固件程序時需要注意: 1單片機(jī)的中斷應(yīng)設(shè)置為電平觸發(fā):中斷后一定要讀上次傳輸狀態(tài)寄存器(命令40-45H),以清除中斷寄存器中的中斷標(biāo)志。這樣,PDIUSBD12的中斷輸出才能變回高電平。這一點(diǎn)非常重要。2在接收到Setup包后,一定要調(diào)用ACK setup命令重新使能端口0。3在向IN端點(diǎn)寫完數(shù)據(jù)后,一定要調(diào)用Vali date Buffer(命令FAH ),指明緩沖區(qū)中的數(shù)據(jù)有效,可以發(fā)送到主機(jī)。4讀完數(shù)據(jù)后,一定要調(diào)用Clear Buffer(命令F2H),以保證可以接收新的包。5可以通過調(diào)用Read Chip ID(命令FDH)檢查PDIUSBDI2是否工作。該命令要讀兩個字節(jié)數(shù)據(jù)。NoNoNoNoYesYesYesYes初始化I/O口、定時器和中斷,重新連接到USB總線定時器事件標(biāo)志?總線復(fù)位?掛起改變?循環(huán)Main Loop總線復(fù)位處理掛起改變處理調(diào)用協(xié)議處理程序建立包? 更新LED狀態(tài)采集按鍵狀態(tài)圖13 主循環(huán)流程圖(2)USB初始化過程為: 1 Set Address Enable; 2 Set Endpoint Enable(此時LED亮); 3 Disconnect; 4delay(1-2 s); 5 Connect(即用43h參數(shù)調(diào)用Set Mode,此時LED滅); 6Read Interrupt Register; 完成初始化工作后就可作其它的前臺工作了,并在前臺判斷是否有Setup包(通過一個變量,當(dāng)中斷服務(wù)程序檢測到有Setup包時,設(shè)置該變量),然后執(zhí)行響應(yīng)的控制傳輸。4.2 USB設(shè)備驅(qū)動程序的開發(fā) USB總線設(shè)備驅(qū)動程序必須遵循由Microsoft為Windows 98及其以后版本所定義的Win32驅(qū)動程序模型。這些驅(qū)動程序就是WDM(Windows Driver Model),其擴(kuò)展名一般為.sys(當(dāng)然其他文件類型也可以使用.sys擴(kuò)展名)。它與VXD和NT式的驅(qū)動程序不同,它是內(nèi)核態(tài)程序,采用了分層處理的方式,不需要直接和硬件打交道。 與其它的低層驅(qū)動程序一樣,WDM驅(qū)動程序負(fù)責(zé)在一個特權(quán)層實現(xiàn)應(yīng)用程序與操作系統(tǒng)的通信。一個WDM驅(qū)動程序可以允許或者否定一個應(yīng)用程序?qū)σ粋€設(shè)備提出的訪問。例如,一個游戲桿的驅(qū)動程序可以允許任一個應(yīng)用程序來使用個游戲桿,或者它可以為某個應(yīng)用程序保留以供獨(dú)立使用。Windows為其他低層設(shè)備驅(qū)動程序和WDM驅(qū)動程序所保留的能力還包括對硬件中斷的響應(yīng)和DMA傳輸。 設(shè)計WDM設(shè)備驅(qū)動程序模型是為了給運(yùn)行在Win 98及其以后版本(包括Windows 2000系統(tǒng))下的任一設(shè)備提供一個通用的驅(qū)動程序模型。WDM定義了一個基本模型處理所有類型的數(shù)據(jù)。例如,USB總線類驅(qū)動程序為所有USB總線設(shè)備提供了一個抽象的模型,并具有由所有客戶驅(qū)動程序預(yù)先定義的接口。有了對所有設(shè)備類型都相同的核心驅(qū)動程序模型,驅(qū)動程序開發(fā)就可以更容易地從一種類型的設(shè)備轉(zhuǎn)移到另一種類型的設(shè)備上去,這也意味著驅(qū)動程序模型的內(nèi)核實現(xiàn)可以是固定的。如果每一種類型的設(shè)備都具有不同類型的驅(qū)動程序模型,那么開發(fā)工作無疑會變的很繁瑣。WDM驅(qū)動程序由兩種工作模式,即內(nèi)核模式和用戶模式。 (1)內(nèi)核模式:當(dāng)CPU運(yùn)行于內(nèi)核模式時,一切程序的指令都可以運(yùn)行,即所運(yùn)行的程序沒有任何操作系統(tǒng)的限制。任務(wù)可以運(yùn)行特權(quán)級指令,對任何I/O設(shè)備有全部的訪問權(quán),還能夠訪問任何虛地址和控制虛擬內(nèi)存硬盤。這種模式對應(yīng)于Intel 80x86處理器上0級環(huán)。(2)用戶模式:在這個模式中,硬件可以防止特權(quán)級指令的執(zhí)行,并進(jìn)行內(nèi)存和I/空間引用的檢查,這就需要操作系統(tǒng)限制執(zhí)行的任務(wù)對各種I/O操作進(jìn)行訪問,并捕捉違反系統(tǒng)完整的行為。在用戶模式中,如果運(yùn)行的代碼不通過操作系統(tǒng)中的某種機(jī)制,就不能進(jìn)入內(nèi)核模式。在Intel 80x86處理器上,該模式對應(yīng)于
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 衢江區(qū)游樂設(shè)施管理辦法
- 襄陽市道路管理辦法規(guī)定
- 西秀區(qū)人才津貼管理辦法
- 論壇管理研討會暫行辦法
- 評標(biāo)委員會管理暫行辦法
- 財務(wù)負(fù)責(zé)人委派管理辦法
- 購物卡會計憑證管理辦法
- 貴州省防洪預(yù)案管理辦法
- 資產(chǎn)證券化業(yè)務(wù)管理辦法
- 足球俱樂部運(yùn)營管理辦法
- 低壓配電柜及配電箱調(diào)試方案
- 【課件】第五單元化學(xué)反應(yīng)的定量關(guān)系新版教材單元分析九年級化學(xué)人教版(2024)上冊
- 十堰房縣國有企業(yè)招聘筆試題庫2024
- 希望杯四年級歷年真題卷
- 市第二人民醫(yī)院關(guān)于印發(fā)醫(yī)療質(zhì)量控制分中心專項經(jīng)費(fèi)管理辦法的通知
- 04S519小型排水構(gòu)筑物(含隔油池)圖集
- 工程施工人員安全教育培訓(xùn)【共55張課件】
- 人教版九年級物理全一冊《14.1熱機(jī)》同步練習(xí)題帶答案
- 因式分解交叉相乘法練習(xí)100題及答案
- 研討報告的格式范文模板
- 有機(jī)發(fā)光材料的合成和應(yīng)用研究
評論
0/150
提交評論