freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于usb數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)-資料下載頁

2024-12-07 09:44本頁面

【導(dǎo)讀】要求也越來越高。傳統(tǒng)的通信方式由于傳輸速度慢、抗干擾能力弱、安裝麻煩等原因。上問題,因此串行總線技術(shù)在計(jì)算機(jī)系統(tǒng)及通信設(shè)備中迅速得到了廣泛的應(yīng)用??蚣芎透鱾€(gè)分芯片的選擇。整個(gè)系統(tǒng)包括硬件設(shè)計(jì)和軟件設(shè)計(jì)兩部分,實(shí)現(xiàn)數(shù)據(jù)高速。轉(zhuǎn)換和采集、數(shù)據(jù)顯示、數(shù)據(jù)保存以及數(shù)據(jù)打印等功能。接口將數(shù)據(jù)傳送給PC機(jī)。硬件設(shè)計(jì)部分主要包括主控制器外圍。電路設(shè)計(jì)與模數(shù)轉(zhuǎn)換器AD0809的連接、電源設(shè)計(jì)部分等。系統(tǒng)軟件部分包括USB固件程序、設(shè)備的驅(qū)動(dòng)程序和用戶界面程序。好,能達(dá)到設(shè)計(jì)的預(yù)期效果。

  

【正文】 Whlle(TRUE) //主循環(huán) { if(GotSUD) //等待 SUDAV { SetupCommand()。 //指向 setup 指令 GotSUD=FALSE。 //清除 SUDAV 標(biāo)志位 } } ?????? (2)用戶定義功能程序 分析 下面分別介紹主程序中的兩個(gè)函數(shù) :TD_Init()函數(shù)和 TD_Poll()函數(shù) l)TD_Init()函數(shù) TD_Init()是 C8051F320 的初始化程序,它是在重新枚舉和開始任務(wù)分配前調(diào)用的。其初始化工作主要完成以下內(nèi)容 : ①設(shè)置的 CPU 的時(shí)鐘頻率和 slaveFIFO 接口時(shí)鐘頻率,均為 48MHz ②設(shè)置傳輸方式為 BULK 方式,并設(shè)置相關(guān)的端點(diǎn)的傳輸方向其程序代碼如下 : Void TD_Init(void) //開始時(shí)調(diào)用 { //設(shè)置 CPU 的時(shí)鐘為 48MHz CPUCS=((CPUCSamp。~bmCLKSPD)/bmCLKSPDI)。 //設(shè)置 slaveFIFO 接口時(shí)鐘為 48MHz IFCONFIG}=0x40。 EP1OUTeFG=oxAo。 //EP1 為 bulk 傳輸方式,方向 :輸出 EPImCFG=OxE2。 //EP1 為 bulk 傳輸方式,方向 :輸入 SYNCDELAY。 EPZCFG=oxE2。 //EP2 為 bulk 傳輸方式,方向 :輸入,雙緩沖 SYNCDELAY。 EP4CFG=0x20。 //EP4 未使用 SYNCDELAY。 EP6cFG=0xA2。 //EP6 為 bulk 傳輸方式,方向 :輸出,雙緩沖 SYNCDELAY。 天津職業(yè)技術(shù)師范大學(xué) 2021屆本科生畢業(yè)設(shè)計(jì) 21 EPSCFG=0x20。 //EP8 未使用 SYNCDELAY。 EPZBCL=0x80。 SYNCDELAY。 EPZBCL=0x80。 SYNCDELAY。 AUTOPTRSETUP=0x01。 //使能雙緩沖自動(dòng)指針 Rwnen=TRUE。 //使能遠(yuǎn)程喚醒 } 2)TDPoll()函數(shù) TDPoll()函數(shù)是用戶自己要實(shí)現(xiàn)功能函數(shù),在這個(gè)函數(shù)中,系統(tǒng)實(shí)現(xiàn)了將數(shù)據(jù)寫入輸出端點(diǎn)緩沖區(qū)內(nèi),等待 PC 機(jī)的讀取。在 USB 循環(huán)調(diào)用的過程中不斷執(zhí)行用戶程序,不斷進(jìn)行數(shù)據(jù)的傳輸。其程序代碼如下 : Void TD_Poll(void) //當(dāng)設(shè)備閑置 時(shí)重復(fù)調(diào)用 { Int i。 BYTExdata*addr。 Addr=MEMORY。 Read_data(void)。 if(!(EP2468TATamp。bmEP2FULL)) { //檢查 EPZ 數(shù)據(jù)是否滿 AUTOPTRHI“ MSB(amp。EP2FIFOBUF): AUTOPTRLI=LSB(amp。EP2FIFOBUF)。 //通過自動(dòng)指針將 EPZIN 緩沖區(qū)的數(shù)據(jù)傳送給 EP6OUT for(i=Ox0000:i512。i++) {addr[i]=IN2BUF[i]。 OUT6BUF[11=addr[i]。 } EP2BCH=MSB(512)。 SYNCDELAY。 EP2BCL=LSB(512)。 //重新配置 EP2 } 天津職業(yè)技術(shù)師范大學(xué) 2021屆本科生畢業(yè)設(shè)計(jì) 22 在 TD_poll()函數(shù)中執(zhí)行讀取數(shù)據(jù)傳輸程序,首先判斷緩沖區(qū)是否滿標(biāo)志,如果不滿,則開始讀取 8 位數(shù)據(jù),也就是刀 D 的數(shù)據(jù),并把緩沖區(qū)的地址指針加 1,保證數(shù)據(jù)不會(huì)被后來的數(shù)據(jù)覆蓋,并保存在下一個(gè)地址中。讀完 512 個(gè)數(shù)據(jù)后,緩沖區(qū)滿,這時(shí),可以開始傳送數(shù)據(jù),由于 USB 總線上是以字節(jié)為單位傳輸數(shù)據(jù),而數(shù)據(jù)是按照字來記數(shù),因此,把讀取的數(shù)據(jù)記數(shù)器放 大兩倍,然后把字節(jié)數(shù)變量的高字節(jié)和低字節(jié)分別賦給端點(diǎn) 2 的傳輸字節(jié)計(jì)數(shù)器 EPZBCH 和EPZBCL,完成該過程之后,程序根據(jù)主機(jī)單位請(qǐng)求,開始自動(dòng)傳送數(shù)據(jù)。 3)數(shù)據(jù)讀取函數(shù) 在硬件電路中采用 USB 控制的方式讀數(shù)據(jù),即用 C8051F320 的 PA3 引腳來控制 C8051F320 的 OE 引腳, OE 引腳為低電平時(shí) AD0809 將轉(zhuǎn)換結(jié)果鎖存,C8051F320 則可讀取轉(zhuǎn)換結(jié)果 。OE 引腳為高電平時(shí)無效。數(shù)據(jù)讀取函數(shù)名Read_data(void),主要完成 C8051F320 將 AD0809 轉(zhuǎn)換好的數(shù)據(jù)讀進(jìn)來,其程序?yàn)?: Read_data(void) //讀 AD 的轉(zhuǎn)換結(jié)果 . { PA3=0。 //將 PA3 引腳置為低電平 Int i。 BYTExdata*addr。 Add=MEMORY。 if(flag!=512) { //檢查 EPZ 數(shù)據(jù)是否沒滿 AUTOPTRHI=MSB(amp。EP2FIFOBUF)。 AUTOPTRLI=LSB(amp。EP2FIFOBUF)。 addr[flag]=PB。 IN2BUF[flagl=addr[flag]*2 一 5。 //將 數(shù)據(jù)乘以 2 減 5 Flag=flag+2: } else { flag=O。 //標(biāo)志設(shè)為 0 EP2BCH=MSB(512)。 SYNCDELAY。 EP2BCL=LSB(512)。 //重新配置 EPZ } PA3=1。 天津職業(yè)技術(shù)師范大學(xué) 2021屆本科生畢業(yè)設(shè)計(jì) 23 flaga=0。 } 驅(qū)動(dòng)程序設(shè)計(jì) 主機(jī)與外設(shè)通過 USB 接口的通信是通過驅(qū)動(dòng)程序來實(shí)現(xiàn)的。在 Windows 環(huán)境中,定義了 Windows 設(shè)備驅(qū)動(dòng)程序模型,其中設(shè)立了兩種模式,即用戶模式和內(nèi)核模式。應(yīng)用程序只能工作在用戶模式下,而驅(qū)動(dòng)程序大多運(yùn)行在內(nèi)核模式下。驅(qū)動(dòng)程序采用了分層結(jié)構(gòu)。 USB 總線設(shè)備驅(qū)動(dòng)程序必須遵循由 Microsoft 為 Windows98 及其以后版本所定義的 Win32 驅(qū)動(dòng)程序模型。這些驅(qū)動(dòng)程序就是 WDM(Windows Driver Model), 其擴(kuò)展名一般為 .sys。由于它是內(nèi)核態(tài)程序,采用了分層處理的方式,因此,不需要自接和硬件打交道。與其他的底層驅(qū)動(dòng)程序一樣, WDM 驅(qū)動(dòng)程序負(fù)責(zé)在一個(gè)特權(quán)層實(shí)現(xiàn)應(yīng)用程序和操作系統(tǒng)的通信。一個(gè) WDM 驅(qū)動(dòng)程序可以允許或否定一個(gè)應(yīng)用程序?qū)σ粋€(gè)設(shè)備提出的訪問。例如,一個(gè)游戲桿的驅(qū)動(dòng)程序可以允許任一個(gè)應(yīng)用程序來 使用一個(gè)游戲桿,或者它可以為某個(gè)應(yīng)用程序而保留以供其獨(dú)占使用。 Windows 為其他底層設(shè)備驅(qū)動(dòng)程序和 WDM 驅(qū)動(dòng)程序所保留的能力還包括對(duì)硬件中斷的響應(yīng)和 DMA 傳輸。 Windows 系統(tǒng)提供了 PCI、 PnPISA、 USB 和 IEEE1394 總線驅(qū)動(dòng)程序。 PCI總線驅(qū)動(dòng)程序枚舉和配置 PCI 總線上的設(shè)備。 PnPISA 總線驅(qū)動(dòng)程序?qū)梢允褂眉床寮从门渲玫?ISA 設(shè)備進(jìn)行枚舉和配置。 USB 總線驅(qū)動(dòng)程序則用于枚舉和控制 USB 總線。主控制器驅(qū)動(dòng)程序是訪問兩種類型的 USB 總線設(shè)備的標(biāo)準(zhǔn)。 USB總線客戶驅(qū)動(dòng)程序可以通過使用 IOCTL,由 USB 類驅(qū)動(dòng)程序來訪問 USB 總線設(shè)備。 IEEE1394 總線驅(qū)動(dòng)程序用于枚舉和控制 IEEE1394 高速總線。 USB 總線設(shè)備驅(qū)動(dòng)程序使用標(biāo)準(zhǔn) Windows 系統(tǒng) USB 類驅(qū)動(dòng)程序訪 USBDI(USB 驅(qū)動(dòng)程序接口 )。 文件就是 Windows 系統(tǒng)中的 USB 類驅(qū)動(dòng)程序,它使用 來訪問通用的主控制器接口設(shè)備,或者使用 訪問開放式主控制器接口設(shè)備。 是根集線器和外部集線器的 USB 總線驅(qū)動(dòng)程序。在 PCI枚舉器發(fā)現(xiàn)了 USB 總線主控制器之后,它會(huì)自動(dòng)裝入相關(guān)的 驅(qū)動(dòng)程序。這也就是本章第一節(jié)中所要說明的,只要啟動(dòng)了主板 CMOS 中的 USB 總線功能,就會(huì)在設(shè)備管理器中見到“通用串行總線”的標(biāo)記和字樣。 WDM 和 USB 驅(qū)動(dòng)程序的介紹 WDM(Windows Driver Model)是微軟提出的視窗操作系統(tǒng)的驅(qū)動(dòng)模型,支持分層管理和面向?qū)ο?。圖 是 WDM 分層結(jié)構(gòu)的示意圖。 天津職業(yè)技術(shù)師范大學(xué) 2021屆本科生畢業(yè)設(shè)計(jì) 24 圖 WDM 分層結(jié)構(gòu)示意圖 在示意圖中,處于最底層的是總線驅(qū)動(dòng)程序。總線驅(qū)動(dòng)程序由硬件廠商提供,管理總線上設(shè)備的識(shí)別和操作,如 PIC 總線。設(shè)備驅(qū)動(dòng)程序中可以有下層過濾 器驅(qū)動(dòng)層,也可以有上層過濾器驅(qū)動(dòng)程序,他們是可選的,可以實(shí)現(xiàn)特定的操作如防火墻就是一種過濾器驅(qū)動(dòng)程序,它可以對(duì)外部系統(tǒng)的訪問進(jìn)行限制。功能驅(qū)動(dòng)程序就是通常意義上所說的設(shè)備驅(qū)動(dòng)程序。驅(qū)動(dòng)程序間的訪問是通過IRP(I/O Request Packet)來傳遞的。 I/O 管理器給最上一層驅(qū)動(dòng)程序發(fā)送 IRP,該驅(qū)動(dòng)程序若能處理就直接返回,否則將其傳給下一層,以次類推,最后到達(dá)總線驅(qū)動(dòng)程序。 Windows2021 是基于對(duì)象管理,每一個(gè)驅(qū)動(dòng)對(duì)應(yīng)于一個(gè)設(shè)備對(duì)象。有設(shè)備堆棧,設(shè)備堆棧指導(dǎo)著如何一層一層向下傳遞 IRP。 WDM 驅(qū) 動(dòng)程序的入口例程是 DriverEntry,這是需要實(shí)現(xiàn)的第一個(gè)例程。在驅(qū)動(dòng)程序加載后就會(huì)馬上執(zhí)行例程 DriverEntry。 DriverEntry 例程需要提供 IRP 處理例程指針表。開發(fā)人員可以在 DriverEniry 里加入自己的初始化代碼。 WDM 驅(qū)動(dòng)程序的另一個(gè)重要的例程是 AddDevice 例程。 AddDeviee 例程負(fù)責(zé)生成功能設(shè)備對(duì)象,上層驅(qū)動(dòng)程序可以通過訪問該功能設(shè)備對(duì)象來實(shí)現(xiàn)對(duì)驅(qū)動(dòng)功能的調(diào)用。在 AddDevice 例程里還應(yīng)有設(shè)備鏈接名或接口 (GUID)。通過設(shè)備鏈接名或接口,應(yīng)用軟件可以訪問設(shè)備。 USB 驅(qū)動(dòng)程序完全遵從 WDM 模型。與其它設(shè)備驅(qū)動(dòng)程序一樣, USB 設(shè)備驅(qū)動(dòng)程序直接通過 USB 總線驅(qū)動(dòng)程序來訪問硬件。 USB 總線驅(qū)動(dòng)程序名是。設(shè)備驅(qū)動(dòng)程序僅依靠創(chuàng)建 URB(USB 請(qǐng)求塊 ),并把 URB 提交到總線驅(qū)動(dòng)程序來完成硬件操作??梢园? 看作是接收 URB 的實(shí)體,對(duì)USBD 的調(diào)用被轉(zhuǎn)化為帶有主功能代碼為 :IRPesMJeeINTERNALDEvICEcoNTRoL 的 I 妙。然后 USBD 再調(diào)度總線時(shí)間,發(fā)出 URB 中的指定操作。 USB 總線驅(qū)動(dòng)程序自動(dòng)檢測(cè)新插入的 USB 設(shè)備。然后它讀 取設(shè)備內(nèi)的設(shè)備描述符以查明插入的是何種設(shè)備,描述符中的廠商和產(chǎn)品FiDOFiDOFD OFD OIRP上層過濾驅(qū)動(dòng)程序功能驅(qū)動(dòng)程序下層過濾驅(qū)動(dòng)程序總線驅(qū)動(dòng)程序天津職業(yè)技術(shù)師范大學(xué) 2021屆本科生畢業(yè)設(shè)計(jì) 25 標(biāo)識(shí)以及其它的描述符一同決定具體安裝哪一個(gè)驅(qū)動(dòng)程序。配置管理器調(diào)用驅(qū)動(dòng)程序的 AddDevice 函數(shù)。 AddDeviee 創(chuàng)建設(shè)備對(duì)象,把設(shè)備對(duì)象連接到驅(qū)動(dòng)程序堆棧上,最后,配置管理器向驅(qū)動(dòng)程序發(fā)送一個(gè)即插即用請(qǐng)求 :IRP_MN_START_DEVICE。 驅(qū)動(dòng)程序的源代碼分析 Windows 驅(qū)動(dòng)程序的開發(fā)軟件很多,但都離不開 DDK(Driver Develop Kit)。本文講述的 USB 驅(qū)動(dòng)程序是用 DriverWorks 開發(fā)的。 DriverWorks 自己不能編譯開發(fā)驅(qū)動(dòng)程序代碼,它只是對(duì) DDK 例程函數(shù)調(diào)用的 C++封裝,這樣就減少了編程人員的重復(fù)編碼。 DriverWorks 在對(duì) DDK 例程函數(shù)進(jìn)行封裝的同時(shí)也盡可能做到執(zhí)行代碼的高效率。用 DriverWorks 開發(fā)驅(qū)動(dòng)程序還需要安裝 DDK 和VisualC++,在 VisualC++ 的開發(fā)環(huán)境中進(jìn)行驅(qū)動(dòng)的編寫和編譯。DriverWorks 是包含在 Driverstudio 軟件中, Driverstudio 還提供了強(qiáng)大的驅(qū)動(dòng)程序調(diào)試工具。 DriverWorks 對(duì)驅(qū)動(dòng)程序的例程調(diào)用等進(jìn)行了 C++類封裝。 類 Kdriver主要對(duì) DriverEntry 例程進(jìn)行了封裝。類 Kdriver 是一個(gè)虛基類,開發(fā)人員必須從類 Kdriver 中產(chǎn)生一個(gè)派生類來建立驅(qū)動(dòng)程序框架。類 KDeviee 則是對(duì) AddDevice例程和 IRP 處理例程進(jìn)行了封裝。類 KPnPDevice 是類 Kdevice 的子類,用來支持 WDM 環(huán)境中驅(qū)動(dòng)程序的即插即用,它也是一個(gè)虛基類,必須派生。開發(fā)人員可以重載類 KPnPDevice 的成員函數(shù)。 本系統(tǒng)中需要編寫 USB 驅(qū)動(dòng)程序在 USB 驅(qū)動(dòng)過程中, USB 只需要實(shí)現(xiàn)數(shù)據(jù)的采集和讀取而不需要具體的復(fù)雜操作,因此,按照 Driverworks 的程序向?qū)б徊讲缴a(chǎn)源文件,最后編譯生成 .SYS 文件即可。 驅(qū)動(dòng)程序采用接口方式來實(shí)現(xiàn)對(duì)設(shè)備的訪問, GUID 設(shè)為 {0xl220dd4,0xl480, 0x4172, {0x8b, 0
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1