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

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

模塊接口

  • 微機(jī)接口課件

    微機(jī)接口課件,微機(jī)接口電了教案:微機(jī)接口技術(shù)基礎(chǔ)知識(shí),可編程外圍接口82C55A,高性能可編程DMA控制接口82C37A-5,CHMOS可編程時(shí)間間隔定時(shí)器芯片82C54,可編程中斷控制器82C59A-2,多功能高集成外圍器件,微型機(jī)算計(jì)發(fā)展概述,鼠標(biāo)接口,顯示器技術(shù),打印機(jī)接口技術(shù)。

    標(biāo)簽: 微機(jī)接口

    上傳時(shí)間: 2013-11-15

    上傳用戶:zhangdebiao

  • 高性能可編程DMA控制接口82C37A-5

    高性能可編程DMA控制接口82C37A-54.1  概述對象實(shí)體:直接存儲(chǔ)器訪問(DMA)控制接口芯片82C37A-5芯片的特點(diǎn):1、管腳引線與NMOS  8237A-5兼容。2、允許/禁止單獨(dú)DMA請求控制。3、頻率從0~5MHz區(qū)間全靜態(tài)設(shè)計(jì)。4、低電平操作。 5、4個(gè)各自獨(dú)立的DMA通道并獨(dú)立的進(jìn)行初始化。6、存儲(chǔ)器到存儲(chǔ)器之間傳送。7、存儲(chǔ)器模塊初始化處理。8、地址的增量和減量。9、傳送速率可達(dá)1.6MB/s.10、可直接擴(kuò)展成任意數(shù)量的通道。11 、終止傳送的過程即輸入結(jié)束。12、軟件請求。13、獨(dú)立信號DREQ和信號DACK的極性控制。4.2 82C37A-5的體系結(jié)構(gòu)4.2.1   基本結(jié)構(gòu)描述1.   82C37A-5內(nèi)部配備了規(guī)模為344位的內(nèi)部存儲(chǔ)器,它是以寄存器的形式出現(xiàn)的。2.   配有3個(gè)基本的控制模塊: (1)定時(shí)及控制模塊; (2)優(yōu)先級編碼及循環(huán)優(yōu)先級控制模塊;(3)命令控制模塊; 3.   12個(gè)不同類型的寄存器 。圖 4-1  82C37A-5結(jié)構(gòu)圖EOP#                                                                                                                                                 A0~A3RESETCS#.                                                                                                                    IOW# DREQ0~DREQ3HLDAHRQ                                                                                                                                            DB0~DB7DACK0~DACK3

    標(biāo)簽: DMA 82 37 性能

    上傳時(shí)間: 2013-10-21

    上傳用戶:ming52900

  • 多路電壓采集系統(tǒng)

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

    標(biāo)簽: 多路 電壓采集

    上傳時(shí)間: 2013-11-06

    上傳用戶:sunchao524

  • 基于CPLD的單片機(jī)PCI接口設(shè)計(jì)

    詳細(xì)闡述一種利用CPLD 實(shí)現(xiàn)的8 位單片機(jī)與PCI 設(shè)備間的通信接口方案,給出用ABEL HDL編寫的主要源程序。該方案在實(shí)踐中檢驗(yàn)通過。

    標(biāo)簽: CPLD PCI 單片機(jī) 接口設(shè)計(jì)

    上傳時(shí)間: 2013-10-30

    上傳用戶:yeling1919

  • 單片機(jī)外圍線路設(shè)計(jì)

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

    標(biāo)簽: 單片機(jī) 線路設(shè)計(jì)

    上傳時(shí)間: 2013-10-21

    上傳用戶:jiahao131

  • 并行接口

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

    標(biāo)簽: 并行接口

    上傳時(shí)間: 2013-10-25

    上傳用戶:oooool

  • 微機(jī)總線與接口標(biāo)準(zhǔn)

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

    標(biāo)簽: 微機(jī) 總線 接口標(biāo)準(zhǔn)

    上傳時(shí)間: 2013-11-17

    上傳用戶:shen954166632

  • 輸入輸出與接口技術(shù)

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

    標(biāo)簽: 輸入輸出 接口技術(shù)

    上傳時(shí)間: 2013-11-05

    上傳用戶:jixingjie

  • 現(xiàn)代微機(jī)原理與接口技術(shù)

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

    標(biāo)簽: 現(xiàn)代微機(jī)原理 接口技術(shù)

    上傳時(shí)間: 2014-01-21

    上傳用戶:徐孺

  • 驅(qū)動(dòng)程序與應(yīng)用程序的接口

    有兩種方式可以讓設(shè)備和應(yīng)用程序之間聯(lián)系:1. 通過為設(shè)備創(chuàng)建的一個(gè)符號鏈;2. 通過輸出到一個(gè)接口WDM驅(qū)動(dòng)程序建議使用輸出到一個(gè)接口而不推薦使用創(chuàng)建符號鏈的方法。這個(gè)接口保證PDO的安全,也保證安全地創(chuàng)建一個(gè)惟一的、獨(dú)立于語言的訪問設(shè)備的方法。一個(gè)應(yīng)用程序使用Win32APIs來調(diào)用設(shè)備。在某個(gè)Win32 APIs和設(shè)備對象的分發(fā)函數(shù)之間存在一個(gè)映射關(guān)系。獲得對設(shè)備對象訪問的第一步就是打開一個(gè)設(shè)備對象的句柄。 用符號鏈打開一個(gè)設(shè)備的句柄為了打開一個(gè)設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個(gè)符號鏈出口,應(yīng)用程序可以用下面這個(gè)例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3",  GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開一個(gè)設(shè)備。這個(gè)設(shè)備必須有一個(gè)符號鏈,以便應(yīng)用程序能夠打開它。有關(guān)細(xì)節(jié)查看有關(guān)Kdevice和CreateLink的內(nèi)容。在上述調(diào)用中第一個(gè)參數(shù)中前綴后的部分就是這個(gè)符號鏈的名字。注意:CreatFile中的第一個(gè)參數(shù)不是Windows 98/2000中驅(qū)動(dòng)程序(.sys文件)的路徑。是到設(shè)備對象的符號鏈。如果使用DriverWizard產(chǎn)生驅(qū)動(dòng)程序,它通常使用類KunitizedName來構(gòu)成設(shè)備的符號鏈。這意味著符號鏈名有一個(gè)附加的數(shù)字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應(yīng)用程序需要被覆蓋的I/O,第六個(gè)參數(shù)(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個(gè)輸出接口打開句柄用這種方式打開一個(gè)句柄會(huì)稍微麻煩一些。DriverWorks庫提供兩個(gè)助手類來使獲得對該接口的訪問容易一些,這兩個(gè)類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個(gè)設(shè)備信息集,該信息集包含了特殊類中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類的一個(gè)實(shí)例來獲得一個(gè)或更多的CdeviceInterface類的實(shí)例。CdeviceInterface類是一個(gè)單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個(gè)路徑名的指針,該指針可以在CreateFile中使用來打開設(shè)備。下面用一個(gè)小例子來顯示這些類最基本的使用方法: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;} 在設(shè)備中執(zhí)行I/O操作一旦應(yīng)用程序獲得一個(gè)有效的設(shè)備句柄,它就能使用Win32 APIs來產(chǎn)生到設(shè)備對象的IRPs。下面的表顯示了這種對應(yīng)關(guān)系。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 需要解釋一下設(shè)備類成員的Close和CleanUp:CreateFile使內(nèi)核為設(shè)備創(chuàng)建一個(gè)新的文件對象。這使得多個(gè)句柄可以映射同一個(gè)文件對象。當(dāng)這個(gè)文件對象的最后一個(gè)用戶級句柄被撤銷后,I/O管理器調(diào)用CleanUp。當(dāng)沒有任何用戶級和核心級的對文件對象的訪問的時(shí)候,I/O管理器調(diào)用Close。如果被打開的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯(cuò)誤(無效功能)。以前為Windows95編寫的VxD的應(yīng)用程序代碼中可能會(huì)在打開設(shè)備的時(shí)候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個(gè)屬性,因?yàn)樗鼘?dǎo)致沒有特權(quán)的用戶企圖打開這個(gè)設(shè)備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數(shù)轉(zhuǎn)換成IRP域的方法依賴于設(shè)備對象的屬性。當(dāng)設(shè)備設(shè)置DO_DIRECT_IO標(biāo)志,I/O管理器將buff鎖住在存儲(chǔ)器中,并且創(chuàng)建了一個(gè)存儲(chǔ)在IRP中的MDL域。一個(gè)設(shè)備可以通過調(diào)用Kirp::Mdl來存取MDL。當(dāng)設(shè)備設(shè)置DO_BUFFERED_IO標(biāo)志,設(shè)備對象分別通過KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或?qū)懖僮鳙@得buff地址。當(dāng)設(shè)備不設(shè)置DO_BUFFERED_IO標(biāo)志也不設(shè)置DO_DIRECT_IO,內(nèi)核設(shè)置IRP 的UserBuffer域來對應(yīng)ReadFile或WriteFile中的buff參數(shù)。然而,存儲(chǔ)區(qū)并沒有被鎖住而且地址只對調(diào)用進(jìn)程有效。驅(qū)動(dòng)程序可以使用KIrp::UserBuffer來存取IRP域。對于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴于特殊的I/O控制代碼,它不在設(shè)備對象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構(gòu)造控制代碼。這個(gè)宏的其中一個(gè)參數(shù)指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對應(yīng)的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數(shù):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,系統(tǒng)分配一個(gè)單一的緩沖來作為輸入與輸出。驅(qū)動(dòng)程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動(dòng)程序通過調(diào)用KIrp::IoctlBuffer獲得緩沖地址。在完成時(shí),I/O管理器從系統(tǒng)緩沖拷貝數(shù)據(jù)到提供給Ring 3級調(diào)用者使用的緩沖中。驅(qū)動(dòng)程序必須在結(jié)束前存儲(chǔ)拷貝到IRP的Information成員中的數(shù)據(jù)個(gè)數(shù)。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數(shù)呈現(xiàn)不同的含義。參數(shù)InputBuffer被拷貝到一個(gè)系統(tǒng)緩沖,這個(gè)緩沖驅(qū)動(dòng)程序可以通過調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對象,驅(qū)動(dòng)程序?qū)@個(gè)對象的訪問通過調(diào)用KIrp::Mdl來實(shí)現(xiàn)。對于METHOD_OUT_DIRECT,調(diào)用者必須有對緩沖的寫訪問權(quán)限。注意,對METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會(huì)做映射來配置緩沖。虛擬地址只對調(diào)用進(jìn)程有效。這里是一個(gè)用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個(gè)IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現(xiàn)在使用一個(gè)DeviceIoControl調(diào)用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING,  NULL, // no input  注意,這里放的是包含有執(zhí)行操作命令的字符串指針  0, FirmwareRev,      //這里是output串指針,存放從驅(qū)動(dòng)程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize,  NULL // not overlapped I/O );如果輸出緩沖足夠大,設(shè)備拷貝串到里面并將拷貝的資結(jié)束設(shè)置到FirmwareRevSize中。在驅(qū)動(dòng)程序中,代碼看起來如下所示: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 . . .   } }

    標(biāo)簽: 驅(qū)動(dòng)程序 應(yīng)用程序 接口

    上傳時(shí)間: 2013-10-17

    上傳用戶:gai928943

主站蜘蛛池模板: 香河县| 孝义市| 乌什县| 壶关县| 隆子县| 定南县| 柞水县| 疏附县| 和硕县| 阿鲁科尔沁旗| 句容市| 屏东市| 徐州市| 自治县| 隆子县| 双流县| 车致| 苍南县| 左权县| 昌宁县| 海丰县| 云阳县| 林芝县| 乌拉特前旗| 增城市| 新巴尔虎右旗| 大新县| 平湖市| 咸宁市| 米泉市| 定南县| 砀山县| 靖州| 苏尼特左旗| 新丰县| 五台县| 贵港市| 余干县| 房山区| 中牟县| 调兵山市|