亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

MBUS主站接口模塊

  • 微機燈光控制系統

    一、實驗目的1.掌握定時/計數器、輸入/輸出接口電路設計方法。    2.掌握中斷控制編程技術的方法和應用。3.掌握8086匯編語言程序設計方法。 二、實驗內容與要求 微機燈光控制系統主要用于娛樂場所的彩燈控制。系統的彩燈共有12組,在實驗時用12個發光二極管模擬。1. 基本要求:燈光控制共有8種模式,如12個燈依次點亮;12個燈同時閃爍等八種。系統可以通過鍵盤和顯示屏的人機對話,將8種模式進行任意個數、任意次序的連接組合。系統不斷重復執行輸入的模式組合,直至鍵盤有任意一個鍵按下,退出燈光控制系統,返回DOS系統。2. 提高要求:音樂彩燈控制系統,根據音樂的變化控制彩燈的變化,主要有以下幾種:第一種為音樂節奏控制彩燈,按音樂的節拍變換彩燈花樣。第二種音律的強弱(信號幅度大小)控制彩燈。強音時,燈的亮度加大,且被點亮的數目增多。第三種按音調高低(信號頻率高低)控制彩燈。低音時,某一部分燈點亮;高音時,另一部分點亮。 三、實驗報告要求 1.設計目的和內容 2.總體設計 3.硬件設計:原理圖(接線圖)及簡要說明 4.軟件設計框圖及程序清單5.設計結果和體會(包括遇到的問題及解決的方法) 四、設計原理我們以背景霓虹燈的一種顯示效果為例,介紹控制霓虹燈顯示的基本原理。設有一排 n 段水平排列的霓虹燈,某種顯示方式為從左到右每0.2 秒逐個點亮。其控制過程如下: 若以“ 1 ”代表霓虹燈點亮,以“ 0 ”代表霓虹燈熄滅,則開始時刻, n 段霓虹燈的控制信號均為“ 0 ”,隨后,控制器將一幀 n 個數據送至 n 段霓虹燈的控制端,其中,最左邊的一段霓虹燈對應的控制數據為“ 1 ”,其余的數據均為零,即 1000 … 000 。當 n 個數據送完以后,控制器停止送數,保留這種狀態(定時) 0.2 秒,此時,第 1 段霓虹燈被點亮,其余霓虹燈熄滅。隨后,控制器又在極短的時間內將數據 1100 … 000 送至霓虹燈的控制端,并定時 0.2 秒,這段時間,前兩段霓虹燈被點亮。由于送數據的過程很快,我們觀測到的效果是第一段霓虹燈被點亮 0.2 秒后,第 2 段霓虹燈接著被點亮,即每隔 0.2 秒顯示一幀圖樣。如此下去,最后控制器將數據 1111 … 111 送至 n 段霓虹燈的控制端,則 n 段霓虹燈被全部點亮。 只要改變送至每段霓虹燈的數據,即可改變霓虹燈的顯示方式,顯然,我們可以通過合理地組合數據(編程)來得到霓虹燈的不同顯示方式。 五、總體方案論證分析系統設計思路如下:1) 采集8位開關輸入信號,若輸入數據為0時,將其修改為1。確定輸入的硬件接口電路。采樣輸入開關量,并存入NUM的軟件程序段。2) 以12個燈依次點亮為例(即燈光控制模式M1),考慮與其相應的燈光顯示代碼數據。確定顯示代碼數據輸出的接口電路。輸出一個同期顯示代碼的軟件程序段(暫不考慮時隙的延時要求)。3) 應用定時中斷服務和NUM數據,實現t=N×50ms的方法。4) 實現某一種模式燈光顯示控制中12個時隙一個周期,共重復四次的控制方法。要求在初始化時采樣開關輸入數據NUM,并以此控制每一時隙的延時時間;在每一時隙結束時,檢查有無鍵按下,若是退出鍵按下,則結束燈光控制,返回DOS系統,若是其他鍵就返回主菜單,重新輸入控制模式數據。5) 通過人機對話,輸入8種燈光顯示控制模式的任意個數、任意次序連接組合的控制模式數據串(以ENTER鍵結尾)。對輸入的數據進行檢查,若數據都在1 - 8之間,則存入INBUF;若有錯誤,則通過屏幕顯示輸入錯誤,準備重新輸入燈光顯示控制模式數據。6) 依次讀取INBUF中的控制模式數據進行不同模式的燈光顯示控制,在沒有任意鍵按下的情況下,系統從第一個控制模式數據開始,順序工作到最后一個控制模式數據后,又返回到第一個控制模式數據,不斷重復循環進行燈光顯示控制。7) 本系統的軟件在總體上有兩部份,即主程序(MAIN)和實時中斷服務程序(INTT)。討論以功能明確、相互界面分割清晰的軟件程序模塊化設計方法。即確定有關功能模塊,并畫出以功能模塊表示的主程序(MAIN)流程框圖和定時中斷服務程序的流程框圖。    六、硬件電路設計   以微機實驗平臺和PC機資源為硬件設計的基礎,不需要外加電路。主要利用了以下的資源:1.8255并行口電路8255并行口電路主要負責數據的輸入與輸出,可以輸出數據控制發光二極管的亮滅和讀取乒乓開關的數據。實驗時可以將8255的A口、B口和一組發光二極管相連,C口和乒乓開關相連。2.8253定時/計數器8253定時/計數器和8259中斷控制器一起實現時隙定時。本設計的定時就是采用的t=N×50ms的方法,50ms由8253定時/計數器的計數器0控制定時,N是在中斷服務程序中軟件計時。8253的OUT0接到IRQ2,產生中斷請求信號。8253定時/計數器定時結束會發出中斷信號,進入中斷服務程序。3.PC機資源本設計除了利用PC機作為控制器之外,還利用了PC機的鍵盤和顯示器。鍵盤主要是輸入控制模式數據,顯示器就是顯示提示信息。   七、軟件設計   軟件主要分為主程序(MAIN)和中斷服務程序(INTT),主程序包含系統初始化、讀取乒乓開關、讀取控制模式數據以及按鍵處理等模塊。中斷服務程序主要是定時時間到后根據控制模式數據點亮相應的發光二極管。1.主程序主程序的程序流程圖如圖1所示。

    標簽: 微機 燈光控制

    上傳時間: 2014-04-05

    上傳用戶:q986086481

  • 多路電壓采集系統

    多路電壓采集系統一、實驗目的1.熟悉可編程芯片ADC0809,8253的工作過程,掌握它們的編程方法。2.加深對所學知識的理解并學會應用所學的知識,達到在應用中掌握知識的目的。 二、實驗內容與要求1.基本要求通過一個A/D轉換器循環采樣4路模擬電壓,每隔一定時間去采樣一次,一次按順序采樣4路信號。A/D轉換器芯片AD0809將采樣到的模擬信號轉換為數字信號,轉換完成后,CPU讀取數據轉換結果,并將結果送入外設即CRT/LED顯示,顯示包括電壓路數和數據值。2. 提高要求 (1) 可以實現循環采集和選擇采集2種方式。(2)在CRT上繪制電壓變化曲線。 三、實驗報告要求 1.設計目的和內容 2.總體設計 3.硬件設計:原理圖(接線圖)及簡要說明 4.軟件設計框圖及程序清單5.設計結果和體會(包括遇到的問題及解決的方法) 四、總體設計設計思路如下:1) 4路模擬電壓信號通過4個電位器提供0-5V的電壓信號。2) 選擇ADC0809芯片作為A/D轉換器,4路輸入信號分別接到ADC0809的IN0—IN4通道,每隔一定的時間采樣一次,采完一路采集下一路,4路電壓循環采集。3) 利用3個LED數碼管顯示數據,1個數碼管用來顯示輸入電壓路數,3個數碼管用來顯示電壓采樣值。4) 延時由8253定時/計數器來實現。 五、硬件電路設計根據設計思路,硬件主要利用了微機實驗平臺上的ADC0809模數轉換器、8253定時/計數器以及LED顯示輸出等模塊。電路原理圖如下:1.基本接口實驗板部分1) 電位計模塊,4個電位計輸出4路1-5V的電壓信號。2) ADC0809模數轉換器,將4路電壓信號接到IN0-IN3,ADD_A、ADD_B、ADD_C分別接A0、A1、A2,CS_AD接CS0時,4個采樣通道對應的地址分別為280H—283H。3) 延時模塊,8253和8255組成延時電路。8255的PA0接到8253的OUT0,程序中查詢計數是否結束。硬件電路圖如圖1所示。 圖1 基本實驗板上的電路圖實驗板上的LED顯示部分實驗板上主要用到了LED數碼管顯示電路,插孔CS1用于數碼管段碼的輸出選通,插孔CS2用于數碼管位選信號的輸出選通。電路圖如圖2所示。

    標簽: 多路 電壓采集

    上傳時間: 2013-11-06

    上傳用戶:sunchao524

  • 基于CPLD的單片機PCI接口設計

    詳細闡述一種利用CPLD 實現的8 位單片機與PCI 設備間的通信接口方案,給出用ABEL HDL編寫的主要源程序。該方案在實踐中檢驗通過。

    標簽: CPLD PCI 單片機 接口設計

    上傳時間: 2013-10-30

    上傳用戶:yeling1919

  • 單片機外圍線路設計

    當拿到一張CASE單時,首先得確定的是能用什么母體才能實現此功能,然后才能展開對外圍硬件電路的設計,因此首先得了解每個母體的基本功能及特點,下面大至的介紹一下本公司常用的IC:單芯片解決方案• SN8P1900 系列–  高精度 16-Bit  模數轉換器–  可編程運算放大器 (PGIA)•  信號放大低漂移: 2V•  放大倍數可編程: 1/16/64/128  倍–  升壓- 穩壓調節器 (Charge-Pump Regulator)•  電源輸入: 2.4V ~ 5V•  穩壓輸出: e.g. 3.8V at SN8P1909–  內置液晶驅動電路 (LCD Driver)–  單芯片解決方案 •  耳溫槍  SN8P1909 LQFP 80 Pins• 5000 解析度量測器 SN8P1908 LQFP 64 Pins•  體重計  SN8P1907 SSOP 48 Pins單芯片解決方案• SN8P1820 系列–  精確的12-Bit  模數轉換器–  可編程運算放大器 (PGIA)• Gain Stage One: Low Offset 5V, Gain: 16/32/64/128• Gain Stage One: Low Offset 2mV, Gain: 1.3 ~ 2.5–  升壓- 穩壓調節器•  電源輸入: 2.4V ~ 5V•  穩壓輸出: e.g. 3.8V at SN8P1829–  內置可編程運算放大電路–  內置液晶驅動電路 –  單芯片解決方案 •  電子醫療器 SN8P1829 LQFP 80 Pins 高速/低功耗/高可靠性微控制器• 最新SN8P2000 系列– SN8P2500/2600/2700 系列– 高度抗交流雜訊能力• 標準瞬間電壓脈沖群測試 (EFT): IEC 1000-4-4• 雜訊直接灌入芯片電源輸入端• 只需添加1顆 2.2F/50V 旁路電容• 測試指標穩超 4000V (歐規)– 高可靠性復位電路保證系統正常運行• 支持外部復位和內部上電復位• 內置1.8V 低電壓偵測可靠復位電路• 內置看門狗計時器保證程序跳飛可靠復位– 高抗靜電/栓鎖效應能力– 芯片工作溫度有所提高: -200C ~ 700C     工規芯片溫度: -400C ~ 850C 高速/低功耗/高可靠性微控制器• 最新 SN8P2000 系列– SN8P2500/2600/2700 系列– 1T  精簡指令級結構• 1T:  一個外部振蕩周期執行一條指令•  工作速度可達16 MIPS / 16 MHz Crystal–  工作消耗電流 < 2mA at 1-MIPS/5V–  睡眠模式下消耗電流 < 1A / 5V額外功能• 高速脈寬調制輸出 (PWM)– 8-Bit PWM up to 23 KHz at 12 MHz System Clock– 6-Bit PWM up to 93 KHz  at 12 MHz System Clock– 4-Bit PWM up to 375 KHz  at 12 MHz System Clock• 內置高速16 MHz RC振蕩器 (SN8P2501A)• 電壓變化喚醒功能• 可編程控制沿觸發/中斷功能– 上升沿 / 下降沿 / 雙沿觸發• 串行編程接口

    標簽: 單片機 線路設計

    上傳時間: 2013-10-21

    上傳用戶:jiahao131

  • 并行接口

    7.1 并行接口概述并行接口和串行接口的結構示意圖并行接口傳輸速率高,一般不要求固定格式,但不適合長距離數據傳輸7.2 可編程并行接口芯片82C55     7.2.1  8255的基本功能 8255具有2個獨立的8位I/O口(A口和B口)和2個獨立的4位I/O(C口上半部和C口下半部),提供TTL兼容的并行接口。作為輸入時提供三態緩沖器功能,作為輸出時提供數據鎖存功能。其中,A口具有雙向傳輸功能。8255有3種工作方式,方式0、方式1和方式2,能使用無條件、查詢和中斷等多種數據傳送方式完成CPU與I/O設備之間的數據交換。B口和C口的引腳具有達林頓復合晶體管驅動能力,在1.5V時輸出1mA電流,適于作輸出端口。C口除用做數據口外,當8255工作在方式1和方式2時,C口的部分引腳作為固定的聯絡信號線。

    標簽: 并行接口

    上傳時間: 2013-10-25

    上傳用戶:oooool

  • 微機總線與接口標準

    3.1 總線與接口概述 3.1.1 總線和接口及其標準的概念  總線:是在模塊和模塊之間或設備與設備之間的一組進行互連和傳輸信息的信號線,信息包括指令、數據和地址。   總線標準     指芯片之間、擴展卡之間以及系統之間,通過總線進行連接和傳輸信息時,應該遵守的一些協議與規范。  接口標準    外設接口的規范,涉及接口信號線定義、信號傳輸速率、傳輸方向和拓撲結構,以及電氣特性和機械特性等多個方面。 3.1.2 總線的分類 1) 按總線功能或信號類型劃分為: 數據總線:雙向三態邏輯,線寬表示了總線數據傳輸的能力。地址總線:單向三態邏輯,線寬決定了系統的尋址能力。控制總線:就某根來說是單向或雙向。控制總線最能體現總線特點,決定總線功能的強弱和適應性。2) 按總線的層次結構分為: CPU總線:微機系統中速度最快的總線,主要在CPU內部,連接CPU內部部件,在CPU周圍的小范圍內也分布該總線,提供系統原始的控制和命令。局部總線:在系統總線和CPU總線之間的一級總線,提供CPU和主板器件之間以及CPU到高速外設之間的快速信息通道。系統總線:也稱為I/O總線,是傳統的通過總線擴展卡連接外部設備的總線。由于速度慢,其功能已經被局部總線替代。通信總線:也稱為外部總線,是微機與微機,微機與外設之間進行通信的總線。3.1.3 總線的主要性能參數1.總線頻率:MHz表示的工作頻率,是總線速率的一個重要參數。2.總線寬度:指數據總線的位數。3.總線的數據傳輸率   總線的數據傳輸率=(總線寬度/8位)×總線頻率 例:PCI總線的總線頻率為33.3MHz,總線寬度為64位的情況下,總線數據傳輸率為266MB/s 。

    標簽: 微機 總線 接口標準

    上傳時間: 2013-11-17

    上傳用戶:shen954166632

  • 輸入輸出與接口技術

    2.1.1 I/O接口基本概念1.為什么要引入接口微機和I/O設備的信息類型和格式可能不一樣。微機和I/O設備信號傳輸處理的速度可能不匹配。不用接口, I/O直接接CPU,隨著外設增加,會大大降低CPU的效率。I/O直接接CPU,會使外設硬件結構過于依賴CPU,對外設本身發展不利。2.接口的概念  定義:接口是CPU與“外部世界”的連接電路,負責“中轉”各種信息。 分類:存儲器接口和I/O接口。 位置:介于系統總線與外部設備之間。3.I/O接口與I/O設備不同I/O設備對應I/O接口不同。I/O接口受CPU控制,I/O設備受I/O接口控制。為增加通用性,I/O接口電路一般均具有可編程功能。微機的應用離不開外部設備接口的設計、選用和連接。2.1.2、I/O接口功能  數據緩沖功能:通過寄存器或鎖存器實現。    存放數據的寄存器或鎖存器稱之為數據口。  接受和執行CPU命令功能:    存放CPU命令代碼的寄存器稱之為命令口,    存放執行狀態信息的寄存器稱之為狀態口。  設備選擇功能:CPU通過地址譯碼選擇不同外設。    即CPU通過地址譯碼選擇不同I/O接口和I/O接口中連接的不同的設備。  信號轉換功能:協調總線信號與I/O設備信號。    轉換包括信號的邏輯關系、時序配合和電平轉換。  可編程功能:增加接口的靈活性和智能性。

    標簽: 輸入輸出 接口技術

    上傳時間: 2013-11-05

    上傳用戶:jixingjie

  • 現代微機原理與接口技術

    掌握先進微處理器芯片結構、微型計算機實現技術、計算機主板構成、各種接口技術原理及其應用編程方法;掌握匯編語言程序的編寫方法,尤其掌握接口訪問的方法。了解微機技術新的發展趨勢,系統科學地獲得分析問題和解決問題的訓練;提高分析和設計接口的能力。不僅要學習微機各種接口電路的原理與作用,熟悉PC系列機接口電路,而且還要掌握常用接口的設計與分析方法,學會使用匯編語言和C語言對接口進行編程,并具有一定的動手實驗能力和接口應用程序的編寫能力,為微機的深入應用和嵌入式系統SOC設計等的學習與實踐打下良好基礎。同時有興趣的同學自學Windows 2000/XP驅動程序的編寫方法。一定要下載和打印或復印電子講義,課堂上注意聽講并及時記錄教師課堂上補充的內容,認真獨立完成作業,做好課程實驗和自修實驗、做好課前預習和課后復習。1)抓住IBM PC/XT機基本結構這條主線,分析其基本結構,掌握各接口電路及可編程接口芯片的應用。2)進一步擴展和延伸CPU—從8086~Core 2 Duo,從實模式~保護模式;匯編語言-CPU及接口直接控制,16位~32位匯編;總線—PCI,USB等; 中斷—從實模式下的中斷向量~保護模式下的中斷描述符;從傳統中斷~PCI中斷~串行中斷 芯片組—從中大規模集成電路(8237、8254、8255、8259等)~ 超大規模集成電路(82815EP、82801BA)。第1章—CPU與整機:CPU的信號與工作模式、PC結構第11章--軟件如何控制CPU和接口:指令系統和匯編編程(在教師講授重點的基礎上,通過預習、實驗與練習自學)  第2章--CPU如何與MEM或I/O設備通信:I/O接口與譯碼  第3章--總線如何工作:總線標準(PCI、USB)  第4章--I/O接口直接和MEM通信:DMA(8237,全自學)  第5章--I/O接口如何主動與CPU通信:中斷技術(8259)  第6章--I/O接口的定時與計數功能:(8254)  第7章--I/O接口的并行通信:8255與打印機接口標準  第8章--I/O接口的串行通信:串行通信協議與8250  第10章--I/O軟接口技術:保護模式存儲,WDM驅動程序編寫(全自學)

    標簽: 現代微機原理 接口技術

    上傳時間: 2014-01-21

    上傳用戶:徐孺

  • 驅動程序與應用程序的接口

    有兩種方式可以讓設備和應用程序之間聯系:1. 通過為設備創建的一個符號鏈;2. 通過輸出到一個接口WDM驅動程序建議使用輸出到一個接口而不推薦使用創建符號鏈的方法。這個接口保證PDO的安全,也保證安全地創建一個惟一的、獨立于語言的訪問設備的方法。一個應用程序使用Win32APIs來調用設備。在某個Win32 APIs和設備對象的分發函數之間存在一個映射關系。獲得對設備對象訪問的第一步就是打開一個設備對象的句柄。 用符號鏈打開一個設備的句柄為了打開一個設備,應用程序需要使用CreateFile。如果該設備有一個符號鏈出口,應用程序可以用下面這個例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3",  GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統本調用希望打開一個設備。這個設備必須有一個符號鏈,以便應用程序能夠打開它。有關細節查看有關Kdevice和CreateLink的內容。在上述調用中第一個參數中前綴后的部分就是這個符號鏈的名字。注意:CreatFile中的第一個參數不是Windows 98/2000中驅動程序(.sys文件)的路徑。是到設備對象的符號鏈。如果使用DriverWizard產生驅動程序,它通常使用類KunitizedName來構成設備的符號鏈。這意味著符號鏈名有一個附加的數字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應用程序需要被覆蓋的I/O,第六個參數(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個輸出接口打開句柄用這種方式打開一個句柄會稍微麻煩一些。DriverWorks庫提供兩個助手類來使獲得對該接口的訪問容易一些,這兩個類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個設備信息集,該信息集包含了特殊類中的所有設備接口信息。應用程序能有用CdeviceInterfaceClass類的一個實例來獲得一個或更多的CdeviceInterface類的實例。CdeviceInterface類是一個單一設備接口的抽象。它的成員函數DevicePath()返回一個路徑名的指針,該指針可以在CreateFile中使用來打開設備。下面用一個小例子來顯示這些類最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface(  GUID* pClassGuid,  DWORD instance,  PDWORD pError){  CDeviceInterfaceClass DevClass(pClassGuid, pError);  if (*pError != ERROR_SUCCESS)    return INVALID_HANDLE_VALUE;  CDeviceInterface DevInterface(&DevClass, instance, pError);  if (*pError != ERROR_SUCCESS)    return INVALID_HANDLE_VALUE;  cout << "The device path is "    << DevInterface.DevicePath()    << endl;   HANDLE hDev;  hDev = CreateFile(   DevInterface.DevicePath(),    GENERIC_READ | GENERIC_WRITE,    FILE_SHARE_READ | FILE_SHARE_WRITE,    NULL,    OPEN_EXISTING,    FILE_ATTRIBUTE_NORMAL,    NULL  );  if (hDev == INVALID_HANDLE_VALUE)    *pError = GetLastError();  return hDev;} 在設備中執行I/O操作一旦應用程序獲得一個有效的設備句柄,它就能使用Win32 APIs來產生到設備對象的IRPs。下面的表顯示了這種對應關系。Win32 API  DRIVER_FUNCTION_xxxIRP_MJ_xxx  KDevice subclass member function CreateFile  CREATE  Create ReadFile  READ  Read WriteFile  WRITE  Write DeviceIoControl  DEVICE_CONTROL  DeviceControl CloseHandle  CLOSECLEANUP  CloseCleanUp 需要解釋一下設備類成員的Close和CleanUp:CreateFile使內核為設備創建一個新的文件對象。這使得多個句柄可以映射同一個文件對象。當這個文件對象的最后一個用戶級句柄被撤銷后,I/O管理器調用CleanUp。當沒有任何用戶級和核心級的對文件對象的訪問的時候,I/O管理器調用Close。如果被打開的設備不支持指定的功能,則調用相應的Win32將引起錯誤(無效功能)。以前為Windows95編寫的VxD的應用程序代碼中可能會在打開設備的時候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個屬性,因為它將導致沒有特權的用戶企圖打開這個設備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數轉換成IRP域的方法依賴于設備對象的屬性。當設備設置DO_DIRECT_IO標志,I/O管理器將buff鎖住在存儲器中,并且創建了一個存儲在IRP中的MDL域。一個設備可以通過調用Kirp::Mdl來存取MDL。當設備設置DO_BUFFERED_IO標志,設備對象分別通過KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或寫操作獲得buff地址。當設備不設置DO_BUFFERED_IO標志也不設置DO_DIRECT_IO,內核設置IRP 的UserBuffer域來對應ReadFile或WriteFile中的buff參數。然而,存儲區并沒有被鎖住而且地址只對調用進程有效。驅動程序可以使用KIrp::UserBuffer來存取IRP域。對于DeviceIoControl調用,buffer參數的轉換依賴于特殊的I/O控制代碼,它不在設備對象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構造控制代碼。這個宏的其中一個參數指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對應的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數:Method  Input Buffer Parameter  Output Buffer Parameter METHOD_BUFFERED  KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT  KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT  KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER  KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代碼指明METHOD_BUFFERED,系統分配一個單一的緩沖來作為輸入與輸出。驅動程序必須在向輸出緩沖放數據之前拷貝輸入數據。驅動程序通過調用KIrp::IoctlBuffer獲得緩沖地址。在完成時,I/O管理器從系統緩沖拷貝數據到提供給Ring 3級調用者使用的緩沖中。驅動程序必須在結束前存儲拷貝到IRP的Information成員中的數據個數。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數呈現不同的含義。參數InputBuffer被拷貝到一個系統緩沖,這個緩沖驅動程序可以通過調用KIrp::IoctlBuffer。參數OutputBuffer被映射到KMemory對象,驅動程序對這個對象的訪問通過調用KIrp::Mdl來實現。對于METHOD_OUT_DIRECT,調用者必須有對緩沖的寫訪問權限。注意,對METHOD_NEITHER,內核只提供虛擬地址;它不會做映射來配置緩沖。虛擬地址只對調用進程有效。這里是一個用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現在使用一個DeviceIoControl調用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING,  NULL, // no input  注意,這里放的是包含有執行操作命令的字符串指針  0, FirmwareRev,      //這里是output串指針,存放從驅動程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize,  NULL // not overlapped I/O );如果輸出緩沖足夠大,設備拷貝串到里面并將拷貝的資結束設置到FirmwareRevSize中。在驅動程序中,代碼看起來如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){  ULONG fwLength=0;  switch ( I.IoctlCode() )  {    case IOCTL_MYDEV_GET_FIRMWARE_REV:      fwLength = strlen(FIRMWARE_REV)+1;      if (I.IoctlOutputBufferSize() >= fwLength)      {        strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV);        I.Information() = fwLength;         return I.Complete(STATUS_SUCCESS);      }      else      {              }    case . . .   } }

    標簽: 驅動程序 應用程序 接口

    上傳時間: 2013-10-17

    上傳用戶:gai928943

  • MSP430仿真器(機)接口電路圖-原理圖

    MSP430仿真器(機)接口電路圖-原理圖

    標簽: MSP 430 仿真器 接口電路圖

    上傳時間: 2013-11-05

    上傳用戶:cjf0304

主站蜘蛛池模板: 昭苏县| 广河县| 广西| 阿拉善左旗| 建水县| 即墨市| 四子王旗| 宜城市| 巫溪县| 彰武县| 嘉定区| 武宁县| 阳西县| 五华县| 依安县| 那曲县| 桑日县| 普兰店市| 南宫市| 开鲁县| 河池市| 苗栗市| 长丰县| 马关县| 乡宁县| 灌云县| 新田县| 个旧市| 怀集县| 宣威市| 吴旗县| 乡城县| 永城市| 扬中市| 宁武县| 内江市| 杭锦后旗| 荥阳市| 屯门区| 陆河县| 平果县|