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

正文內(nèi)容

基于單片機msp430f449的usb接口數(shù)據(jù)傳輸系統(tǒng)設(shè)計(參考版)

2024-12-10 02:22本頁面
  

【正文】 但是,本設(shè)計還有許多缺陷,不足以完成實際的數(shù)據(jù)采集和大批量數(shù)據(jù)的高速傳輸,目前速度并沒有充分體現(xiàn)出 USB 總線的優(yōu)勢,并且驅(qū)動程序也較為繁瑣,有待進一步修改調(diào)試,從而達到精簡高效的最終目標。系統(tǒng)的驅(qū)動程序采用 DDK 編寫。在數(shù)據(jù)信號采集及 A/D 轉(zhuǎn)換系統(tǒng)里,通過 TLC0834 串行 A/D 轉(zhuǎn)換器 實現(xiàn)了數(shù)據(jù)的采集和 A/D 轉(zhuǎn)換。 40 4 總 結(jié) 本文設(shè)計了以新一代微處理器 MSP430F449 為核心,以 PDIUSBD12 接口芯片為 USB 設(shè)備控制器的 USB 接口數(shù)據(jù)傳輸系統(tǒng)。 (7)設(shè)置配置 主機讀取完描述符后,就需要對設(shè)備進行配置,使得設(shè)備從地址狀態(tài)進入配置狀 態(tài)。 (6)讀取描述符集合 主機除了讀取設(shè)備描述符和配置描述符外,還要讀取接口描述符和端點描述符。最后主機發(fā)送 0 字節(jié)的數(shù)據(jù)包到設(shè)備作為狀態(tài)應(yīng)答。 (4)主機從新的地址獲取設(shè)備描述符 分配好設(shè)備地址后,主機就從新的地址獲取設(shè)備描述符。 (3)地址分配 在地址分配階段里,主機分配給設(shè)備一個地址。山于 D12 的端點 0的緩沖區(qū)只有 16 個字節(jié),所以單片機就先發(fā)送 16 個字節(jié)的設(shè)備描述符。 } USB 設(shè)備枚舉的數(shù)據(jù)傳輸過程 (1) 主機檢測到有設(shè)備插上,總線復(fù)位 當設(shè)備與主機連接時,主機就會檢測到一個連接條件,主 機就開始進行總線復(fù)位。 IoCompleteRequest( Irp, IO_NO_INCREMENT )。 } Irp = ntStatus。 } else //構(gòu)造 IRP中的相關(guān)域 { Irp = 0。 38 USBD_SUCCESS( urb)) { Irp = WriteLen。 if( NT_SUCCESS( ntStatus ) amp。 //建立中斷或者塊傳輸?shù)?IRP ntStatus = Eval_CallUSBD( DeviceObject, urb )。 } transferFlags = USBD_SHORT_TRANSFER_OK。 urb = ExAllocatePool( NonPagedPool, siz )。 siz = sizeof( struct _URB_BULK_OR_INTERRUPT_TRANSFER )。( pInterfaceInfoPipes[ PipeNum ] )。 //PDIUSBD12 的寫數(shù)據(jù)管道 16,此管道采用塊傳輸方式,是單向輸出管道。 pInterfaceInfo = deviceExtensionInterface。 //得到設(shè)備對象 WriteLen = irpStack。 irpStack = IoGetCurrentIrpStackLocation( Irp )。 PURB urb。 ULONG PipeNum。 CHAR* ioBuffer。 PDEVICE_EXTENSION deviceExtension。 USBD_PIPE_INFORMATION* pPipeInfo。 } 36 對設(shè)備寫入數(shù)據(jù) 當客戶 應(yīng)用 程序有 讀取 設(shè)備 數(shù)據(jù)的 要求 時,系 統(tǒng)將 此要 求以IRP_MJ_WRITE 的 IRP 形式傳遞給功能驅(qū)動程序 , 并以下代碼執(zhí)行,然后再由以下代碼指定 USB 總線驅(qū)動程序直接與 PDIUSBD12 接口芯片實現(xiàn)信息交互。 //釋放此 URB IoCompleteRequest( Irp, IO_NO_INCREMENT )。 } Irp = ntStatus。 } else //構(gòu)造 IRP 中的相關(guān)域 { Irp = 0。 USBD_SUCCESS( urb)) { Irp = ReadLen。 if( NT_SUCCESS( ntStatus ) amp。 //建立中斷或者塊傳輸?shù)?IRP ntStatus = Eval_CallUSBD( DeviceObject, urb )。 transferFlags |= USBD_TRANSFER_DIRECTION_IN。 { return STATUS_INSUFFICIENT_RESOURCES。 urb = ExAllocatePool( NonPagedPool, siz )。 siz = sizeof( struct _URB_BULK_OR_INTERRUPT_TRANSFER )。( pInterfaceInfoPipes[ PipeNum ] )。 // PDIUSBD12 的讀數(shù)據(jù)管道 15,此管道為輸入管道,采用塊傳輸方式。 pInterfaceInfo = deviceExtensionInterface。 ReadLen = irpStack。 deviceExtension = DeviceObjectDeviceExtension。 irpStack = IoGetCurrentIrpStackLocation( Irp )。 ULONG transferFlags = 0。 ULONG siz。 ULONG PipeNum。 PDEVICE_EXTENSION deviceExtension。 USBD_PIPE_INFORMATION* pPipeInfo。 } 讀取設(shè)備數(shù)據(jù) 當客戶應(yīng)用程序有讀取設(shè)備數(shù)據(jù)的要求 時,系統(tǒng)將此要求以 IRP_MJ_READ的 IRP 形式傳遞給功能驅(qū)動程序 , 并以下代碼執(zhí)行,然后再由以下代碼指定USB 總線驅(qū)動程序直接與單片機系統(tǒng)實現(xiàn)信息交互。 return ntStatus。 IoCompleteRequest( Irp, IO_NO_INCREMENT )。 Irp = STATUS_SUCCESS。 創(chuàng)建設(shè)備 創(chuàng)建設(shè)備函數(shù)帶兩個參數(shù)調(diào)用,一個參數(shù)是指向驅(qū)動程序?qū)ο蟮闹羔?,另一個參數(shù)是指向物理設(shè)備對象的指針。 USB 客戶使用 URB 做它們大多數(shù)的工作。 最重要的內(nèi)部 IOCTL 是 IOCTL_INTERNAL_USB_SUBMIT_URB,它發(fā)出 USB 請求塊( URB)由 USB 類驅(qū)動程序處理。 USBDI 的 IOCTL USB 類驅(qū)動程序主要通過 USB 驅(qū)動程序接口( USBDI)的內(nèi)部 IOCTL 使用。 USBDI 例程,包括 URB 結(jié)構(gòu)。 IOCTL 定義。 31 頭文件說明 開發(fā) USB 設(shè)備的驅(qū)動程序需要包含幾個頭文件,他們在 Windows 中的 DDK中,需要安裝 DDK。 事實上,系統(tǒng) USB 驅(qū)動程序( USBD)處理連接 USB 設(shè)備的大多繁雜的工作,甚至一些 HID USB 設(shè)備(如鍵盤、鼠標和游戲設(shè)備)是自動識別的,不許要額外的驅(qū)動程序。 是根集線器和外部集線器的 USB 驅(qū)動程序。 是 USB 類驅(qū)動程序,它使用 訪問通用主機控制器接口設(shè)備。一個設(shè)備通常只含有一個配置和一個接口,但是,也可以含有多個配置和接口。多個節(jié)點組合在一起構(gòu) 成一個接口。 圖 是設(shè)備和 USBDI 表現(xiàn)給客戶驅(qū)動程序的邏輯實體??刂乒艿朗请p向的,中斷管道是單向到主機的,塊管道和等時管道是單向的,沿任一個方向。 該程序通過一個或多個管道訪問一個功能設(shè)備。塊傳輸用于在兩個方向傳輸大量數(shù)據(jù)。單片機系統(tǒng)使用的是控制傳輸和塊傳輸。如果建立標志置位,它將向協(xié)議層發(fā)送一個器件請求進行處理。如果任何一個特定的按鍵被按下, 29 鍵處理命令將執(zhí)行子程序并返回主循環(huán)。這些過程是很重要 的,因為它確保了在 MCU 準備好服務(wù) D12 之前 D12 不會進行操作。 主循環(huán)流程圖 MCU 一旦上電就需要初始化其所有端口、存儲區(qū)、定時器和中斷服務(wù)程序。 (4) LED 燈控制 :目前有三種狀態(tài) :暗、亮和閃爍。 (3)狀態(tài)監(jiān)控 :開發(fā)板的狀態(tài)監(jiān)控采用控制傳輸,具備雙向狀態(tài)數(shù)據(jù)傳輸功能。 (2)數(shù)據(jù)傳輸 :開發(fā)板和主機可以進行雙向數(shù)據(jù)傳輸。 圖 固件結(jié)構(gòu)和數(shù)據(jù)流向 各模塊程序的分工如下 : PDIUSBD12 命令接口 :對 PDIUSBDI2 器件進行操作的模塊子程序集。 由于這種結(jié)構(gòu)主循環(huán)不關(guān)心數(shù)據(jù)是來自 USB,串口還是并口,它只檢查循 27 環(huán)緩沖區(qū)內(nèi)需要處理的新數(shù)據(jù),這個概念很重要,這樣主循環(huán)程序?qū)W⒂跀?shù)據(jù)的處理,而 ISR能夠以最大可能的速度進行數(shù)據(jù)的傳輸,相似的控制端點在數(shù)據(jù)包處理時采用了同樣的概念, ISR接收和保存數(shù)據(jù)緩沖區(qū)中的控制傳輸并設(shè)置相應(yīng)的標志寄存器,主循環(huán) 向協(xié)議處理程序發(fā)出請求,由于所有的標準器件級別和廠商請求都是在協(xié)議處理程序 中進行處理, ISR 得以保持它的效率,而且一旦增加新的請求只需要在協(xié)議層進行修改。 在 ISR 中固件將數(shù)據(jù)包從 PDIUSBD12 內(nèi)部緩沖區(qū)移到循環(huán)數(shù)據(jù)緩沖區(qū),并在隨后清零 PDIUSBD12 的內(nèi)部緩沖區(qū),以使能接收新的數(shù)據(jù)包, CPU 可以繼續(xù)它當前的前臺任務(wù), 直到完成。這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時簡化了編程和調(diào)試。PDIUSBD12 的固件設(shè)計成完全的中斷驅(qū)動。 隨著國內(nèi)單片機開發(fā)工具研制水平的提高,現(xiàn)在的單片仿真器普遍支持 C語言程序調(diào)試,為單片機編程使用 C 語言提供了便利的條件。在非常注重代碼效率的場 26 合,可以是以 C 語言為主,匯編語言為輔。對于
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1