前言智能儀表課采用了《單片機(jī)原理與接口技術(shù)》作為教材,這是一門實踐性極強(qiáng)的課程,理論和實驗教學(xué)的有機(jī)結(jié)合,是提高教學(xué)質(zhì)量的唯一途徑。為密切配合理論教學(xué),針對SICElab賽思開放式綜合實驗/仿真系統(tǒng),我們編寫了配套的實驗教材。SICElab賽思開放式綜合實驗/仿真系統(tǒng)采用了符合單片機(jī)開發(fā)過程的“仿真式”組合設(shè)計思想,使得所有的實驗?zāi)K及CPU資源均全力對用戶開放,從而充分滿足“驗證式”→“模仿式”→“探索式”→“開發(fā)式”的由淺入深的各種實驗要求。賽思開放式綜合實驗/仿真系統(tǒng)采用偉福G6W仿真器,為用戶提供了一個大集成軟件環(huán)境,統(tǒng)一的界面,包含一個項目管理器,一個功能強(qiáng)大的編輯器,匯編Make、build和調(diào)試工具并提供一個與第三方編譯器的接口,具有DOS/WINDOWS雙平臺,仿真器與實驗平臺分離,采用“仿真”方式進(jìn)行實驗,同時,允許進(jìn)行脫機(jī)運(yùn)行工作,所以,實驗過程是與實際開發(fā)過程完全一致的。仿真器使用的是雙“CPU”架構(gòu)方式,100%資源出讓,100%實時,100%無條件硬件斷點,可滿足學(xué)生實驗,畢業(yè)設(shè)計,參加電子競爭,教師科研所需。第一章簡單介紹了賽思開放式綜合實驗/仿真系統(tǒng)的組成(包括實驗平臺、仿真器、軟件支持、開關(guān)電源),實驗內(nèi)容,實驗方式,支持器件等。第二章選編了二十例驗證式實驗,包括實驗平臺操作,連接仿真器、PC機(jī),利用DOS和WINDOWS平臺軟硬件結(jié)合的實驗,按由淺入深原則排列。第三章選編了十六例模仿和探索開發(fā)式實驗。教師和學(xué)生可根據(jù)課時和具體情況選擇實驗內(nèi)容,或自行設(shè)計新的實驗內(nèi)容。由于課時所限,有的實驗可讓學(xué)生在課后開放實驗室時完成,以提高學(xué)生動手能力,提高教學(xué)質(zhì)量,培養(yǎng)學(xué)生創(chuàng)新精神。附錄一介紹了綜合實驗平臺各模塊的電路圖,附錄二是實驗平臺鍵盤操作仿真方法說明。由于時間匆忙,加上編者水平有限,難免有錯漏之處,請讀者不吝賜教。
標(biāo)簽: 單片機(jī)原理 接口技術(shù) 實驗 教材
上傳時間: 2013-10-22
上傳用戶:sunshie
摘要:網(wǎng)絡(luò)供電是EPA的關(guān)鍵技術(shù)之一,簡要介紹了IEEE802.3AF標(biāo)準(zhǔn),系統(tǒng)分析了以太網(wǎng)供電設(shè)備的功能需求和總體設(shè)計,選用MSP430F148單片機(jī)和TPS2383A以太網(wǎng)供電電源管理器,基于I2C-BUS通信規(guī)范,開發(fā)了符合IEEE802.3AF標(biāo)準(zhǔn)的以太網(wǎng)供電設(shè)備,著重論述了該以太網(wǎng)供電設(shè)備的軟件實現(xiàn)過程,最后給出了該供電設(shè)備在EPA系統(tǒng)中的應(yīng)用實例,具有良好的使用效果。
標(biāo)簽: MSP 430 單片機(jī) 以太網(wǎng)
上傳時間: 2013-11-06
上傳用戶:xmsmh
ICCAVR簡介ICCAVR 是一種使用ANSI 標(biāo)準(zhǔn)C 語言來開發(fā)微控制器(MCU)程序的一個工具,它是一個綜合了編輯器和工程管理器的集成工作環(huán)境(IDE)。源文件全部被組織到工程之中,文件的編輯和工程(project)的構(gòu)筑也在IDE 的環(huán)境中完成。編譯錯誤在狀態(tài)窗口中顯示,用鼠標(biāo)單擊編譯錯誤時,光標(biāo)會自動跳轉(zhuǎn)到出錯行。這個工程管理器還能直接產(chǎn)生INTEL HEX格式的燒寫文件和可以在AVR Studio 中調(diào)試的COFF 格式的調(diào)試文件。這里特別要提一下ICCAVR 中的應(yīng)用構(gòu)筑向?qū)В梢栽赥ools 欄中選擇“ApplicationBiulder”或者直接點擊快捷工具欄中的“Application Biulder”圖標(biāo),就可以打開應(yīng)用構(gòu)筑向?qū)υ捒颍梢愿鶕?jù)需要設(shè)定芯片種類,各個端口初始值,是否使用定時器,中斷,UART等,選好以后單擊“OK”就可以得到所需的硬件初始化程序段,非常可靠而且方便。圖1給出了初始化UART 的一個例子:下面介紹一下創(chuàng)建并編譯一個工程文件的簡要步驟:1.新建一個源文件從file 菜單中選擇new,創(chuàng)建一個新文件,在改文件中輸入源程序并進(jìn)行編輯和修改,然后存盤,在存盤時必須指定文件類型,如命名為:try.c 。寫一個新文件的步驟:首先用Biulder 初始化需要用到的硬件資源,生成初始化程序,然后再寫需要的代碼實現(xiàn)所要的功能。2.新建一個project從projrct 菜單中選擇new 命令,IDE 會彈出一個對話框,在對話框中用戶可以指定工程存放的文件夾和工程的名稱。在建立一個新工程之后,在工程管理器的窗口會出現(xiàn)三個子目錄,F(xiàn)iles, Headers, Documents,這時就可以將要編譯的文件添加到project 中了。3.把文件添加到工程中可以在project-files 里單擊右鍵,選擇需要添加的文件;也可以在編輯窗口中單擊右鍵選擇彈出窗口的“Add To Project”命令。4.編譯源文件在編譯之前特別要注意在Project Options 中選擇與硬件相應(yīng)的芯片。如本次實驗就選擇ATMEGA8515,如圖2 所示。在project 中選擇make project,也可以直接單擊快捷鍵F9,這時要是有錯則會彈出出錯信息,修改調(diào)試正確以后單擊快捷鍵ISP 就可以燒寫到硬件中去了。
標(biāo)簽: ICCAVR
上傳時間: 2013-10-25
上傳用戶:569342831
基于TMS320F2812的數(shù)字頻率計摘 要:采用多周期測量原理,即用標(biāo)準(zhǔn)頻率信號填充整數(shù)個周期的被測信號,從而消除了被測信號±1的計數(shù)誤差,其測量精度僅與門控時間和標(biāo)準(zhǔn)頻率有關(guān),克服傳統(tǒng)的直接測頻或者直接測周法均不能全面滿足高精度要求的缺陷。選用TMS320F2812型號的DSP芯片作為核心處理單元,結(jié)合其高精時鐘和快速運(yùn)算的優(yōu)點,利用其內(nèi)部的事件管理器:捕獲單元,定時/計數(shù)單元,比較單元,脈寬調(diào)制電路PWM,實現(xiàn)高精度的頻率測量,并實現(xiàn)了脈寬和占空比的測量。關(guān)鍵詞:高精度頻率測量; 脈寬; 占空比; 多周期測量原理; 數(shù)字信號處理器
上傳時間: 2014-10-14
上傳用戶:JIEWENYU
AVR 單片機(jī)和C語言的集成開發(fā)環(huán)境 ICCAVR編譯器簡介 ICCAVR是一個綜合了編輯器和工程管理器的集成開發(fā)環(huán)境(IDE),是一個純32位的程序,可在Windows 95/98/ME/NT/2000/XP下運(yùn)行。Ø 源文件全部被組織在工程之中,文件的編輯和工程的構(gòu)筑也在IDE的環(huán)境中完成。編譯錯誤在狀態(tài)窗口中顯示,用鼠標(biāo)單擊編譯錯誤時,光標(biāo)會自動跳轉(zhuǎn)到編輯窗口中引起錯誤的那一行。同時這個工程管理器還能直接產(chǎn)生INTEL HEX格式的燒錄文件和用于AVR Studio調(diào)試的COFF格式的文件。Ø ICCAVR是一個32位的程序,支持長文件名。Ø ICCAVR提供了全部的庫源代碼及一些簡單的應(yīng)用實例供初學(xué)者參考,特別是提供庫源代碼,對于用戶理解庫函數(shù)的參數(shù)及返回值等是非常有益的,并且用戶能夠根據(jù)庫源代碼對ICCAVR提供的庫函數(shù)進(jìn)行剪裁和擴(kuò)充
標(biāo)簽: AVR 單片機(jī) C語言 集成開發(fā)環(huán)境
上傳時間: 2013-10-30
上傳用戶:pkkkkp
MSP430系列單片機(jī)C語言程序設(shè)計與開發(fā)MSP430系列是一個具有明顯技術(shù)特色的單片機(jī)品種。關(guān)于它的硬件特性及匯編語言程序設(shè)計已在《MSP430系列超低功耗16位單片機(jī)的原理與應(yīng)用》及《MSP430系列 FLASH型超低功耗16位單片機(jī)》等書中作了全面介紹。《MSP430系列單片機(jī)C語言程序設(shè)計與開發(fā)》介紹IAR公司為MSP430系列單片機(jī)配備的C程序設(shè)計語言C430。書中敘述了C語言的基本概念、C430的擴(kuò)展特性及C庫函數(shù);對C430的集成開發(fā)環(huán)境的使用及出錯信息作了詳盡的說明;并以MSP430F149為例,對各種應(yīng)用問題及外圍模塊操作提供了典型的C程序例程,供讀者在今后的C430程序設(shè)計中參考。 《MSP430系列單片機(jī)C語言程序設(shè)計與開發(fā)》可以作為高等院校計算機(jī)、自動化及電子技術(shù)類專業(yè)的教學(xué)參考書,也可作為工程技術(shù)人員設(shè)計開發(fā)時的技術(shù)資料。MSP430系列超低功耗16位單片機(jī)的原理與應(yīng)用目錄MSP430系列單片機(jī)C語言程序設(shè)計與開發(fā) 目錄 第1章 C語言基本知識1.1 標(biāo)識符與關(guān)鍵字11.1.1 標(biāo)識符11.1.2 關(guān)鍵字11.2 數(shù)據(jù)基本類型21.2.1 整型數(shù)據(jù)21.2.2 實型數(shù)據(jù)31.2.3 字符型數(shù)據(jù)41.2.4 各種數(shù)據(jù)轉(zhuǎn)換關(guān)系61.3 C語言的運(yùn)算符71.3.1 算術(shù)運(yùn)算符71.3.2 關(guān)系運(yùn)算符和邏輯運(yùn)算符71.3.3 賦值運(yùn)算符81.3.4 逗號運(yùn)算符81.3.5 ? 與 :運(yùn)算符81.3.6 強(qiáng)制轉(zhuǎn)換運(yùn)算符91.3.7 各種運(yùn)算符優(yōu)先級列表91.4 程序設(shè)計的三種基本結(jié)構(gòu)101.4.1 語句的概念101.4.2 順序結(jié)構(gòu)111.4.3 選擇結(jié)構(gòu)121.4.4 循環(huán)結(jié)構(gòu)141.5 函數(shù)181.5.1 函數(shù)定義181.5.2 局部變量與全局變量191.5.3 形式參數(shù)與實際參數(shù)201.5.4 函數(shù)調(diào)用方式201.5.5 函數(shù)嵌套調(diào)用211.5.6 變量的存儲類別221.5.7 內(nèi)部函數(shù)和外部函數(shù)231.6 數(shù)組231.6.1 一維數(shù)組241.6.2 多維數(shù)組241.6.3 字符數(shù)組261.7 指針271.7.1 指針與地址的概念271.7.2 指針變量的定義281.7.3 指針變量的引用281.7.4 數(shù)組的指針281.7.5 函數(shù)的指針301.7.6 指針數(shù)組311.8 結(jié)構(gòu)和聯(lián)合321.8.1 結(jié)構(gòu)定義321.8.2 結(jié)構(gòu)類型變量的定義331.8.3 結(jié)構(gòu)類型變量的初始化341.8.4 結(jié)構(gòu)類型變量的引用341.8.5 聯(lián)合341.9 枚舉361.9.1 枚舉的定義361.9.2 枚舉元素的值371.9. 3 枚舉變量的使用371.10 類型定義381.10.1 類型定義的形式381.10.2 類型定義的使用381.11 位運(yùn)算391.11.1 位運(yùn)算符391.11.2 位域401.12 預(yù)處理功能411.12.1 簡單宏定義和帶參數(shù)宏定義411.12.2 文件包含431.12.3 條件編譯命令44第2章 C430--MSP430系列的C語言2.1 MSP430系列的C語言452.1.1 C430概述452.1.2 C430程序設(shè)計工作流程462.1.3 開始462.1.4 C430程序生成472.2 C430的數(shù)據(jù)表達(dá)482.2.1 數(shù)據(jù)類型482.2.2 編碼效率502.3 C430的配置512.3.1 引言512.3. 2 存儲器分配522.3.3 堆棧體積522.3.4 輸入輸出522.3.5 寄存器的訪問542.3.6 堆體積542.3.7 初始化54第3章 C430的開發(fā)調(diào)試環(huán)境3.1 引言563.1.1 Workbench特性563.1.2 Workbench的內(nèi)嵌編輯器特性563.1.3 C編譯器特性573.1. 4 匯編器特性573.1.5 連接器特性583.1.6 庫管理器特性583.1.7 C?SPY調(diào)試器特性593.2 Workbench概述593.2.1 項目管理模式593.2.2 選項設(shè)置603.2.3 建立項目603.2.4 測試代碼613.2.5 樣本應(yīng)用程序613.3 Workbench的操作623.3.1 開始633.3.2 編譯項目683.3.3 連接項目693.3.4 調(diào)試項目713.3.5 使用Make命令733.4 Workbench的功能匯總753.4.1 Workbench的窗口753.4.2 Workbench的菜單功能813.5 Workbench的內(nèi)嵌編輯器993.5.1 內(nèi)嵌編輯器操作993.5.2 編輯鍵說明993.6 C?SPY概述1013.6.1 C?SPY的C語言級和匯編語言級調(diào)試1013.6.2 程序的執(zhí)行1023.7 C?SPY的操作1033.7.1 程序生成1033.7.2 編譯與連接1033.7.3 C?SPY運(yùn)行1033.7.4 C語言級調(diào)試1043.7.5 匯編級調(diào)試1113.8 C?SPY的功能匯總1133.8.1 C?SPY的窗口1133.8.2 C?SPY的菜單命令功能1203.9 C?SPY的表達(dá)式與宏1323.9.1 匯編語言表達(dá)式1323.9.2 C語言表達(dá)式1333.9.3 C?SPY宏1353.9.4 C?SPY的設(shè)置宏1373.9.5 C?SPY的系統(tǒng)宏137 第4章 C430程序設(shè)計實例4.1 程序設(shè)計與調(diào)試環(huán)境1434.1.1 程序設(shè)計調(diào)試集成環(huán)境1434.1.2 設(shè)備連接1444.1.3 ProF149實驗系統(tǒng)1444.2 數(shù)值計算1454.2.1 C語言表達(dá)式1454.2.2 利用MPY實現(xiàn)運(yùn)算1464.3 循環(huán)結(jié)構(gòu)1474.4 選擇結(jié)構(gòu)1484.5 SFR訪問1494.6 RAM訪問1504.7 FLASH訪問1514.8 WDT操作1534.8. 1 WDT使程序自動復(fù)位1534.8.2 程序?qū)ATCHDOG計數(shù)溢出的控制1544.8.3 WDT的定時器功能1554.9 Timer操作1554.9.1 用Timer產(chǎn)生時鐘信號1554.9.2 用Timer檢測脈沖寬度1564.10 UART操作1574.10.1 點對點通信1574.10.2 點對多點通信1604.11 SPI操作1634.12 比較器操作1654.13 ADC12操作1674.13.1 單通道單次轉(zhuǎn)換1674.13.2 序列通道多次轉(zhuǎn)換1684.14 時鐘模塊操作1704.15 中斷服務(wù)程序1714.16 省電工作模式1754.17 調(diào)用匯編語言子程序1764.17.1 程序舉例1764.17.2 生成C程序調(diào)用的匯編子程序177第5章 C430的擴(kuò)展特性5.1 C430的語言擴(kuò)展概述1785.1.1 擴(kuò)展關(guān)鍵字1785.1.2 #pragma編譯命令1785.1.3 預(yù)定義符號1795.1.4 本征函數(shù)1795.1.5 其他擴(kuò)展特性1795.2 C430的關(guān)鍵字?jǐn)U展1795.2.1 interrupt1805.2.2 monitor1805.2.3 no_init1815.2.4 sfrb1815.2.5 sfrw1825.3 C430的 #pragma編譯命令1825.3.1 bitfields=default1825.3.2 bitfields=reversed1825.3.3 codeseg1835.3.4 function=default1835.3.5 function=interrupt1845.3.6 function=monitor1845.3.7 language=default1845.3.8 language=extended1845.3.9 memory=constseg1855.3.10 memory=dataseg1855.3.11 memory=default1855.3.12 memory=no_init1865.3.13 warnings=default1865.3.14 warnings=off1865.3.15 warnings=on1865.4 C430的預(yù)定義符號1865.4.1 DATE1875.4.2 FILE1875.4.3 IAR_SYSTEMS_ICC1875.4.4 LINE1875.4.5 STDC1875.4.6 TID1875.4.7 TIME1885.4.8 VER1885.5 C430的本征函數(shù)1885.5.1 _args$1885.5.2 _argt$1895.5.3 _BIC_SR1895.5.4 _BIS_SR1905.5.5 _DINT1905.5.6 _EINT1905.5.7 _NOP1905.5.8 _OPC1905.6 C430的匯編語言接口1915.6.1 創(chuàng)建匯編子程序框架1915.6.2 調(diào)用規(guī)則1915.6.3 C程序調(diào)用匯編子程序1935.7 C430的段定義1935.7.1 存儲器分布與段定義1945.7.2 CCSTR段1945.7.3 CDATA0段1945.7.4 CODE段1955.7.5 CONST1955.7.6 CSTACK1955.7.7 CSTR1955.7.8 ECSTR1955.7.9 IDATA01965.7.10 INTVEC1965.7.11 NO_INIT1965.7.12 UDATA0196第6章 C430的庫函數(shù)6.1 引言1976.1.1 庫模塊文件1976.1.2 頭文件1976.1.3 庫定義匯總1976.2C 庫函數(shù)參考2046.2.1 C庫函數(shù)的說明格式2046.2.2 C庫函數(shù)說明204第7章 C430編譯器的診斷消息7.1 編譯診斷消息的類型2307.2 編譯出錯消息2317.3 編譯警告消息243附錄 AMSP430系列FLASH型芯片資料248附錄 BProF149實驗系統(tǒng)251附錄 CMSP430x14x.H文件253附錄 DIAR MSP430 C語言產(chǎn)品介紹275
上傳時間: 2014-05-05
上傳用戶:253189838
有兩種方式可以讓設(shè)備和應(yīng)用程序之間聯(lián)系:1. 通過為設(shè)備創(chuàng)建的一個符號鏈;2. 通過輸出到一個接口WDM驅(qū)動程序建議使用輸出到一個接口而不推薦使用創(chuàng)建符號鏈的方法。這個接口保證PDO的安全,也保證安全地創(chuàng)建一個惟一的、獨(dú)立于語言的訪問設(shè)備的方法。一個應(yīng)用程序使用Win32APIs來調(diào)用設(shè)備。在某個Win32 APIs和設(shè)備對象的分發(fā)函數(shù)之間存在一個映射關(guān)系。獲得對設(shè)備對象訪問的第一步就是打開一個設(shè)備對象的句柄。 用符號鏈打開一個設(shè)備的句柄為了打開一個設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個符號鏈出口,應(yīng)用程序可以用下面這個例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開一個設(shè)備。這個設(shè)備必須有一個符號鏈,以便應(yīng)用程序能夠打開它。有關(guān)細(xì)節(jié)查看有關(guān)Kdevice和CreateLink的內(nèi)容。在上述調(diào)用中第一個參數(shù)中前綴后的部分就是這個符號鏈的名字。注意:CreatFile中的第一個參數(shù)不是Windows 98/2000中驅(qū)動程序(.sys文件)的路徑。是到設(shè)備對象的符號鏈。如果使用DriverWizard產(chǎn)生驅(qū)動程序,它通常使用類KunitizedName來構(gòu)成設(shè)備的符號鏈。這意味著符號鏈名有一個附加的數(shù)字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應(yīng)用程序需要被覆蓋的I/O,第六個參數(shù)(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個輸出接口打開句柄用這種方式打開一個句柄會稍微麻煩一些。DriverWorks庫提供兩個助手類來使獲得對該接口的訪問容易一些,這兩個類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個設(shè)備信息集,該信息集包含了特殊類中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類的一個實例來獲得一個或更多的CdeviceInterface類的實例。CdeviceInterface類是一個單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個路徑名的指針,該指針可以在CreateFile中使用來打開設(shè)備。下面用一個小例子來顯示這些類最基本的使用方法: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)用程序獲得一個有效的設(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)建一個新的文件對象。這使得多個句柄可以映射同一個文件對象。當(dāng)這個文件對象的最后一個用戶級句柄被撤銷后,I/O管理器調(diào)用CleanUp。當(dāng)沒有任何用戶級和核心級的對文件對象的訪問的時候,I/O管理器調(diào)用Close。如果被打開的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯誤(無效功能)。以前為Windows95編寫的VxD的應(yīng)用程序代碼中可能會在打開設(shè)備的時候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個屬性,因為它將導(dǎo)致沒有特權(quán)的用戶企圖打開這個設(shè)備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數(shù)轉(zhuǎn)換成IRP域的方法依賴于設(shè)備對象的屬性。當(dāng)設(shè)備設(shè)置DO_DIRECT_IO標(biāo)志,I/O管理器將buff鎖住在存儲器中,并且創(chuàng)建了一個存儲在IRP中的MDL域。一個設(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ù)。然而,存儲區(qū)并沒有被鎖住而且地址只對調(diào)用進(jìn)程有效。驅(qū)動程序可以使用KIrp::UserBuffer來存取IRP域。對于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴于特殊的I/O控制代碼,它不在設(shè)備對象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構(gòu)造控制代碼。這個宏的其中一個參數(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)分配一個單一的緩沖來作為輸入與輸出。驅(qū)動程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動程序通過調(diào)用KIrp::IoctlBuffer獲得緩沖地址。在完成時,I/O管理器從系統(tǒng)緩沖拷貝數(shù)據(jù)到提供給Ring 3級調(diào)用者使用的緩沖中。驅(qū)動程序必須在結(jié)束前存儲拷貝到IRP的Information成員中的數(shù)據(jù)個數(shù)。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數(shù)呈現(xiàn)不同的含義。參數(shù)InputBuffer被拷貝到一個系統(tǒng)緩沖,這個緩沖驅(qū)動程序可以通過調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對象,驅(qū)動程序?qū)@個對象的訪問通過調(diào)用KIrp::Mdl來實現(xiàn)。對于METHOD_OUT_DIRECT,調(diào)用者必須有對緩沖的寫訪問權(quán)限。注意,對METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會做映射來配置緩沖。虛擬地址只對調(diào)用進(jìn)程有效。這里是一個用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現(xiàn)在使用一個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ū)動程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設(shè)備拷貝串到里面并將拷貝的資結(jié)束設(shè)置到FirmwareRevSize中。在驅(qū)動程序中,代碼看起來如下所示: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ū)動程序 應(yīng)用程序 接口
上傳時間: 2013-10-17
上傳用戶:gai928943
ICCAVR中文使用說明:ICCAVR 介紹1 ImageCraft 的ICCAVR 介紹ImageCraft 的ICCAVR 是一種使用符合ANSI 標(biāo)準(zhǔn)的C 語言來開發(fā)微控制器MCU程序的一個工具它有以下幾個主要特點ICCAVR 是一個綜合了編輯器和工程管理器的集成工作環(huán)境IDE 其可在WINDOWS9X/NT 下工作源文件全部被組織到工程之中文件的編輯和工程的構(gòu)筑也在這個環(huán)境中完成編譯錯誤顯示在狀態(tài)窗口中并且當(dāng)你用鼠標(biāo)單擊編譯錯誤時光標(biāo)會自動跳轉(zhuǎn)到編輯窗口中引起錯誤的那一行這個工程管理器還能直接產(chǎn)生您希望得到的可以直接使用的INTELHEX 格式文件INTEL HEX 格式文件可被大多數(shù)的編程器所支持用于下載程序到芯片中去ICCAVR 是一個32 位的程序支持長文件名出于篇幅考慮本說明書并不介紹通用的C 語言語法知識僅介紹使用ICC AVR 所必須具備的知識因此要求讀者在閱讀本說明書之前應(yīng)對C 語言有了一定程度的理解2 ICCAVR 中的文件類型及其擴(kuò)展名文件類型是由它們的擴(kuò)展名決定的IDE 和編譯器可以使用以下幾種類型的文件輸入文件.c 擴(kuò)展名----表示是C 語言源文件.s 擴(kuò)展名----表示是匯編語言源文件.h 擴(kuò)展名----表示是C 語言的頭文件.prj 擴(kuò)展名----表示是工程文件這個文件保存由IDE 所創(chuàng)建和修改的一個工程的有關(guān)信息.a 擴(kuò)展名----庫文件它可以由幾個庫封裝在一起libcavr.a 是一個包含了標(biāo)準(zhǔn)C 的庫和AVR 特殊程序調(diào)用的基本庫如果庫被引用鏈接器會將其鏈接到您的模塊或文件中您也可以創(chuàng)建或修改一個符合你需要的庫輸出文件.s 對應(yīng)每個C 語言源文件由編譯器在編譯時產(chǎn)生的匯編輸出文件.o 由匯編文件匯編產(chǎn)生的目標(biāo)文件多個目標(biāo)文件可以鏈接成一個可執(zhí)行文件.hex INTEL HEX 格式文件其中包含了程序的機(jī)器代碼.eep INTEL HEX 格式文件包含了EEPROM 的初始化數(shù)據(jù).cof COFF 格式輸出文件用于在ATMEL 的AvrStudio 環(huán)境下進(jìn)行程序調(diào)試.lst 列表文件在這個文件中列舉出了目標(biāo)代碼對應(yīng)的最終地址.mp 內(nèi)存映象文件它包含了您程序中有關(guān)符號及其所占內(nèi)存大小的信息.cmd NoICE 2.xx 調(diào)試命令文件.noi NoICE 3.xx 調(diào)試命令文件.dbg ImageCraft 調(diào)試命令文件
上傳時間: 2013-10-29
上傳用戶:truth12
TMS320LF240x DSP 課件
標(biāo)簽: 管理器
上傳時間: 2013-11-04
上傳用戶:王成林。
載波相移正弦脈寬調(diào)制(SPWM)技術(shù)是一種適用于大功率電力開關(guān)變換裝置的高性能開關(guān)調(diào)制策略,在有源電力濾波器中有良好的應(yīng)用前景。本文介紹了如何利用高性能數(shù)字信號處理器TMS320F28335的片內(nèi)外設(shè)事件管理器(EV)模塊產(chǎn)生三相SPWM波,給出了程序流程圖及關(guān)鍵程序源碼。該方法采用不對稱規(guī)則采樣算法,參數(shù)計算主要采用查表法,計算量小,實時性高。在工程實踐中表明,該方法既能滿足控制精度要求,又能滿足實時性要求,可以很好地控制逆變電源的輸出。
標(biāo)簽: F28335 28335 SPWM 320F
上傳時間: 2013-11-05
上傳用戶:tzrdcaabb
蟲蟲下載站版權(quán)所有 京ICP備2021023401號-1