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

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

禪道;項(xiàng)目管理

  • keil c51 v9.01 (C51單片機(jī)開發(fā)工具Kei

    keil c51 v9.01此版不是漢化中文版,是英文版來的。ARM發(fā)布Keil μVision4集成開發(fā)環(huán)境(IDE),用來在微控制器和智能卡設(shè)備上創(chuàng)建、仿真和調(diào)試嵌入式應(yīng)用。 μVision4 IDE是為增強(qiáng)開發(fā)人員的工作效率設(shè)計(jì)的,有了它可以更快速、更高效地開發(fā)和檢驗(yàn)程序。通過μVision4 IDE中引入的靈活的窗口管理系統(tǒng),開發(fā)人員可以使用多臺監(jiān)視器,在可視界面任何地方全面控制窗口放置。 新用戶界面可以更好地利用屏幕空間,更有效地組織多個(gè)窗口,為開發(fā)應(yīng)用提供整齊高效的環(huán)境。 μVision4在μVision3的成功經(jīng)驗(yàn)的基礎(chǔ)上增加了:* System Viewer (系統(tǒng)查看程序)窗口,提供了設(shè)備外圍寄存器信息,這些信息可以在System Viewer窗口內(nèi)部直接更改。* Debug Restore Views (調(diào)試恢復(fù)視圖)允許保存多個(gè)窗口布局,為程序分析迅速選擇最適合的調(diào)試視圖。* Multi-Project Workspace(多項(xiàng)目工作空間)為處理多個(gè)并存的項(xiàng)目提供了簡化的方法,如引導(dǎo)加載程序和應(yīng)用程序。* 為基于ARM Cortex 處理器的MCU提供了Data and instruction trace(數(shù)據(jù)和指令追蹤)功能。* 擴(kuò)展了Device Simulation(設(shè)備仿真)功能以支持許多新設(shè)備,如Luminary、NXP和東芝生產(chǎn)的基于ARM Cortex-M3處理器的MCU;Atmel SAM7/9;及新的8051衍生品,如Infineon XC88x和SiLABS 8051Fxx。* 支持許多debug adapter interfaces(調(diào)試適配器接口),包括ADI miDAS Link、Atmel SAM-ICE、Infineon DAS和ST-Link。

    標(biāo)簽: keil 9.01 c51 C51

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

    上傳用戶:qingdou

  • ICCAVR 入門

    ICCAVR簡介ICCAVR 是一種使用ANSI 標(biāo)準(zhǔn)C 語言來開發(fā)微控制器(MCU)程序的一個(gè)工具,它是一個(gè)綜合了編輯器和工程管理器的集成工作環(huán)境(IDE)。源文件全部被組織到工程之中,文件的編輯和工程(project)的構(gòu)筑也在IDE 的環(huán)境中完成。編譯錯(cuò)誤在狀態(tài)窗口中顯示,用鼠標(biāo)單擊編譯錯(cuò)誤時(shí),光標(biāo)會(huì)自動(dòng)跳轉(zhuǎn)到出錯(cuò)行。這個(gè)工程管理器還能直接產(chǎn)生INTEL HEX格式的燒寫文件和可以在AVR Studio 中調(diào)試的COFF 格式的調(diào)試文件。這里特別要提一下ICCAVR 中的應(yīng)用構(gòu)筑向?qū)В梢栽赥ools 欄中選擇“ApplicationBiulder”或者直接點(diǎn)擊快捷工具欄中的“Application Biulder”圖標(biāo),就可以打開應(yīng)用構(gòu)筑向?qū)υ捒颍梢愿鶕?jù)需要設(shè)定芯片種類,各個(gè)端口初始值,是否使用定時(shí)器,中斷,UART等,選好以后單擊“OK”就可以得到所需的硬件初始化程序段,非常可靠而且方便。圖1給出了初始化UART 的一個(gè)例子:下面介紹一下創(chuàng)建并編譯一個(gè)工程文件的簡要步驟:1.新建一個(gè)源文件從file 菜單中選擇new,創(chuàng)建一個(gè)新文件,在改文件中輸入源程序并進(jìn)行編輯和修改,然后存盤,在存盤時(shí)必須指定文件類型,如命名為:try.c 。寫一個(gè)新文件的步驟:首先用Biulder 初始化需要用到的硬件資源,生成初始化程序,然后再寫需要的代碼實(shí)現(xiàn)所要的功能。2.新建一個(gè)project從projrct 菜單中選擇new 命令,IDE 會(huì)彈出一個(gè)對話框,在對話框中用戶可以指定工程存放的文件夾和工程的名稱。在建立一個(gè)新工程之后,在工程管理器的窗口會(huì)出現(xiàn)三個(gè)子目錄,F(xiàn)iles, Headers, Documents,這時(shí)就可以將要編譯的文件添加到project 中了。3.把文件添加到工程中可以在project-files 里單擊右鍵,選擇需要添加的文件;也可以在編輯窗口中單擊右鍵選擇彈出窗口的“Add To Project”命令。4.編譯源文件在編譯之前特別要注意在Project Options 中選擇與硬件相應(yīng)的芯片。如本次實(shí)驗(yàn)就選擇ATMEGA8515,如圖2 所示。在project 中選擇make project,也可以直接單擊快捷鍵F9,這時(shí)要是有錯(cuò)則會(huì)彈出出錯(cuò)信息,修改調(diào)試正確以后單擊快捷鍵ISP 就可以燒寫到硬件中去了。

    標(biāo)簽: ICCAVR

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

    上傳用戶:569342831

  • C8051F單片機(jī)

    C8051F單片機(jī) C8051F系列單片機(jī)  單片機(jī)自20世紀(jì)70年代末誕生至今,經(jīng)歷了單片微型計(jì)算機(jī)SCM、微控制器MCU及片上系統(tǒng)SoC三大階段,前兩個(gè)階段分別以MCS-51和80C51為代表。隨著在嵌入式領(lǐng)域中對單片機(jī)的性能和功能要求越來越高,以往的單片機(jī)無論是運(yùn)行速度還是系統(tǒng)集成度等多方面都不能滿足新的設(shè)計(jì)需要,這時(shí)Silicon  Labs 公司推出了C8051F系列單片機(jī),成為SoC的典型代表。   C8051F具有上手快(全兼容8051指令集)、研發(fā)快(開發(fā)工具易用,可縮短研發(fā)周期)和見效快(調(diào)試手段靈活)的特點(diǎn),其性能優(yōu)勢具體體現(xiàn)在以下方面:  基于增強(qiáng)的CIP-51內(nèi)核,其指令集與MCS-51完全兼容,具有標(biāo)準(zhǔn)8051的組織架構(gòu),可以使用標(biāo)準(zhǔn)的803x/805x匯編器和編譯器進(jìn)行軟件開發(fā)。CIP-51采用流水線結(jié)構(gòu),70%的的指令執(zhí)行時(shí)間為1或2個(gè)系統(tǒng)時(shí)鐘周期,是標(biāo)準(zhǔn)8051指令執(zhí)行速度的12倍;其峰值執(zhí)行速度可達(dá)100MIPS(C8051F120等),是目前世界上速度最快的8位單片機(jī)。  增加了中斷源。標(biāo)準(zhǔn)的8051只有7個(gè)中斷源Silicon  Labs 公司 C8051F系列單片機(jī)擴(kuò)展了中斷處理這對于時(shí)實(shí)多任務(wù)系統(tǒng)的處理是很重要的擴(kuò)展的中斷系統(tǒng)向CIP-51提供22個(gè)中斷源允許大量的模擬和數(shù)字外設(shè)中斷一個(gè)中斷處理需要較少的CPU干預(yù)卻有更高的執(zhí)行效率。  集成了豐富的模擬資源,絕大部分的C8051F系列單片機(jī)都集成了單個(gè)或兩個(gè)ADC,在片內(nèi)模擬開關(guān)的作用下可實(shí)現(xiàn)對多路模擬信號的采集轉(zhuǎn)換;片內(nèi)ADC的采樣精度最高可達(dá)24bit,采樣速率最高可達(dá)500ksps,部分型號還集成了單個(gè)或兩個(gè)獨(dú)立的高分辨率DAC,可滿足絕大多數(shù)混合信號系統(tǒng)的應(yīng)用并實(shí)現(xiàn)與模擬電子系統(tǒng)的無縫接口;片內(nèi)溫度傳感器則可以迅速而精確的監(jiān)測環(huán)境溫度并通過程序作出相應(yīng)處理,提高了系統(tǒng)運(yùn)行的可靠性。  集成了豐富的外部設(shè)備接口。具有兩路UART和最多可達(dá)5個(gè)定時(shí)器及6個(gè)PCA模塊,此外還根據(jù)不同的需要集成了SMBus、SPI、USB、CAN、LIN等接口,以及RTC部件。外設(shè)接口在不使用時(shí)可以分別禁止以降低系統(tǒng)功耗。與其他類型的單片機(jī)實(shí)現(xiàn)相同的功能需要多個(gè)芯片的組合才能完成相比,C8051單片機(jī)不僅減少了系統(tǒng)成本,更大大降低了功耗。  增強(qiáng)了在信號處理方面的性能,部分型號具有16x16 MAC以及DMA功能,可對所采集信號進(jìn)行實(shí)時(shí)有效的算法處理并提高了數(shù)據(jù)傳送能力。  具有獨(dú)立的片內(nèi)時(shí)鐘源(精度最高可達(dá)0.5%),設(shè)計(jì)人員既可選擇外接時(shí)鐘,也可直接應(yīng)用片內(nèi)時(shí)鐘,同時(shí)可以在內(nèi)外時(shí)鐘源之間自如切換。片內(nèi)時(shí)鐘源降低了系統(tǒng)設(shè)計(jì)的復(fù)雜度,提高了系統(tǒng)可靠性,而時(shí)鐘切換功能則有利于系統(tǒng)整體功耗的降低。  提供空閑模式及停機(jī)模式等多種電源管理方式來降低系統(tǒng)功耗  實(shí)現(xiàn)了I/O從固定方式到交叉開關(guān)配置。固定方式的I/O端口,既占用引腳多,配置又不夠靈活。在C8051F中,則采用開關(guān)網(wǎng)絡(luò)以硬件方式實(shí)現(xiàn)I/O端口的靈活配置,外設(shè)電路單元通過相應(yīng)的配置寄存器控制的交叉開關(guān)配置到所選擇的端口上。  復(fù)位方式多樣化,C8051F把80C51單一的外部復(fù)位發(fā)展成多源復(fù)位,提供了上電復(fù)位、掉電復(fù)位、外部引腳復(fù)位、軟件復(fù)位、時(shí)鐘檢測復(fù)位、比較器0復(fù)位、WDT復(fù)位和引腳配置復(fù)位。眾多的復(fù)位源為保障系統(tǒng)的安全、操作的靈活性以及零功耗系統(tǒng)設(shè)計(jì)帶來極大的好處。  從傳統(tǒng)的仿真調(diào)試到基于JTAG接口的在系統(tǒng)調(diào)試。C8051F在8位單片機(jī)中率先配置了標(biāo)準(zhǔn)的JTAG接口(IEEE1149.1)。C8051F的JTAG接口不僅支持Flash ROM的讀/寫操作及非侵入式在系統(tǒng)調(diào)試,它的JTAG邏輯還為在系統(tǒng)測試提供邊界掃描功能。通過邊界寄存器的編程控制,可對所有器件引腳、SFR總線和I/O口弱上拉功能實(shí)現(xiàn)觀察和控制。  C8051F系列單片機(jī)型號齊全,可根據(jù)設(shè)計(jì)需求選擇不同規(guī)模和帶有特定外設(shè)接口的型號,提供從多達(dá)100個(gè)引腳的高性能單片機(jī)到最小3mmX3mm的封裝,滿足不同設(shè)計(jì)的需要。  基于上述特點(diǎn),Silicon  Labs 公司C8051F系列單片機(jī)作為SoC芯片的杰出代表能夠滿足絕大部分場合的復(fù)雜功能要求,并在嵌入式領(lǐng)域的各個(gè)場合都得到了廣泛的應(yīng)用:在工業(yè)控制領(lǐng)域,其豐富的模擬資源可用于工業(yè)現(xiàn)場多種物理量的監(jiān)測、分析及控制和顯示;在便攜式儀器領(lǐng)域,其低功耗和強(qiáng)大的外設(shè)接口也非常適合各種信號的采集、存儲和傳輸;此外,新型的C8051F5xx系列單片機(jī)也在汽車電子行業(yè)中嶄露頭角。正是這些優(yōu)勢,使得C8051單片機(jī)在進(jìn)入中國市場的短短幾年內(nèi)就迅速風(fēng)靡,相信隨著新型號的不斷推出以及推廣力度的不斷加大,C8051系列單片機(jī)將迎來日益廣闊的發(fā)展空間,成為嵌入式領(lǐng)域的時(shí)代寵兒  此系列單片機(jī)完全兼容MCS-51指令集,容易上手,開發(fā)周期短,大大節(jié)約了開發(fā)成本。C8051F系統(tǒng)集成度高,總線時(shí)鐘可達(dá)25M

    標(biāo)簽: C8051F 單片機(jī)

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

    上傳用戶:testAPP

  • 單片機(jī)串行通信發(fā)射機(jī)

    單片機(jī)串行通信發(fā)射機(jī) 我所做的單片機(jī)串行通信發(fā)射機(jī)主要在實(shí)驗(yàn)室完成,參考有關(guān)的書籍和資料,個(gè)人完成電路的設(shè)計(jì)、焊接、檢查、調(diào)試,再根據(jù)自己的硬件和通信協(xié)議用匯編語言編寫發(fā)射和顯示程序,然后加電調(diào)試,最終達(dá)到準(zhǔn)確無誤的發(fā)射和顯示。在這過程中需要選擇適當(dāng)?shù)脑侠淼碾娐穲D扎實(shí)的焊接技術(shù),基本的故障排除和糾正能力,會(huì)使用基本的儀器對硬件進(jìn)行調(diào)試,會(huì)熟練的運(yùn)用匯編語言編寫程序,會(huì)用相關(guān)的軟件對自己的程序進(jìn)行翻譯,并燒進(jìn)芯片中,要與對方接收機(jī)統(tǒng)一通信協(xié)議,要耐心的反復(fù)檢查、修改和調(diào)試,直到達(dá)到預(yù)期目的。單片機(jī)串行通信發(fā)射機(jī)采用串行工作方式,發(fā)射并顯示兩位數(shù)字信息,既顯示00-99,使數(shù)據(jù)能夠在不同地方傳遞。硬件部分主要分兩大塊,由AT89C51和多個(gè)按鍵組成的控制模塊,包括時(shí)鐘電路、控制信號電路,時(shí)鐘采用6MHZ晶振和30pF的電容來組成內(nèi)部時(shí)鐘方式,控制信號用手動(dòng)開關(guān)來控制,P1口來控制,P2、P3口產(chǎn)生信號并通過共陽極數(shù)碼管來顯示,軟件采用匯編語言來編寫,發(fā)射程序在通信協(xié)議一致的情況下完成數(shù)據(jù)的發(fā)射,同時(shí)顯示程序?qū)Πl(fā)射的數(shù)據(jù)加以顯示。畢業(yè)設(shè)計(jì)的目的是了解基本電路設(shè)計(jì)的流程,豐富自己的知識和理論,鞏固所學(xué)的知識,提高自己的動(dòng)手能力和實(shí)驗(yàn)?zāi)芰Γ瑥亩邆湟欢ǖ脑O(shè)計(jì)能力。我做得的畢業(yè)設(shè)計(jì)注重于對單片機(jī)串行發(fā)射的理論的理解,明白發(fā)射機(jī)的工作原理,以便以后單片機(jī)領(lǐng)域的開發(fā)和研制打下基礎(chǔ),提高自己的設(shè)計(jì)能力,培養(yǎng)創(chuàng)新能力,豐富自己的知識理論,做到理論和實(shí)際結(jié)合。本課題的重要意義還在于能在進(jìn)一步層次了解單片機(jī)的工作原理,內(nèi)部結(jié)構(gòu)和工作狀態(tài)。理解單片機(jī)的接口技術(shù),中斷技術(shù),存儲方式,時(shí)鐘方式和控制方式,這樣才能更好的利用單片機(jī)來做有效的設(shè)計(jì)。我的畢業(yè)設(shè)計(jì)分為兩個(gè)部分,硬件部分和軟件部分。硬件部分介紹:單片機(jī)串行通信發(fā)射機(jī)電路的設(shè)計(jì),單片機(jī)AT89C51的功能和其在電路的作用。介紹了AT89C51的管腳結(jié)構(gòu)和每個(gè)管腳的作用及各自的連接方法。AT89C51 與MCS-51 兼容,4K字節(jié)可編程閃爍存儲器,壽命:1000次可擦,數(shù)據(jù)保存10年,全靜態(tài)工作:0HZ-24HZ,三級程序存儲器鎖定,128*8 位內(nèi)部RAM,32 跟可編程I/O 線,兩個(gè)16 位定時(shí)/計(jì)數(shù)器,5 個(gè)中斷源,5 個(gè)可編程串行通道,低功耗的閑置和掉電模式,片內(nèi)震蕩和時(shí)鐘電路,P0和P1 可作為串行輸入口,P3口因?yàn)槠涔苣_有特殊功能,可連接其他電路。例如P3.0RXD 作為串行輸出口,其中時(shí)鐘電路采用內(nèi)時(shí)鐘工作方式,控制信號采用手動(dòng)控制。數(shù)據(jù)的傳輸方式分為單工、半雙工、全雙工和多工工作方式;串行通信有兩種形式,異步和同步通信。介紹了串行串行口控制寄存器,電源管理寄存器PCON,中斷允許寄存器IE,還介紹了數(shù)碼顯示管的工作方式、組成,共陽極和共陰極數(shù)碼顯示管的電路組成,有動(dòng)態(tài)和靜態(tài)顯示兩種方式,說明了不同顯示方法與單片機(jī)的連接。再后來還介紹了硬件的焊接過程,及在焊接時(shí)遇到的問題和應(yīng)該注意的方面。硬件焊接好后的檢查電路、不裝芯片上電檢查及上電裝芯片檢查。軟件部分:在了解電路設(shè)計(jì)原理后,根據(jù)原理和目的畫出電路流程圖,列出數(shù)碼顯示的斷碼表,計(jì)算波特率,設(shè)置串行口,在與接受機(jī)設(shè)置相同的通信協(xié)議的基礎(chǔ)上編寫顯示和發(fā)射程序。編寫完程序還要進(jìn)行編譯,這就必須會(huì)使用編譯軟件。介紹了編譯軟件的使用和使用過程中遇到的問題,及在編譯后燒入芯片使用的軟件PLDA,后來的加電調(diào)試,及遇到的問題,在沒問題后與接受機(jī)連接,發(fā)射數(shù)據(jù),直到對方準(zhǔn)確接收到。在軟件調(diào)試過程中將詳細(xì)介紹調(diào)試遇到的問題,例如:通信協(xié)議是否相同,數(shù)碼管是否與芯片連接對應(yīng),計(jì)數(shù)器是否開始計(jì)數(shù)等。

    標(biāo)簽: 單片機(jī) 串行通信 發(fā)射機(jī)

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

    上傳用戶:uuuuuuu

  • ARM處理器的工作模式

    ARM處理器的工作模式 ARM處理器狀態(tài)    ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:第一種為ARM狀態(tài),此時(shí)處理器執(zhí)行32位的字對齊的ARM指令;第二種為Thumb狀態(tài),此時(shí)處理器執(zhí)行16位的、半字對齊的Thumb指令。在程序的執(zhí)行過程中,微處理器可以隨時(shí)在兩種工作狀態(tài)之間切換,并且,處理器工作狀態(tài)的轉(zhuǎn)變并不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。但ARM微處理器在開始執(zhí)行代碼時(shí),應(yīng)該處于ARM狀態(tài)。  ARM處理器狀態(tài)    進(jìn)入Thumb狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位(位0)為1時(shí),可以采用執(zhí)行BX指令的方法,使微處理器從ARM狀態(tài)切換到Thumb狀態(tài)。此外,當(dāng)處理器處于Thumb狀態(tài)時(shí)發(fā)生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時(shí),自動(dòng)切換到Thumb狀態(tài)。    進(jìn)入ARM狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位為0時(shí),執(zhí)行BX指令時(shí)可以使微處理器從Thumb狀態(tài)切換到ARM狀態(tài)。此外,在處理器進(jìn)行異常處理時(shí),把PC指針放入異常模式鏈接寄存器中,并從異常向量地址開始執(zhí)行程序,也可以使處理器切換到ARM狀態(tài)。ARM處理器模式    ARM微處理器支持7種運(yùn)行模式,分別為:用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)。快速中斷模式(fiq):用于高速數(shù)據(jù)傳輸或通道處理。外部中斷模式(irq):用于通用的中斷處理。管理模式(svc):操作系統(tǒng)使用的保護(hù)模式。數(shù)據(jù)訪問終止模式(abt):當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲及存儲保護(hù)。系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。定義指令中止模式(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。ARM處理器模式    ARM微處理器的運(yùn)行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用戶模式下時(shí),某些被保護(hù)的系統(tǒng)資源是不能被訪問的。    除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權(quán)模式;其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式,常用于處理中斷或異常,以及需要訪問受保護(hù)的系統(tǒng)資源等情況。ARM寄存器    ARM處理器共有37個(gè)寄存器。其中包括:31個(gè)通用寄存器,包括程序計(jì)數(shù)器(PC)在內(nèi)。這些寄存器都是32位寄存器。以及6個(gè)32位狀態(tài)寄存器。 關(guān)于寄存器這里就不詳細(xì)介紹了,有興趣的人可以上網(wǎng)找找,很多這方面的資料。異常處理    當(dāng)正常的程序執(zhí)行流程發(fā)生暫時(shí)的停止時(shí),稱之為異常,例如處理一個(gè)外部的中斷請求。在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行。處理器允許多個(gè)異常同時(shí)發(fā)生,它們將會(huì)按固定的優(yōu)先級進(jìn)行處理。當(dāng)一個(gè)異常出現(xiàn)以后,ARM微處理器會(huì)執(zhí)行以下幾步操作:進(jìn)入異常處理的基本步驟:將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時(shí)能從正確的位置重新開始執(zhí)行。將CPSR復(fù)制到相應(yīng)的SPSR中。根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。如果異常發(fā)生時(shí),處理器處于Thumb狀態(tài),則當(dāng)異常向量地址加載入PC時(shí),處理器自動(dòng)切換到ARM狀態(tài)。 ARM微處理器對異常的響應(yīng)過程用偽碼可以描述為: R14_ = Return LinkSPSR_= CPSRCPSR[4:0] = Exception Mode NumberCPSR[5] = 0 ;當(dāng)運(yùn)行于 ARM 工作狀態(tài)時(shí)If == Reset or FIQ then;當(dāng)響應(yīng) FIQ 異常時(shí),禁止新的 FIQ 異常CPSR[6] = 1PSR[7] = 1PC = Exception Vector Address異常處理完畢之后,ARM微處理器會(huì)執(zhí)行以下幾步操作從異常返回:將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。將SPSR復(fù)制回CPSR中。若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除。

    標(biāo)簽: ARM 處理器 工作模式

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

    上傳用戶:hanbeidang

  • 基于單片機(jī)和VFP9.0的IC卡管理系統(tǒng)設(shè)計(jì)

    針對目前主流的Philips 公司Mifare1 卡,提出了一套基于單片機(jī)和VFP9.0 的IC卡管理系統(tǒng)設(shè)計(jì)方案,給出了整體設(shè)計(jì)及編程思路,并對其中的技術(shù)細(xì)節(jié)做了詳細(xì)說明。

    標(biāo)簽: VFP 9.0 單片機(jī) IC卡

    上傳時(shí)間: 2013-12-28

    上傳用戶:chaisz

  • MSP430系列單片機(jī)C語言程序設(shè)計(jì)與開發(fā)

    MSP430系列單片機(jī)C語言程序設(shè)計(jì)與開發(fā)MSP430系列是一個(gè)具有明顯技術(shù)特色的單片機(jī)品種。關(guān)于它的硬件特性及匯編語言程序設(shè)計(jì)已在《MSP430系列超低功耗16位單片機(jī)的原理與應(yīng)用》及《MSP430系列 FLASH型超低功耗16位單片機(jī)》等書中作了全面介紹。《MSP430系列單片機(jī)C語言程序設(shè)計(jì)與開發(fā)》介紹IAR公司為MSP430系列單片機(jī)配備的C程序設(shè)計(jì)語言C430。書中敘述了C語言的基本概念、C430的擴(kuò)展特性及C庫函數(shù);對C430的集成開發(fā)環(huán)境的使用及出錯(cuò)信息作了詳盡的說明;并以MSP430F149為例,對各種應(yīng)用問題及外圍模塊操作提供了典型的C程序例程,供讀者在今后的C430程序設(shè)計(jì)中參考。   《MSP430系列單片機(jī)C語言程序設(shè)計(jì)與開發(fā)》可以作為高等院校計(jì)算機(jī)、自動(dòng)化及電子技術(shù)類專業(yè)的教學(xué)參考書,也可作為工程技術(shù)人員設(shè)計(jì)開發(fā)時(shí)的技術(shù)資料。MSP430系列超低功耗16位單片機(jī)的原理與應(yīng)用目錄MSP430系列單片機(jī)C語言程序設(shè)計(jì)與開發(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í)型數(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è)計(jì)的三種基本結(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í)際參數(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è)計(jì)工作流程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 項(xiàng)目管理模式593.2.2 選項(xiàng)設(shè)置603.2.3 建立項(xiàng)目603.2.4 測試代碼613.2.5 樣本應(yīng)用程序613.3 Workbench的操作623.3.1 開始633.3.2 編譯項(xiàng)目683.3.3 連接項(xiàng)目693.3.4 調(diào)試項(xiàng)目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è)計(jì)實(shí)例4.1 程序設(shè)計(jì)與調(diào)試環(huán)境1434.1.1 程序設(shè)計(jì)調(diào)試集成環(huán)境1434.1.2 設(shè)備連接1444.1.3 ProF149實(shí)驗(yàn)系統(tǒng)1444.2 數(shù)值計(jì)算1454.2.1 C語言表達(dá)式1454.2.2 利用MPY實(shí)現(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使程序自動(dòng)復(fù)位1534.8.2 程序?qū)ATCHDOG計(jì)數(shù)溢出的控制1544.8.3 WDT的定時(shí)器功能1554.9 Timer操作1554.9.1 用Timer產(chǎn)生時(shí)鐘信號1554.9.2 用Timer檢測脈沖寬度1564.10 UART操作1574.10.1 點(diǎn)對點(diǎn)通信1574.10.2 點(diǎn)對多點(diǎn)通信1604.11 SPI操作1634.12 比較器操作1654.13 ADC12操作1674.13.1 單通道單次轉(zhuǎn)換1674.13.2 序列通道多次轉(zhuǎn)換1684.14 時(shí)鐘模塊操作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 編譯出錯(cuò)消息2317.3 編譯警告消息243附錄 AMSP430系列FLASH型芯片資料248附錄 BProF149實(shí)驗(yàn)系統(tǒng)251附錄 CMSP430x14x.H文件253附錄 DIAR MSP430 C語言產(chǎn)品介紹275

    標(biāo)簽: MSP 430 C語言 單片機(jī)

    上傳時(shí)間: 2014-05-05

    上傳用戶:253189838

  • 基于PIC單片機(jī)的低功耗讀卡器硬件設(shè)計(jì)

    基于PIC單片機(jī)的低功耗讀卡器硬件設(shè)計(jì):本文提出了一個(gè)完整的基于串口的智能讀卡器子系統(tǒng)設(shè)計(jì)方案并將其實(shí)現(xiàn)。讀卡器的設(shè)計(jì)突出了小型化的要求,全部器件使用貼片封裝。為了減小讀卡器的體積,設(shè)計(jì)中還使用了串口竊電的技術(shù),使用串口信號線直接給讀卡器供電。為此,讀卡器使用了省電的設(shè)計(jì),采用了省電的集成電路,并大膽簡化了許多傳統(tǒng)的設(shè)計(jì)電路。關(guān)鍵字: 讀卡器, 單片機(jī), 串口竊電 Abstract: This paper aims to put forward a complete design of Smart IC card reader based onSerial Port and propose the way of realizing it for the purpose of Network Security. SMD isadopted to make Smart IC reader smaller in this design. To reduce the volume of Smart ICreader, Serial Port powered technology is employed to get power from the signal line of Serial Port. For this reason, low-power consumption components are adopted in the design and some traditional designs are simplified to reduce the power consumption.Keywords: Card Reader; Single-chip Computer; Serial Port Powered IC 卡系統(tǒng)保存了加密算法所需要的工作密鑰,供加密算法對網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)加密使用,是整個(gè)系統(tǒng)網(wǎng)絡(luò)安全的核心。在IC 卡子系統(tǒng)中,讀卡器是一個(gè)重要的部分。它起著管理IC卡、在IC 卡和PC或網(wǎng)絡(luò)計(jì)算機(jī)間傳遞數(shù)據(jù)的重要作用。本文以一片PIC單片機(jī)為核心完成了基于RS232 串口的讀卡器的硬件設(shè)計(jì)。

    標(biāo)簽: PIC 單片機(jī) 低功耗 讀卡器

    上傳時(shí)間: 2014-04-14

    上傳用戶:wanghui2438

  • 多功能高集成外圍器件

     多功能高集成外圍器件6. 1  多功能高集成外圍器件82371PCI的英文名稱:Peripheral Component Interconnect (外圍部件互聯(lián)PCI總線);82371是PCI總線組件。ISA是:Industry Standard Architecture(工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu))IDE是 (Integrated Device Electronics)集成電路設(shè)備簡稱PIIX4PIIX4器件(芯片)的特點(diǎn)1、是一種支持Pentium和PentiumII微處理器的部件。2、82371對ISA橋來說,是一種多功能PCI總線。3、對可移動(dòng)性和桌面深綠色環(huán)境均提供支持。4、電源管理邏輯。5、被集成化的IDE控制器。6、增強(qiáng)了性能的DMA控制器。 (7)基于兩個(gè)82C59的中斷控制器。(8)基于82C54芯片的定時(shí)器。(9)USB(Universal Serial Bus)通用串行總線。(10)SMBus系統(tǒng)管理總線。(11)實(shí)時(shí)時(shí)鐘(12)順應(yīng)Microsoft Win95所需的功能其芯片的邏輯框圖如圖6-1所示。    PIIX4芯片邏輯框圖6.1.1   概述PIIX4芯片是一個(gè)多功能的PCI器件,圖6-2 是82371在系統(tǒng)中扮演的角色。(續(xù)上圖)1. PCI與EIO之間的橋(PIIX4芯片)橋是不對程的,是各類不同標(biāo)準(zhǔn)總線與PCI總線連接,82371AB橋也可理解為一種總線轉(zhuǎn)換譯碼器和控制器,橋內(nèi)包含復(fù)雜的協(xié)議總線信號和緩沖器。(1).在PCI系統(tǒng)內(nèi),當(dāng)PIIX4操作時(shí),它總是作為系統(tǒng)內(nèi)各種模塊的主控設(shè)備,如USB和DMA控制器、IDE總線和分布式DMA的主控設(shè)備等,而且總是以ISA主控設(shè)備的名義出現(xiàn)。(2).  在向ISA總線或IDE總線進(jìn)行傳送操作的傳送周期期間作為從屬設(shè)備使用,并對內(nèi)部寄存器譯碼。PIIX4芯片(橋)的配置(1).可以把PIIX4芯片配置成整個(gè)ISA總線,或ISA總線的子集,也可擴(kuò)展成EIO總線。在使用EIO總線時(shí),可以把未使用的信號配置成通用的輸入和輸出。(2).PIIX4可直接驅(qū)動(dòng)5個(gè)ISA插槽;(3).能提供字節(jié)-交換邏輯、I/O的恢復(fù)支持、等待狀態(tài)的生成以及SYSCLK的生成。(4).提供X-BUS鍵盤控制器芯片、BIOS芯片、實(shí)時(shí)時(shí)鐘芯片、二級微程序器等的選擇。2.  IDE接口(總線主控設(shè)備的權(quán)利和同步DMA方式)IDE接口為4個(gè)IDE的設(shè)備提供支持,比如IDE接口的硬盤和CD-ROM等。注意:目前硬盤接口有5類:IDE、SCSI、Fibre Channel、IEEE1394和USB等。IDE口幾乎在PC機(jī)最多,因?yàn)楸阋恕CSI多用于服務(wù)器和集群機(jī)。IDE的PIO IDE速率:14MB/s;而總線主控設(shè)備IDE的速率:33MB/s在PIIX4芯片的IDE系統(tǒng)內(nèi),配有兩個(gè)各次獨(dú)立的IDE信號通道。3. 具有兼容性的模塊—DMA、定時(shí)器/計(jì)數(shù)器、中斷控制器等(1)在PIIX4內(nèi)的兩各82C37 DMA控制器經(jīng)邏輯的組合,產(chǎn)生7個(gè)獨(dú)立的可編程通道。通道[0:3]是通過與8個(gè)二進(jìn)位的硬件連線實(shí)現(xiàn)的。通過以字節(jié)為單位的計(jì)數(shù)進(jìn)行傳送。而通道[5:7]是通過16個(gè)二進(jìn)位的連線實(shí)現(xiàn)的,以字為單位的計(jì)數(shù)進(jìn)行傳送。(2)DMA控制器還能通過PCI總線,處理舊的DMA的兩個(gè)不同的方法提供支持。(3)計(jì)數(shù)/定時(shí)器模塊在功能上與82C54等價(jià)。(4)中斷控制器與ISA兼容,其功能是兩個(gè)82C59的功能之和。

    標(biāo)簽: 多功能 外圍器件 集成

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

    上傳用戶:3到15

  • 驅(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鎖住在存儲器中,并且創(chuàng)建了一個(gè)存儲在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ù)。然而,存儲區(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é)束前存儲拷貝到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

主站蜘蛛池模板: 灌南县| 武义县| 庆城县| 博白县| 谷城县| 洛川县| 西吉县| 阳曲县| 平罗县| 兴国县| 河西区| 济宁市| 金门县| 拉孜县| 临清市| 鄂州市| 紫金县| 南投市| 新野县| 花垣县| 同仁县| 瑞安市| 饶河县| 治县。| 三河市| 观塘区| 寻乌县| 江华| 台湾省| 尚志市| 香港| 阿尔山市| 石嘴山市| 衡水市| 景洪市| 芒康县| 石狮市| 靖西县| 汝城县| 肇州县| 钦州市|