MPLAB C18使用指南 簡(jiǎn)介本文檔論述MPLAB® C18 編譯器的技術(shù)細(xì)節(jié),并講解MPLAB C18 編譯器的所有功能。 這里假定讀者已經(jīng)具備如下基本素質(zhì):• 知道如何編寫(xiě)C 程序• 知道如何使用MPLAB 集成開(kāi)發(fā)環(huán)境創(chuàng)建和調(diào)試項(xiàng)目• 已經(jīng)閱讀并理解了所使用單片機(jī)的數(shù)據(jù)手冊(cè) 文檔內(nèi)容編排如下:• 第1 章:簡(jiǎn)介 — 提供對(duì)MPLAB C18 編譯器的概述以及有關(guān)調(diào)用編譯器的信息。• 第2 章:語(yǔ)法說(shuō)明 — 論述MPLAB C18 編譯器與ANSI 標(biāo)準(zhǔn)的不同之處。• 第3 章:運(yùn)行時(shí)模型 — 論述MPLAB C18 編譯器如何利用 PIC18 PICmicro® 單片機(jī)的資源。• 第4 章:優(yōu)化 — 論述MPLAB C18 編譯器執(zhí)行的優(yōu)化功能。• 第5 章:示例應(yīng)用程序 — 給出一個(gè)示例應(yīng)用程序,并就本用戶指南中論述的各主題,對(duì)源代碼進(jìn)行了說(shuō)明。• 附錄A:COFF 文件格式 — 詳細(xì)闡述了Microchip 的COFF 格式。• 附錄B:采用ANSI 定義的方式 — 論述按照ANSI 標(biāo)準(zhǔn)的要求,MPLAB C18 實(shí)現(xiàn)所定義的執(zhí)行方式。• 附錄C:命令行概述 — 列出了命令行選項(xiàng)以及論述每個(gè)命令行選項(xiàng)的參考章節(jié)。• 附錄D:MPLAB C18 診斷 — 列出了錯(cuò)誤、警告和消息。• 附錄E:擴(kuò)展模式 — 論述非擴(kuò)展模式和擴(kuò)展模式之間的區(qū)別。
上傳時(shí)間: 2013-10-30
上傳用戶:1583060504
I/O 型單片機(jī)使用手冊(cè) 目錄 間接尋址寄存器 – IAR, IAR0, IAR1 .............................................35間接尋址指針 – MP, MP0, MP1 ......................................................35存儲(chǔ)區(qū)指針 – BP .........................................................................36累加器 – ACC...................................................................................37程序計(jì)數(shù)器低字節(jié)寄存器 – PCL....................................................37表格寄存器 – TBLP,TBHP,TBLH....................................................37看門(mén)狗定時(shí)寄存器 – WDTS............................................................38狀態(tài)寄存器 – STATUS.....................................................................38中斷控制寄存器 – INTC,INTC0,INTC1 .........................................39定時(shí)/計(jì)數(shù)寄存器...............................................................................39輸入/輸出端口和控制寄存器...........................................................40UART 寄存器 .USR,UCR1,UCR2,TXR/RXR,BRG.......................40輸入/輸出端口..........................................................................................41上拉電阻............................................................................................41PA 口的喚醒......................................................................................41輸入/輸出端口控制寄存器...............................................................41引腳共享功能....................................................................................42編程注意事項(xiàng)....................................................................................45定時(shí)/計(jì)數(shù)器..............................................................................................46配置定時(shí)/計(jì)數(shù)器輸入時(shí)鐘源...........................................................47定時(shí)/計(jì)數(shù)寄存器 – TMR, TMR0,TMR0L/TMR0H,TMR1L/TMR1H,TMR2.....................................................................49定時(shí)/計(jì)數(shù)控制寄存器 – TMRC,TMR0C,TMR1C,TMR2C............50定時(shí)器模式........................................................................................53事件計(jì)數(shù)器模式................................................................................53脈沖寬度測(cè)量模式............................................................................54可編程分頻器(PFD)和蜂鳴器的應(yīng)用..............................................55預(yù)分頻器(Prescaler)...........................................................................56輸入/輸出接口...................................................................................56編程注意事項(xiàng)....................................................................................57定時(shí)/計(jì)數(shù)器應(yīng)用范例.......................................................................57中斷............................................................................................................59中斷寄存器........................................................................................59中斷優(yōu)先權(quán)........................................................................................62外部中斷............................................................................................63定時(shí)/計(jì)數(shù)器中斷...............................................................................64UART 中斷........................................................................................64編程注意事項(xiàng)....................................................................................65復(fù)位和初始化............................................................................................66復(fù)位....................................................................................................66目錄iii異步串行口——UART............................................................................74UART 特性..........................................................................................74UART 外部引腳..................................................................................74數(shù)據(jù)發(fā)送.............................................................................................75UART 狀態(tài)控制寄存器......................................................................75波特率發(fā)生器.....................................................................................79UART 設(shè)置與控制..............................................................................81UART 發(fā)送器......................................................................................83UART 接收器......................................................................................84接收錯(cuò)誤處理.....................................................................................85接收中斷圖解.....................................................................................86地址檢測(cè)模式.....................................................................................86暫停模式下的UART 功能.................................................................87UART 應(yīng)用范例.................................................................................87振蕩器........................................................................................................89系統(tǒng)時(shí)鐘配置....................................................................................89系統(tǒng)晶體/陶瓷振蕩器.......................................................................89系統(tǒng)電阻電容振蕩器........................................................................90內(nèi)部系統(tǒng)電阻電容振蕩器................................................................90RTC 振蕩器........................................................................................91看門(mén)狗定時(shí)振蕩器............................................................................91暫停和喚醒................................................................................................92暫停.....................................................................................................92進(jìn)入暫停.............................................................................................92靜態(tài)電流.............................................................................................92喚醒....................................................................................................92看門(mén)狗定時(shí)器............................................................................................94掩膜選項(xiàng)....................................................................................................96應(yīng)用電路....................................................................................................97第二部份 程序語(yǔ)言.....................................................................99第二章 指令集介紹.................................................................................101指令集......................................................................................................101指令周期..........................................................................................101數(shù)據(jù)的傳送......................................................................................101算術(shù)運(yùn)算..........................................................................................102邏輯和移位運(yùn)算..............................................................................102分支和控制的轉(zhuǎn)換..........................................................................102位運(yùn)算..............................................................................................102查表運(yùn)算..........................................................................................103其它運(yùn)算..........................................................................................103指令設(shè)定一覽表......................................................................................104慣例..................................................................................................104I/O 型單片機(jī)使用手冊(cè)iv第三章 指令定義.....................................................................................107第四章 匯編語(yǔ)言和編譯器.....................................................................121常用符號(hào)..................................................................................................121語(yǔ)句語(yǔ)法..................................................................................................122名稱(chēng)..................................................................................................122操作項(xiàng)..............................................................................................122操作數(shù)項(xiàng)..........................................................................................122注解..................................................................................................122編譯偽指令..............................................................................................123條件編譯偽指令..............................................................................123文件控制偽指令..............................................................................124程序偽指令......................................................................................126數(shù)據(jù)定義偽指令..............................................................................130宏指令..............................................................................................132匯編語(yǔ)言指令..........................................................................................136名稱(chēng)..................................................................................................136助記符..............................................................................................136操作數(shù)、運(yùn)算子和表達(dá)式..............................................................136其它..........................................................................................................139前置引用..........................................................................................139局部標(biāo)號(hào)..........................................................................................139匯編語(yǔ)言保留字..............................................................................140編譯器選項(xiàng)..............................................................................................141編譯列表文件格式..................................................................................141源程序列表......................................................................................141編譯總結(jié)..........................................................................................142其它..................................................................................................142第三部份 開(kāi)發(fā)工具................................................................... 145第五章 單片機(jī)開(kāi)發(fā)工具.........................................................................147HT-IDE 集成開(kāi)發(fā)環(huán)境............................................................................147盛群?jiǎn)纹瑱C(jī)仿真器(HT-ICE) ..................................................................149HT-ICE 接口卡.................................................................................149OTP 燒寫(xiě)器.....................................................................................149OTP 適配卡.....................................................................................149系統(tǒng)配置..................................................................................................150HT-ICE 接口卡設(shè)置........................................................................151安裝..........................................................................................................153系統(tǒng)要求..........................................................................................153硬件安裝..........................................................................................153軟件安裝..........................................................................................154目錄v第六章 快速開(kāi)始.....................................................................................159步驟一:建立一個(gè)新項(xiàng)目..............................................................159步驟二:將源程序文件加到項(xiàng)目中..............................................159步驟三:編譯項(xiàng)目..........................................................................159步驟四:燒寫(xiě)OTP 單片機(jī).............................................................160步驟五:傳送程序與掩膜選項(xiàng)單至Holtek ..................................160附錄............................................................................................... 161附錄A 特性曲線圖...................................................................................163附錄B 封裝信息.......................................................................................173
上傳時(shí)間: 2013-10-18
上傳用戶:blacklee
標(biāo)號(hào): FTOD 功能:格式化浮點(diǎn)數(shù)轉(zhuǎn)換成雙字節(jié)定點(diǎn)數(shù)入口條件:格式化浮點(diǎn)操作數(shù)在[R0]中。出口信息:OV=1時(shí)溢出,OV=0時(shí)轉(zhuǎn)換成功:定點(diǎn)數(shù)的絕對(duì)值在[R0]中(雙字節(jié)),數(shù)符在位1FH中,F(xiàn)0=1 時(shí)為整數(shù),CY=1時(shí)為一字節(jié)整數(shù)一字節(jié)小數(shù),否則為純小數(shù)。影響資源:PSW、A、B、R2、R3、R4、位1FH 堆棧需求: 6字節(jié)FTOD: LCALL MVR0 ;將[R0]傳送到第一工作區(qū)MOV A,R2JZ FTD4 ;階碼為零,純小數(shù)JB ACC.7,FTD4;階碼為負(fù),純小數(shù)
標(biāo)簽: MCS 51 單片機(jī)實(shí)用 程序庫(kù)
上傳時(shí)間: 2013-10-15
上傳用戶:洛木卓
標(biāo)號(hào): FSQR 功能:浮點(diǎn)數(shù)開(kāi)平方(快速逼近算法)入口條件:操作數(shù)在[R0]中。出口信息:OV=0時(shí),平方根仍在[R0]中,OV=1時(shí),負(fù)數(shù)開(kāi)平方出錯(cuò)。影響資源:PSW、A、B、R2~R7 堆棧需求: 2字節(jié)FSQR: MOV A,@R0JNB ACC.7,SQRSETB OV ;負(fù)數(shù)開(kāi)平方,出錯(cuò)
標(biāo)簽: MCS 51 單片機(jī)實(shí)用 程序庫(kù)
上傳時(shí)間: 2013-11-17
上傳用戶:止絮那夏
標(biāo)號(hào): FDIV 功能:浮點(diǎn)數(shù)除法 入口條件:被除數(shù)在[R0]中,除數(shù)在[R1]中。出口信息:OV=0時(shí),商仍在[R0]中,OV=1時(shí),溢出。影響資源:PSW、A、B、R2~R7、位1EH、1FH 堆棧需求: 5字節(jié)
標(biāo)簽: MCS 51 單片機(jī)實(shí)用 程序庫(kù)
上傳時(shí)間: 2014-12-28
上傳用戶:wfl_yy
入口條件:被除數(shù)在R2、R3、R4、R5中,除數(shù)在R6、R7中。出口信息:OV=0時(shí)商在R2、R3中,OV=1時(shí)溢出。影響資源:PSW、A、B、R1~R7 堆棧需求: 5字節(jié)DIVS: LCALL MDS ;計(jì)算結(jié)果的符號(hào)和兩個(gè)操作數(shù)的絕對(duì)值PUSH PSW ;保存結(jié)果的符號(hào)LCALL DIVD ;計(jì)算兩個(gè)絕對(duì)值的商JNB OV,DVS1 ;溢出否?POP ACC ;溢出,放去結(jié)果的符號(hào),保留溢出標(biāo)志
標(biāo)簽: MCS 51 單片機(jī)實(shí)用 程序庫(kù)
上傳時(shí)間: 2013-11-09
上傳用戶:lht618
EZ-USB FX系列單片機(jī)USB外圍設(shè)備設(shè)計(jì)與應(yīng)用:PART 1 USB的基本概念第1章 USB的基本特性1.1 USB簡(jiǎn)介21.2 USB的發(fā)展歷程31.2.1 USB 1.131.2.2 USB 2.041.2.3 USB與IEEE 1394的比較41.3 USB基本架構(gòu)與總線架構(gòu)61.4 USB的總線結(jié)構(gòu)81.5 USB數(shù)據(jù)流的模式與管線的概念91.6 USB硬件規(guī)范101.6.1 USB的硬件特性111.6.2 USB接口的電氣特性121.6.3USB的電源管理141.7 USB的編碼方式141.8 結(jié)論161.9 問(wèn)題與討論16第2章 USB通信協(xié)議2.1 USB通信協(xié)議172.2 USB封包中的數(shù)據(jù)域類(lèi)型182.2.1 數(shù)據(jù)域位的格式182.3 封包格式192.4 USB傳輸?shù)念?lèi)型232.4.1 控制傳輸242.4.2 中斷傳輸292.4.3 批量傳輸292.4.4 等時(shí)傳輸292.5 USB數(shù)據(jù)交換格式302.6 USB描述符342.7 USB設(shè)備請(qǐng)求422.8 USB設(shè)備群組442.9 結(jié)論462.10 問(wèn)題與討論46第3章 設(shè)備列舉3.1注冊(cè)表編輯器473.2設(shè)備列舉的步驟493.3設(shè)備列舉步驟的實(shí)現(xiàn)--使用CATC分析工具513.4結(jié)論613.5問(wèn)題與討論61第4章 USB芯片與EZUSB4.1USB芯片的簡(jiǎn)介624.2USB接口芯片644.2.1Philips接口芯片644.2.2National Semiconductor接口芯片664.3內(nèi)含USB單元的微處理器684.3.1Motorola694.3.2Microchip694.3.3SIEMENS704.3.4Cypress714.4USB芯片總攬介紹734.5USB芯片的選擇與評(píng)估744.6問(wèn)題與討論80第5章 設(shè)備與驅(qū)動(dòng)程序5.1階層式的驅(qū)動(dòng)程序815.2主機(jī)的驅(qū)動(dòng)程序835.3驅(qū)動(dòng)程序的選擇865.4結(jié)論865.5問(wèn)題與討論87第6章 HID群組6.1HID簡(jiǎn)介886.2HID群組的傳輸速率886.3HID描述符906.3.1報(bào)告描述符936.3.2主要 main 項(xiàng)目類(lèi)型966.3.3整體 global 項(xiàng)目卷標(biāo)976.3.4區(qū)域 local 項(xiàng)目卷標(biāo)986.3.5簡(jiǎn)易的報(bào)告描述符996.3.6Descriptor Tool 描述符工具 1006.3.7兼容測(cè)試程序1016.4HID設(shè)備的基本請(qǐng)求1026.5Windows通信程序1036.6問(wèn)題與討論106PART 2 硬件技術(shù)篇第7章 EZUSB FX簡(jiǎn)介7.1簡(jiǎn)介1097.2EZUSB FX硬件框圖1097.3封包與PID碼1117.4主機(jī)是個(gè)主控者1137.4.1從主機(jī)接收數(shù)據(jù)1137.4.2傳送數(shù)據(jù)至主機(jī)1137.5USB方向1137.6幀1147.7EZUSB FX傳輸類(lèi)型1147.7.1批量傳輸1147.7.2中斷傳輸1147.7.3等時(shí)傳輸1157.7.4控制傳輸1157.8設(shè)備列舉1167.9USB核心1167.10EZUSB FX單片機(jī)1177.11重新設(shè)備列舉1177.12EZUSB FX端點(diǎn)1187.12.1EZUSB FX批量端點(diǎn)1187.12.2EZUSB FX控制端點(diǎn)01187.12.3EZUSB FX中斷端點(diǎn)1197.12.4EZUSB FX等時(shí)端點(diǎn)1197.13快速傳送模式1197.14中斷1207.15重置與電源管理1207.16EZUSB 2100系列1207.17FX系列--從FIFO1227.18FX系列--GPIF 通用型可程序化的接口 1227.19AN2122/26各種特性的摘要1227.20修訂ID1237.21引腳描述123第8章 EZUSB FX CPU8.1簡(jiǎn)介1308.28051增強(qiáng)模式1308.3EZUSB FX所增強(qiáng)的部分1318.4EZUSB FX寄存器接口1318.5EZUSB FX內(nèi)部RAM1318.6I/O端口1328.7中斷1328.8電源控制1338.9特殊功能寄存器 SFR 1348.10內(nèi)部總線1358.11重置136第9章 EZUSB FX內(nèi)存9.1簡(jiǎn)介1379.28051內(nèi)存1389.3擴(kuò)充的EZUSB FX內(nèi)存1399.4CS#與OE#信號(hào)1409.5EZUSB FX ROM版本141第10章 EZUSB FX輸入/輸出端口10.1簡(jiǎn)介14310.2I/O端口14310.3EZUSB輸入/輸出端口寄存器14610.3.1端口配置寄存器14710.3.2I/O端口寄存器14710.4EZUSB FX輸入/輸出端口寄存器14910.5EZUSB FX端口配置表15110.6I2C控制器15610.78051 I2C控制器15610.8控制位15810.8.1START位15810.8.2STOP位15810.8.3LASTRD位15810.9狀態(tài)位15910.9.1DONE位15910.9.2ACK位15910.9.3BERR位15910.9.4ID1, ID015910.10送出 WRITE I2C數(shù)據(jù)16010.11接收 READ I2C數(shù)據(jù)16010.12I2C激活加載器16010.13SFR尋址 FX 16210.14端口A~E的SFR控制165第11章 EZUSB FX設(shè)備列舉與重新設(shè)備列舉11.1簡(jiǎn)介16711.2預(yù)設(shè)的USB設(shè)備16911.3USB核心對(duì)于EP0設(shè)備請(qǐng)求的響應(yīng)17011.4固件下載17111.5設(shè)備列舉模式17211.6沒(méi)有存在EEPROM17311.7存在著EEPROM, 第一個(gè)字節(jié)是0xB0 0xB4, FX系列11.8存在著EEPROM, 第一個(gè)字節(jié)是0xB2 0xB6, FX系列11.9配置字節(jié)0,FX系列17711.10重新設(shè)備列舉 ReNumerationTM 17811.11多重重新設(shè)備列舉 ReNumerationTM 17911.12預(yù)設(shè)描述符179第12章 EZUSB FX批量傳輸12.1簡(jiǎn)介18812.2批量輸入傳輸18912.3中斷傳輸19112.4EZUSB FX批量IN的例子19112.5批量OUT傳輸19212.6端點(diǎn)對(duì)19412.7IN端點(diǎn)對(duì)的狀態(tài)19412.8OUT端點(diǎn)對(duì)的狀態(tài)19512.9使用批量緩沖區(qū)內(nèi)存19512.10Data Toggle控制19612.11輪詢(xún)的批量傳輸?shù)姆独?9712.12設(shè)備列舉說(shuō)明19912.13批量端點(diǎn)中斷19912.14中斷批量傳輸?shù)姆独?0112.15設(shè)備列舉說(shuō)明20512.16自動(dòng)指針器205第13章 EZUSB控制端點(diǎn)013.1簡(jiǎn)介20913.2控制端點(diǎn)EP021013.3USB請(qǐng)求21213.3.1取得狀態(tài) Get_Status 21413.3.2設(shè)置特性(Set_Feature)21713.3.3清除特性(Clear_Feature)21813.3.4取得描述符(Get_Descriptor)21913.3.5設(shè)置描述符(Set Descriptor)22313.3.6設(shè)置配置(Set_Configuration)22513.3.7取得配置(Get_Configuration)22513.3.8設(shè)置接口(Set_Interface)22513.3.9取得接口(Get_Interface)22613.3.10設(shè)置地址(Set_Address)22713.3.11同步幀22713.3.12固件加載228第14章 EZUSB FX等時(shí)傳輸14.1簡(jiǎn)介22914.2等時(shí)IN傳輸23014.2.1初始化設(shè)置23014.2.2IN數(shù)據(jù)傳輸23014.3等時(shí)OUT傳輸23114.3.1初始化設(shè)置23114.3.2數(shù)據(jù)傳輸23214.4設(shè)置等時(shí)FIFO的大小23214.5等時(shí)傳輸速度23414.5.1EZUSB 2100系列23414.5.2EZUSB FX系列23514.6快速傳輸 僅存于2100系列 23614.6.1快速寫(xiě)入23614.6.2快速讀取23714.7快速傳輸?shù)臅r(shí)序 僅存于2100系列 23714.7.1快速寫(xiě)入波形23814.7.2快速讀取波形23914.8快速傳輸速度(僅存于2100系列)23914.9其余的等時(shí)寄存器24014.9.1除能等時(shí)寄存器24014.9.20字節(jié)計(jì)數(shù)位24114.10以無(wú)數(shù)據(jù)來(lái)響應(yīng)等時(shí)IN令牌24214.11使用等時(shí)FIFO242第15章 EZUSB FX中斷15.1簡(jiǎn)介24315.2USB核心中斷24415.3喚醒中斷24415.4USB中斷信號(hào)源24515.5SUTOK與SUDAV中斷24815.6SOF中斷24915.7中止 suspend 中斷24915.8USB重置中斷24915.9批量端點(diǎn)中斷25015.10USB自動(dòng)向量25015.11USB自動(dòng)向量譯碼25115.12I2C中斷25215.13IN批量NAK中斷 僅存于AN2122/26與FX系列 25315.14I2C STOP反相中斷 僅存于AN2122/26與FX系列 25415.15從FIFO中斷 INT4 255第16章 EZUSB FX重置16.1簡(jiǎn)介25716.2EZUSB FX打開(kāi)電源重置 POR 25716.38051重置的釋放25916.3.1RAM的下載26016.3.2下載EEPROM26016.3.3外部ROM26016.48051重置所產(chǎn)生的影響26016.5USB總線重置26116.6EZUSB脫離26216.7各種重置狀態(tài)的總結(jié)263第17章 EZUSB FX電源管理17.1簡(jiǎn)介26517.2中止 suspend 26617.3回復(fù) resume 26717.4遠(yuǎn)程喚醒 remote wakeup 269第18章 EZUSB FX系統(tǒng)18.1簡(jiǎn)介27118.2DMA寄存器描述27218.2.1來(lái)源. 目的. 傳輸長(zhǎng)度地址寄存器27218.2.2DMA起始與狀態(tài)寄存器27518.2.3DMA同步突發(fā)使能寄存器27518.2.4虛擬寄存器27818.3RD/FRD與WR/FWR DMA閃控的選擇27818.4DMA閃控波形與延伸位的交互影響27918.4.1DMA外部寫(xiě)入27918.4.2DMA外部讀取280第19章 EZUSB FX寄存器19.1簡(jiǎn)介28219.2批量數(shù)據(jù)緩沖區(qū)寄存器28319.3等時(shí)數(shù)據(jù)FIFO寄存器28419.4等時(shí)字節(jié)計(jì)數(shù)寄存器28519.5CPU寄存器28719.6I/O端口配置寄存器28819.7I/O端口A~C輸入/輸出寄存器28919.8230 Kbaud UART操作--AN2122/26寄存器29119.9等時(shí)控制/狀態(tài)寄存器29119.10I2C寄存器29219.11中斷29419.12端點(diǎn)0控制與狀態(tài)寄存器29919.13端點(diǎn)1~7的控制與狀態(tài)寄存器30019.14整體USB寄存器30519.15快速傳輸30919.16SETUP數(shù)據(jù)31119.17等時(shí)FIFO的容量大小31119.18通用I/F中斷使能31219.19通用中斷請(qǐng)求31219.20輸入/輸出端口寄存器D與E31319.20.1端口D輸出31319.20.2輸入端口D腳位31319.20.3端口D輸出使能31319.20.4端口E輸出31319.20.5輸入端口E腳位31419.20.6端口E輸出使能31419.21端口設(shè)置31419.22接口配置31419.23端口A與端口C切換配置31619.23.1端口A切換配置#231619.23.2端口C切換配置#231719.24DMA寄存器31919.24.1來(lái)源. 目的. 傳輸長(zhǎng)度地址寄存器31919.24.2DMA起始與狀態(tài)寄存器32019.24.3DMA同步突發(fā)使能寄存器32019.24.4選擇8051 A/D總線作為外部FIFO321PART 3 固件技術(shù)篇第20章 EZUSB FX固件架構(gòu)與函數(shù)庫(kù)20.1固件架構(gòu)總覽32320.2固件架構(gòu)的建立32520.3固件架構(gòu)的副函數(shù)鉤子32520.3.1工作分配器32620.3.2設(shè)備請(qǐng)求 device request 32620.3.3USB中斷服務(wù)例程32920.4固件架構(gòu)整體變量33220.5描述符表33320.5.1設(shè)備描述符33320.5.2配置描述符33420.5.3接口描述符33420.5.4端點(diǎn)描述符33520.5.5字符串描述符33520.5.6群組描述符33520.6EZUSB FX固件的函數(shù)庫(kù)33620.6.1包含文件 *.H 33620.6.2子程序33620.6.3整體變量33820.7固件架構(gòu)的原始程序代碼338第21章 EZUSB FX固件范例程序21.1范例程序的簡(jiǎn)介34621.2外圍I/O測(cè)試程序34721.3端點(diǎn)對(duì), EP_PAIR范例35221.4批量測(cè)試, BulkTest范例36221.5等時(shí)傳輸, ISOstrm范例36821.6問(wèn)題與討論373PART 4 實(shí)驗(yàn)篇第22章 EZUSB FX仿真器22?1簡(jiǎn)介37522?2所需的工具37622?3EZUSB FX框圖37722.4EZUSB最終版本的系統(tǒng)框圖37822?5第一次下載程序37822.6EZUSB FX開(kāi)發(fā)系統(tǒng)框圖37922.7設(shè)置開(kāi)發(fā)環(huán)境38022.8EZUSB FX開(kāi)發(fā)工具組的內(nèi)容38122.9EZUSB FX開(kāi)發(fā)工具組軟件38222.9.1初步安裝程序38222.9.2確認(rèn)主機(jī) 個(gè)人計(jì)算機(jī) 是否支持USB38222.10安裝EZUSB控制平臺(tái). 驅(qū)動(dòng)程序以及文件38322.11EZUSB FX開(kāi)發(fā)電路板38522.11.1簡(jiǎn)介38522.11.2開(kāi)發(fā)電路板的瀏覽38522.11.3所使用的8051資源38622.11.4詳細(xì)電路38622.11.5LED的顯示38722.11.6Jumper38722.11.7連接器39122.11.8內(nèi)存映象圖39222.11.9PLD信號(hào)39422.11.10PLD源文件文件39522.11.11雛形板的擴(kuò)充連接器P1~P639722.11.12Philips PCF8574 I/O擴(kuò)充IC40022.12DMA USB FX I/O LAB開(kāi)發(fā)工具介紹40122.12.1USBFX簡(jiǎn)介40122.12.2USBFX及外圍整體環(huán)境介紹40322?12?3USBFX與PC連接軟件介紹40422.12.4USBFX硬件功能介紹404第23章 LED顯示器輸出實(shí)驗(yàn)23.1硬件設(shè)計(jì)與基本概念40923.2固件設(shè)計(jì)41023.3.1固件架構(gòu)文件FW.C41123.3.2描述符文件DESCR.A5141223.3.3外圍接口文件PERIPH.C41723.4固件程序代碼的編譯與鏈接42123.5Windows程序, VB設(shè)計(jì)42323.6INF文件的編寫(xiě)設(shè)計(jì)42423.7結(jié)論42623.8問(wèn)題與討論427第24章 七段顯示器與鍵盤(pán)的輸入/輸出實(shí)驗(yàn)24.1硬件設(shè)計(jì)與基本概念42824.2固件設(shè)計(jì)43124.2.1七段顯示器43124.2.24×4鍵盤(pán)掃描43324.3固件程序代碼的編譯與鏈接43424.4Windows程序, VB設(shè)計(jì)43624.5問(wèn)題與討論437第25章 LCD文字型液晶顯示器輸出實(shí)驗(yàn)25.1硬件設(shè)計(jì)與基本概念43825.1.1液晶顯示器LCD43825.2固件設(shè)計(jì)45225.3固件程序代碼的編譯與鏈接45625.4Windows程序, VB設(shè)計(jì)45725.5問(wèn)題與討論458第26章 LED點(diǎn)陣輸出實(shí)驗(yàn)26.1硬件設(shè)計(jì)與基本概念45926.2固件設(shè)計(jì)46326.3固件程序代碼的編譯與鏈接46326.4Windows程序, VB設(shè)計(jì)46526.5問(wèn)題與討論465第27章 步進(jìn)電機(jī)輸出實(shí)驗(yàn)27.1硬件設(shè)計(jì)與基本概念46627.1.11相激磁46727.1.22相激磁46727.1.31-2相激磁46827?1?4PMM8713介紹46927.2固件設(shè)計(jì)47327.3固件程序代碼的編譯與鏈接47427.4Windows程序, VB設(shè)計(jì)47627.5問(wèn)題與討論477第28章 I2C接口輸入/輸出實(shí)驗(yàn)28.1硬件設(shè)計(jì)與基本概念47828.2固件設(shè)計(jì)48128.3固件程序代碼的編譯與鏈接48328.4Windows程序, VB設(shè)計(jì)48428.5問(wèn)題與討論485第29章 A/D轉(zhuǎn)換器與D/A轉(zhuǎn)換器的輸入/輸出實(shí)驗(yàn)29.1硬件設(shè)計(jì)與基本概念48629.1.1A/D轉(zhuǎn)換器48629.1.2D/A轉(zhuǎn)換器49029.2固件設(shè)計(jì)49329.2.1A/D轉(zhuǎn)換器的固件設(shè)計(jì)49329.2.2D/A轉(zhuǎn)換器的固件設(shè)計(jì)49629.3固件程序代碼的編譯與鏈接49729.4Windows程序, VB設(shè)計(jì)49829.5問(wèn)題與討論499第30章 LCG繪圖型液晶顯示器輸出實(shí)驗(yàn)30.1硬件設(shè)計(jì)與基本概念50030.1.1繪圖型LCD50030.1.2繪圖型LCD控制指令集50330.1.3繪圖型LCD讀取與寫(xiě)入時(shí)序圖50530.2固件設(shè)計(jì)50630.2.1LCG驅(qū)動(dòng)程序50630.2.2USB固件碼51330.3固件程序代碼的編譯與鏈接51630.4Windows程序, VB設(shè)計(jì)51730.5問(wèn)題與討論518附錄A Cypress控制平臺(tái)的操作A.1EZUSB控制平臺(tái)總覽519A.2主畫(huà)面520A.3熱插拔新的USB設(shè)備521A.4各種工具欄的使用524A.5故障排除526A.6控制平臺(tái)的進(jìn)階操作527A.7測(cè)試Unary Op工具欄上的按鈕功能528A.8測(cè)試制造商請(qǐng)求的工具欄 2100 系列的開(kāi)發(fā)電路板 529A.9測(cè)試等時(shí)傳輸工具欄532A.10測(cè)試批量傳輸工具欄533A.11測(cè)試重置管線工具欄535A.12測(cè)試設(shè)置接口工具欄537A.13測(cè)試制造商請(qǐng)求工具欄 FX系列開(kāi)發(fā)電路板A.14執(zhí)行Get Device Descriptor 操作來(lái)驗(yàn)證開(kāi)發(fā)板的功能是否正確539A.15從EZUSB控制平臺(tái)中, 加載dev_io的范例并且加以執(zhí)行540A.16從Keil偵錯(cuò)應(yīng)用程序中, 加載dev_io范例程序代碼, 然后再加以執(zhí)行542A.17將dev_io 目標(biāo)文件移開(kāi), 且使用Keil IDE 集成開(kāi)發(fā)環(huán)境 來(lái)重建545A.18在偵錯(cuò)器下執(zhí)行dev_io目標(biāo)文件, 并且使用具有偵錯(cuò)能力的IDE547A.19在EZUSB控制平臺(tái)下, 執(zhí)行ep_pair目標(biāo)文件A.20如何修改fw范例, 并在開(kāi)發(fā)電路板上產(chǎn)生等時(shí)傳輸550附錄BEZUSB 2100系列及EZUSB FX系列引腳表B.1EZUSB 2100系列引腳表555B?2EZUSB FX系列引腳圖表561附錄C EZUSB FX寄存器總覽附錄D EEPROM燒錄方式
標(biāo)簽: EZ-USB USB 單片機(jī) 外圍設(shè)備
上傳時(shí)間: 2013-11-21
上傳用戶:努力努力再努力
一、實(shí)驗(yàn)?zāi)康模保莆斩〞r(shí)/計(jì)數(shù)器、輸入/輸出接口電路設(shè)計(jì)方法。 2.掌握中斷控制編程技術(shù)的方法和應(yīng)用。3.掌握8086匯編語(yǔ)言程序設(shè)計(jì)方法。 二、實(shí)驗(yàn)內(nèi)容與要求 微機(jī)燈光控制系統(tǒng)主要用于娛樂(lè)場(chǎng)所的彩燈控制。系統(tǒng)的彩燈共有12組,在實(shí)驗(yàn)時(shí)用12個(gè)發(fā)光二極管模擬。1. 基本要求:燈光控制共有8種模式,如12個(gè)燈依次點(diǎn)亮;12個(gè)燈同時(shí)閃爍等八種。系統(tǒng)可以通過(guò)鍵盤(pán)和顯示屏的人機(jī)對(duì)話,將8種模式進(jìn)行任意個(gè)數(shù)、任意次序的連接組合。系統(tǒng)不斷重復(fù)執(zhí)行輸入的模式組合,直至鍵盤(pán)有任意一個(gè)鍵按下,退出燈光控制系統(tǒng),返回DOS系統(tǒng)。2. 提高要求:音樂(lè)彩燈控制系統(tǒng),根據(jù)音樂(lè)的變化控制彩燈的變化,主要有以下幾種:第一種為音樂(lè)節(jié)奏控制彩燈,按音樂(lè)的節(jié)拍變換彩燈花樣。第二種音律的強(qiáng)弱(信號(hào)幅度大小)控制彩燈。強(qiáng)音時(shí),燈的亮度加大,且被點(diǎn)亮的數(shù)目增多。第三種按音調(diào)高低(信號(hào)頻率高低)控制彩燈。低音時(shí),某一部分燈點(diǎn)亮;高音時(shí),另一部分點(diǎn)亮。 三、實(shí)驗(yàn)報(bào)告要求 1.設(shè)計(jì)目的和內(nèi)容 2.總體設(shè)計(jì) 3.硬件設(shè)計(jì):原理圖(接線圖)及簡(jiǎn)要說(shuō)明 4.軟件設(shè)計(jì)框圖及程序清單5.設(shè)計(jì)結(jié)果和體會(huì)(包括遇到的問(wèn)題及解決的方法) 四、設(shè)計(jì)原理我們以背景霓虹燈的一種顯示效果為例,介紹控制霓虹燈顯示的基本原理。設(shè)有一排 n 段水平排列的霓虹燈,某種顯示方式為從左到右每0.2 秒逐個(gè)點(diǎn)亮。其控制過(guò)程如下: 若以“ 1 ”代表霓虹燈點(diǎn)亮,以“ 0 ”代表霓虹燈熄滅,則開(kāi)始時(shí)刻, n 段霓虹燈的控制信號(hào)均為“ 0 ”,隨后,控制器將一幀 n 個(gè)數(shù)據(jù)送至 n 段霓虹燈的控制端,其中,最左邊的一段霓虹燈對(duì)應(yīng)的控制數(shù)據(jù)為“ 1 ”,其余的數(shù)據(jù)均為零,即 1000 … 000 。當(dāng) n 個(gè)數(shù)據(jù)送完以后,控制器停止送數(shù),保留這種狀態(tài)(定時(shí)) 0.2 秒,此時(shí),第 1 段霓虹燈被點(diǎn)亮,其余霓虹燈熄滅。隨后,控制器又在極短的時(shí)間內(nèi)將數(shù)據(jù) 1100 … 000 送至霓虹燈的控制端,并定時(shí) 0.2 秒,這段時(shí)間,前兩段霓虹燈被點(diǎn)亮。由于送數(shù)據(jù)的過(guò)程很快,我們觀測(cè)到的效果是第一段霓虹燈被點(diǎn)亮 0.2 秒后,第 2 段霓虹燈接著被點(diǎn)亮,即每隔 0.2 秒顯示一幀圖樣。如此下去,最后控制器將數(shù)據(jù) 1111 … 111 送至 n 段霓虹燈的控制端,則 n 段霓虹燈被全部點(diǎn)亮。 只要改變送至每段霓虹燈的數(shù)據(jù),即可改變霓虹燈的顯示方式,顯然,我們可以通過(guò)合理地組合數(shù)據(jù)(編程)來(lái)得到霓虹燈的不同顯示方式。 五、總體方案論證分析系統(tǒng)設(shè)計(jì)思路如下:1) 采集8位開(kāi)關(guān)輸入信號(hào),若輸入數(shù)據(jù)為0時(shí),將其修改為1。確定輸入的硬件接口電路。采樣輸入開(kāi)關(guān)量,并存入NUM的軟件程序段。2) 以12個(gè)燈依次點(diǎn)亮為例(即燈光控制模式M1),考慮與其相應(yīng)的燈光顯示代碼數(shù)據(jù)。確定顯示代碼數(shù)據(jù)輸出的接口電路。輸出一個(gè)同期顯示代碼的軟件程序段(暫不考慮時(shí)隙的延時(shí)要求)。3) 應(yīng)用定時(shí)中斷服務(wù)和NUM數(shù)據(jù),實(shí)現(xiàn)t=N×50ms的方法。4) 實(shí)現(xiàn)某一種模式燈光顯示控制中12個(gè)時(shí)隙一個(gè)周期,共重復(fù)四次的控制方法。要求在初始化時(shí)采樣開(kāi)關(guān)輸入數(shù)據(jù)NUM,并以此控制每一時(shí)隙的延時(shí)時(shí)間;在每一時(shí)隙結(jié)束時(shí),檢查有無(wú)鍵按下,若是退出鍵按下,則結(jié)束燈光控制,返回DOS系統(tǒng),若是其他鍵就返回主菜單,重新輸入控制模式數(shù)據(jù)。5) 通過(guò)人機(jī)對(duì)話,輸入8種燈光顯示控制模式的任意個(gè)數(shù)、任意次序連接組合的控制模式數(shù)據(jù)串(以ENTER鍵結(jié)尾)。對(duì)輸入的數(shù)據(jù)進(jìn)行檢查,若數(shù)據(jù)都在1 - 8之間,則存入INBUF;若有錯(cuò)誤,則通過(guò)屏幕顯示輸入錯(cuò)誤,準(zhǔn)備重新輸入燈光顯示控制模式數(shù)據(jù)。6) 依次讀取INBUF中的控制模式數(shù)據(jù)進(jìn)行不同模式的燈光顯示控制,在沒(méi)有任意鍵按下的情況下,系統(tǒng)從第一個(gè)控制模式數(shù)據(jù)開(kāi)始,順序工作到最后一個(gè)控制模式數(shù)據(jù)后,又返回到第一個(gè)控制模式數(shù)據(jù),不斷重復(fù)循環(huán)進(jìn)行燈光顯示控制。7) 本系統(tǒng)的軟件在總體上有兩部份,即主程序(MAIN)和實(shí)時(shí)中斷服務(wù)程序(INTT)。討論以功能明確、相互界面分割清晰的軟件程序模塊化設(shè)計(jì)方法。即確定有關(guān)功能模塊,并畫(huà)出以功能模塊表示的主程序(MAIN)流程框圖和定時(shí)中斷服務(wù)程序的流程框圖。 六、硬件電路設(shè)計(jì) 以微機(jī)實(shí)驗(yàn)平臺(tái)和PC機(jī)資源為硬件設(shè)計(jì)的基礎(chǔ),不需要外加電路。主要利用了以下的資源:1.8255并行口電路8255并行口電路主要負(fù)責(zé)數(shù)據(jù)的輸入與輸出,可以輸出數(shù)據(jù)控制發(fā)光二極管的亮滅和讀取乒乓開(kāi)關(guān)的數(shù)據(jù)。實(shí)驗(yàn)時(shí)可以將8255的A口、B口和一組發(fā)光二極管相連,C口和乒乓開(kāi)關(guān)相連。2.8253定時(shí)/計(jì)數(shù)器8253定時(shí)/計(jì)數(shù)器和8259中斷控制器一起實(shí)現(xiàn)時(shí)隙定時(shí)。本設(shè)計(jì)的定時(shí)就是采用的t=N×50ms的方法,50ms由8253定時(shí)/計(jì)數(shù)器的計(jì)數(shù)器0控制定時(shí),N是在中斷服務(wù)程序中軟件計(jì)時(shí)。8253的OUT0接到IRQ2,產(chǎn)生中斷請(qǐng)求信號(hào)。8253定時(shí)/計(jì)數(shù)器定時(shí)結(jié)束會(huì)發(fā)出中斷信號(hào),進(jìn)入中斷服務(wù)程序。3.PC機(jī)資源本設(shè)計(jì)除了利用PC機(jī)作為控制器之外,還利用了PC機(jī)的鍵盤(pán)和顯示器。鍵盤(pán)主要是輸入控制模式數(shù)據(jù),顯示器就是顯示提示信息。 七、軟件設(shè)計(jì) 軟件主要分為主程序(MAIN)和中斷服務(wù)程序(INTT),主程序包含系統(tǒng)初始化、讀取乒乓開(kāi)關(guān)、讀取控制模式數(shù)據(jù)以及按鍵處理等模塊。中斷服務(wù)程序主要是定時(shí)時(shí)間到后根據(jù)控制模式數(shù)據(jù)點(diǎn)亮相應(yīng)的發(fā)光二極管。1.主程序主程序的程序流程圖如圖1所示。
上傳時(shí)間: 2014-04-05
上傳用戶:q986086481
有兩種方式可以讓設(shè)備和應(yīng)用程序之間聯(lián)系:1. 通過(guò)為設(shè)備創(chuàng)建的一個(gè)符號(hào)鏈;2. 通過(guò)輸出到一個(gè)接口WDM驅(qū)動(dòng)程序建議使用輸出到一個(gè)接口而不推薦使用創(chuàng)建符號(hào)鏈的方法。這個(gè)接口保證PDO的安全,也保證安全地創(chuàng)建一個(gè)惟一的、獨(dú)立于語(yǔ)言的訪問(wèn)設(shè)備的方法。一個(gè)應(yīng)用程序使用Win32APIs來(lái)調(diào)用設(shè)備。在某個(gè)Win32 APIs和設(shè)備對(duì)象的分發(fā)函數(shù)之間存在一個(gè)映射關(guān)系。獲得對(duì)設(shè)備對(duì)象訪問(wèn)的第一步就是打開(kāi)一個(gè)設(shè)備對(duì)象的句柄。 用符號(hào)鏈打開(kāi)一個(gè)設(shè)備的句柄為了打開(kāi)一個(gè)設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個(gè)符號(hào)鏈出口,應(yīng)用程序可以用下面這個(gè)例子的形式打開(kāi)句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開(kāi)一個(gè)設(shè)備。這個(gè)設(shè)備必須有一個(gè)符號(hào)鏈,以便應(yīng)用程序能夠打開(kāi)它。有關(guān)細(xì)節(jié)查看有關(guān)Kdevice和CreateLink的內(nèi)容。在上述調(diào)用中第一個(gè)參數(shù)中前綴后的部分就是這個(gè)符號(hào)鏈的名字。注意:CreatFile中的第一個(gè)參數(shù)不是Windows 98/2000中驅(qū)動(dòng)程序(.sys文件)的路徑。是到設(shè)備對(duì)象的符號(hào)鏈。如果使用DriverWizard產(chǎn)生驅(qū)動(dòng)程序,它通常使用類(lèi)KunitizedName來(lái)構(gòu)成設(shè)備的符號(hào)鏈。這意味著符號(hào)鏈名有一個(gè)附加的數(shù)字,通常是0。例如:如果鏈接名稱(chēng)的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應(yīng)用程序需要被覆蓋的I/O,第六個(gè)參數(shù)(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個(gè)輸出接口打開(kāi)句柄用這種方式打開(kāi)一個(gè)句柄會(huì)稍微麻煩一些。DriverWorks庫(kù)提供兩個(gè)助手類(lèi)來(lái)使獲得對(duì)該接口的訪問(wèn)容易一些,這兩個(gè)類(lèi)是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類(lèi)封裝了一個(gè)設(shè)備信息集,該信息集包含了特殊類(lèi)中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類(lèi)的一個(gè)實(shí)例來(lái)獲得一個(gè)或更多的CdeviceInterface類(lèi)的實(shí)例。CdeviceInterface類(lèi)是一個(gè)單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個(gè)路徑名的指針,該指針可以在CreateFile中使用來(lái)打開(kāi)設(shè)備。下面用一個(gè)小例子來(lái)顯示這些類(lèi)最基本的使用方法: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來(lái)產(chǎn)生到設(shè)備對(duì)象的IRPs。下面的表顯示了這種對(duì)應(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è)備類(lèi)成員的Close和CleanUp:CreateFile使內(nèi)核為設(shè)備創(chuàng)建一個(gè)新的文件對(duì)象。這使得多個(gè)句柄可以映射同一個(gè)文件對(duì)象。當(dāng)這個(gè)文件對(duì)象的最后一個(gè)用戶級(jí)句柄被撤銷(xiāo)后,I/O管理器調(diào)用CleanUp。當(dāng)沒(méi)有任何用戶級(jí)和核心級(jí)的對(duì)文件對(duì)象的訪問(wèn)的時(shí)候,I/O管理器調(diào)用Close。如果被打開(kāi)的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯(cuò)誤(無(wú)效功能)。以前為Windows95編寫(xiě)的VxD的應(yīng)用程序代碼中可能會(huì)在打開(kāi)設(shè)備的時(shí)候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個(gè)屬性,因?yàn)樗鼘?dǎo)致沒(méi)有特權(quán)的用戶企圖打開(kāi)這個(gè)設(shè)備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數(shù)轉(zhuǎn)換成IRP域的方法依賴(lài)于設(shè)備對(duì)象的屬性。當(dāng)設(shè)備設(shè)置DO_DIRECT_IO標(biāo)志,I/O管理器將buff鎖住在存儲(chǔ)器中,并且創(chuàng)建了一個(gè)存儲(chǔ)在IRP中的MDL域。一個(gè)設(shè)備可以通過(guò)調(diào)用Kirp::Mdl來(lái)存取MDL。當(dāng)設(shè)備設(shè)置DO_BUFFERED_IO標(biāo)志,設(shè)備對(duì)象分別通過(guò)KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或?qū)懖僮鳙@得buff地址。當(dāng)設(shè)備不設(shè)置DO_BUFFERED_IO標(biāo)志也不設(shè)置DO_DIRECT_IO,內(nèi)核設(shè)置IRP 的UserBuffer域來(lái)對(duì)應(yīng)ReadFile或WriteFile中的buff參數(shù)。然而,存儲(chǔ)區(qū)并沒(méi)有被鎖住而且地址只對(duì)調(diào)用進(jìn)程有效。驅(qū)動(dòng)程序可以使用KIrp::UserBuffer來(lái)存取IRP域。對(duì)于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴(lài)于特殊的I/O控制代碼,它不在設(shè)備對(duì)象的特性中。宏CTL_CODE(在winioctl.h中定義)用來(lái)構(gòu)造控制代碼。這個(gè)宏的其中一個(gè)參數(shù)指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對(duì)應(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è)單一的緩沖來(lái)作為輸入與輸出。驅(qū)動(dòng)程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動(dòng)程序通過(guò)調(diào)用KIrp::IoctlBuffer獲得緩沖地址。在完成時(shí),I/O管理器從系統(tǒng)緩沖拷貝數(shù)據(jù)到提供給Ring 3級(jí)調(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)程序可以通過(guò)調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對(duì)象,驅(qū)動(dòng)程序?qū)@個(gè)對(duì)象的訪問(wèn)通過(guò)調(diào)用KIrp::Mdl來(lái)實(shí)現(xiàn)。對(duì)于METHOD_OUT_DIRECT,調(diào)用者必須有對(duì)緩沖的寫(xiě)訪問(wèn)權(quán)限。注意,對(duì)METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會(huì)做映射來(lái)配置緩沖。虛擬地址只對(duì)調(diào)用進(jìn)程有效。這里是一個(gè)用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來(lái)定義一個(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)程序中,代碼看起來(lái)如下所示: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
并行接口電路:微處理器與I/O設(shè)備進(jìn)行數(shù)據(jù)傳輸時(shí)均需經(jīng)過(guò)接口電路實(shí)現(xiàn)系統(tǒng)與設(shè)備互連的匹配。并行接口電路中每個(gè)信息位有自己的傳輸線,一個(gè)數(shù)據(jù)字節(jié)各位可并行傳送,速度快,控制簡(jiǎn)單。由于電氣特性的限制,傳輸距離不能太長(zhǎng)。8255A是通用的可編程并行接口芯片,功能強(qiáng),使用靈活。適合一些并行輸入/輸出設(shè)備的使用。8255A并行接口邏輯框圖三個(gè)獨(dú)立的8位I/O端口,口A、口B、口C。口A有輸入、輸出鎖存器及輸出緩沖器。口B與口C有輸入、輸出緩沖器及輸出鎖存器。在實(shí)現(xiàn)高級(jí)的傳輸協(xié)議時(shí),口C的8條線分為兩組,每組4條線,分別作為口A與口B在傳輸時(shí)的控制信號(hào)線。口C的8條線可獨(dú)立進(jìn)行置1/置0的操作。口A、口B、口C及控制字口共占4個(gè)設(shè)備號(hào)。8255A并行接口的控制字工作模式選擇控制字:口A有三種工作模式,口B有二種工作模式。口C獨(dú)立使用時(shí)只有一個(gè)工作模式,與口A、口B配合使用時(shí),作為控制信號(hào)線。三種工作模式命名為:模式0、模式1及模式2。模式 0 為基本I/O端口,模式1為帶選通的I/O端口,模式 2 為帶選通的雙向I/O端口。口A可工作在三種模式下,口B可工作在模式 0與模式 1下,口C可工作在模式0下或作為控制線配合口A、口B工作。
上傳時(shí)間: 2013-11-07
上傳用戶:xitai
蟲(chóng)蟲(chóng)下載站版權(quán)所有 京ICP備2021023401號(hào)-1