虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

光时域<b>反射</b>仪

  • Keil C51使用详解

    Keil C51使用详解Keil C51 是美国Keil Software 公司出品的51 系列兼容单片机C 语言软件开发系统,与汇编相比,C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C 来开发,体会更加深刻。Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍 Keil C51 开发系统各部分功能和使用。第二节 Keil C51 单片机软件开发系统的整体结构C51 工具包的整体结构,如图(1)所示,其中uVision 与Ishell 分别是C51 forWindows 和for Dos 的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE 本身或其它编辑器编辑C 或汇编源文件。然后分别由C51 及A51 编译器编译生成目标文件(.OBJ)。目标文件可由LIB51 创建生成库文件,也可以与库文件一起经L51 连接定位生成绝对目标文件(.ABS)。ABS 文件由OH51 转换成标准的Hex 文件,以供调试器dScope51 或tScope51 使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM 中。图(1) C51 工具包整体结构图第三节 Keil C51 工具包的安装81. C51 for Dos在 Windows 下直接运行软件包中DOS\C51DOS.exe 然后选择安装目录即可。完毕后欲使系统正常工作须进行以下操作(设C:\C51 为安装目录):修改 Autoexec.bat,加入path=C:\C51\BinSet C51LIB=C:\C51\LIBSet C51INC=C:\C51\INC然后运行Autoexec.bat2. C51 for Windows 的安装及注意事项:在 Windows 下运行软件包中WIN\Setup.exe,最好选择安装目录与C51 for Dos相同,这样设置最简单(设安装于C:\C51 目录下)。然后将软件包中crack 目录中的文件拷入C:\C51\Bin 目录下。第四节 Keil C51 工具包各部分功能及使用简介1. C51 与A51(1) C51C51 是C 语言编译器,其使用方法为:C51 sourcefile[编译控制指令]或者 C51 @ commandfile其中 sourcefile 为C 源文件(.C)。大量的编译控制指令完成C51 编译器的全部功能。包控C51 输出文件C.LST,.OBJ,.I 和.SRC 文件的控制。源文件(.C)的控制等,详见第五部分的具体介绍。而 Commandfile 为一个连接控制文件其内容包括:.C 源文件及各编译控制指令,它没有固定的名字,开发人员可根据自己的习惯指定,它适于用控制指令较多的场合。(2) A51A51 是汇编语言编译器,使用方法为:9A51 sourcefile[编译控制指令]或 A51 @ commandfile其中sourcefile 为汇编源文件(.asm或.a51),而编译控制指令的使用与其它汇编如ASM语言类似,可参考其他汇编语言材料。Commandfile 同C51 中的Commandfile 类似,它使A51 使用和修改方便。2. L51 和BL51(1) L51L51 是Keil C51 软件包提供的连接/定位器,其功能是将编译生成的OBJ 文件与库文件连接定位生成绝对目标文件(.ABS),其使用方法为:L51 目标文件列表[库文件列表] [to outputfile] [连接控制指令]或 L51 @Commandfile源程序的多个模块分别经 C51 与A51 编译后生成多个OBJ 文件,连接时,这些文件全列于目标文件列表中,作为输入文件,如果还需与库文件(.LiB)相连接,则库文件也必须列在其后。outputfile 为输文件名,缺少时为第一模块名,后缀为.ABS。连接控制指令提供了连接定位时的所有控制功能。Commandfile 为连接控制文件,其具体内容是包括了目标文件列表,库文件列表及输出文件、连接控制命令,以取代第一种繁琐的格式,由于目标模块库文件大多不止1 个,因而第2 种方法较多见,这个文件名字也可由使用者随意指定。(2) Bl51BL51 也是C51 软件包的连接/定位器,其具有L51 的所有功能,此外它还具有以下3 点特别之处:a. 可以连接定位大于64kBytes 的程序。b. 具有代码域及域切换功能(CodeBanking & Bank Switching)c. 可用于RTX51 操作系统RTX51 是一个实时多任务操作系统,它改变了传统的编程模式,甚至不必用main( )函数,单片机系统软件向RTOS 发展是一种趋势,这种趋势对于186 和38610及68K 系列CPU 更为明显和必须,对8051 因CPU 较为简单,程序结构等都不太复杂,RTX51 作用显得不太突出,其专业版软件PK51 软件包甚至不包括RTX51Full,而只有一个RTX51TINY 版本的RTOS。RTX51 TINY 适用于无外部RAM 的单片机系统,因而可用面很窄,在本文中不作介绍。Bank switching 技术因使用很少也不作介绍。3. DScope51,Tscope51 及Monitor51(1) dScope51dScope51 是一个源级调试器和模拟器,它可以调试由C51 编译器、A51 汇编器、PL/M-51 编译器及ASM-51 汇编器产生的程序。它不需目标板(for windows 也可通过mon51 接目标板),只能进行软件模拟,但其功能强大,可模拟CPU 及其外围器件,如内部串口,外部I/O 及定时器等,能对嵌入式软件功能进行有效测试。

    标签: Keil C51 使用详解

    上传时间: 2013-11-01

    上传用户:zhouxuepeng1

  • EZ-USB FX系列单片机USB外围设备设计与应用

    EZ-USB FX系列单片机USB外围设备设计与应用:PART 1 USB的基本概念第1章 USB的基本特性1.1 USB简介21.2 USB的发展历程31.2.1 USB 1.131.2.2 USB 2.041.2.3 USB与IEEE 1394的比较41.3 USB基本架构与总线架构61.4 USB的总线结构81.5 USB数据流的模式与管线的概念91.6 USB硬件规范101.6.1 USB的硬件特性111.6.2 USB接口的电气特性121.6.3USB的电源管理141.7 USB的编码方式141.8 结论161.9 问题与讨论16第2章 USB通信协议2.1 USB通信协议172.2 USB封包中的数据域类型182.2.1 数据域位的格式182.3 封包格式192.4 USB传输的类型232.4.1 控制传输242.4.2 中断传输292.4.3 批量传输292.4.4 等时传输292.5 USB数据交换格式302.6 USB描述符342.7 USB设备请求422.8 USB设备群组442.9 结论462.10 问题与讨论46第3章 设备列举3.1注册表编辑器473.2设备列举的步骤493.3设备列举步骤的实现--使用CATC分析工具513.4结论613.5问题与讨论61第4章 USB芯片与EZUSB4.1USB芯片的简介624.2USB接口芯片644.2.1Philips接口芯片644.2.2National Semiconductor接口芯片664.3内含USB单元的微处理器684.3.1Motorola694.3.2Microchip694.3.3SIEMENS704.3.4Cypress714.4USB芯片总揽介绍734.5USB芯片的选择与评估744.6问题与讨论80第5章 设备与驱动程序5.1阶层式的驱动程序815.2主机的驱动程序835.3驱动程序的选择865.4结论865.5问题与讨论87第6章 HID群组6.1HID简介886.2HID群组的传输速率886.3HID描述符906.3.1报告描述符936.3.2主要 main 项目类型966.3.3整体 global 项目卷标976.3.4区域 local 项目卷标986.3.5简易的报告描述符996.3.6Descriptor Tool 描述符工具 1006.3.7兼容测试程序1016.4HID设备的基本请求1026.5Windows通信程序1036.6问题与讨论106PART 2 硬件技术篇第7章 EZUSB FX简介7.1简介1097.2EZUSB FX硬件框图1097.3封包与PID码1117.4主机是个主控者1137.4.1从主机接收数据1137.4.2传送数据至主机1137.5USB方向1137.6帧1147.7EZUSB FX传输类型1147.7.1批量传输1147.7.2中断传输1147.7.3等时传输1157.7.4控制传输1157.8设备列举1167.9USB核心1167.10EZUSB FX单片机1177.11重新设备列举1177.12EZUSB FX端点1187.12.1EZUSB FX批量端点1187.12.2EZUSB FX控制端点01187.12.3EZUSB FX中断端点1197.12.4EZUSB FX等时端点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简介1308.28051增强模式1308.3EZUSB FX所增强的部分1318.4EZUSB FX寄存器接口1318.5EZUSB FX内部RAM1318.6I/O端口1328.7中断1328.8电源控制1338.9特殊功能寄存器 SFR 1348.10内部总线1358.11重置136第9章 EZUSB FX内存9.1简介1379.28051内存1389.3扩充的EZUSB FX内存1399.4CS#与OE#信号1409.5EZUSB FX ROM版本141第10章 EZUSB FX输入/输出端口10.1简介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状态位15910.9.1DONE位15910.9.2ACK位15910.9.3BERR位15910.9.4ID1, ID015910.10送出 WRITE I2C数据16010.11接收 READ I2C数据16010.12I2C激活加载器16010.13SFR寻址 FX 16210.14端口A~E的SFR控制165第11章 EZUSB FX设备列举与重新设备列举11.1简介16711.2预设的USB设备16911.3USB核心对于EP0设备请求的响应17011.4固件下载17111.5设备列举模式17211.6没有存在EEPROM17311.7存在着EEPROM, 第一个字节是0xB0 0xB4, FX系列11.8存在着EEPROM, 第一个字节是0xB2 0xB6, FX系列11.9配置字节0,FX系列17711.10重新设备列举 ReNumerationTM 17811.11多重重新设备列举 ReNumerationTM 17911.12预设描述符179第12章 EZUSB FX批量传输12.1简介18812.2批量输入传输18912.3中断传输19112.4EZUSB FX批量IN的例子19112.5批量OUT传输19212.6端点对19412.7IN端点对的状态19412.8OUT端点对的状态19512.9使用批量缓冲区内存19512.10Data Toggle控制19612.11轮询的批量传输的范例19712.12设备列举说明19912.13批量端点中断19912.14中断批量传输的范例20112.15设备列举说明20512.16自动指针器205第13章 EZUSB控制端点013.1简介20913.2控制端点EP021013.3USB请求21213.3.1取得状态 Get_Status 21413.3.2设置特性(Set_Feature)21713.3.3清除特性(Clear_Feature)21813.3.4取得描述符(Get_Descriptor)21913.3.5设置描述符(Set Descriptor)22313.3.6设置配置(Set_Configuration)22513.3.7取得配置(Get_Configuration)22513.3.8设置接口(Set_Interface)22513.3.9取得接口(Get_Interface)22613.3.10设置地址(Set_Address)22713.3.11同步帧22713.3.12固件加载228第14章 EZUSB FX等时传输14.1简介22914.2等时IN传输23014.2.1初始化设置23014.2.2IN数据传输23014.3等时OUT传输23114.3.1初始化设置23114.3.2数据传输23214.4设置等时FIFO的大小23214.5等时传输速度23414.5.1EZUSB 2100系列23414.5.2EZUSB FX系列23514.6快速传输 仅存于2100系列 23614.6.1快速写入23614.6.2快速读取23714.7快速传输的时序 仅存于2100系列 23714.7.1快速写入波形23814.7.2快速读取波形23914.8快速传输速度(仅存于2100系列)23914.9其余的等时寄存器24014.9.1除能等时寄存器24014.9.20字节计数位24114.10以无数据来响应等时IN令牌24214.11使用等时FIFO242第15章 EZUSB FX中断15.1简介24315.2USB核心中断24415.3唤醒中断24415.4USB中断信号源24515.5SUTOK与SUDAV中断24815.6SOF中断24915.7中止 suspend 中断24915.8USB重置中断24915.9批量端点中断25015.10USB自动向量25015.11USB自动向量译码25115.12I2C中断25215.13IN批量NAK中断 仅存于AN2122/26与FX系列 25315.14I2C STOP反相中断 仅存于AN2122/26与FX系列 25415.15从FIFO中断 INT4 255第16章 EZUSB FX重置16.1简介25716.2EZUSB FX打开电源重置 POR 25716.38051重置的释放25916.3.1RAM的下载26016.3.2下载EEPROM26016.3.3外部ROM26016.48051重置所产生的影响26016.5USB总线重置26116.6EZUSB脱离26216.7各种重置状态的总结263第17章 EZUSB FX电源管理17.1简介26517.2中止 suspend 26617.3回复 resume 26717.4远程唤醒 remote wakeup 269第18章 EZUSB FX系统18.1简介27118.2DMA寄存器描述27218.2.1来源. 目的. 传输长度地址寄存器27218.2.2DMA起始与状态寄存器27518.2.3DMA同步突发使能寄存器27518.2.4虚拟寄存器27818.3RD/FRD与WR/FWR DMA闪控的选择27818.4DMA闪控波形与延伸位的交互影响27918.4.1DMA外部写入27918.4.2DMA外部读取280第19章 EZUSB FX寄存器19.1简介28219.2批量数据缓冲区寄存器28319.3等时数据FIFO寄存器28419.4等时字节计数寄存器28519.5CPU寄存器28719.6I/O端口配置寄存器28819.7I/O端口A~C输入/输出寄存器28919.8230 Kbaud UART操作--AN2122/26寄存器29119.9等时控制/状态寄存器29119.10I2C寄存器29219.11中断29419.12端点0控制与状态寄存器29919.13端点1~7的控制与状态寄存器30019.14整体USB寄存器30519.15快速传输30919.16SETUP数据31119.17等时FIFO的容量大小31119.18通用I/F中断使能31219.19通用中断请求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端口设置31419.22接口配置31419.23端口A与端口C切换配置31619.23.1端口A切换配置#231619.23.2端口C切换配置#231719.24DMA寄存器31919.24.1来源. 目的. 传输长度地址寄存器31919.24.2DMA起始与状态寄存器32019.24.3DMA同步突发使能寄存器32019.24.4选择8051 A/D总线作为外部FIFO321PART 3 固件技术篇第20章 EZUSB FX固件架构与函数库20.1固件架构总览32320.2固件架构的建立32520.3固件架构的副函数钩子32520.3.1工作分配器32620.3.2设备请求 device request 32620.3.3USB中断服务例程32920.4固件架构整体变量33220.5描述符表33320.5.1设备描述符33320.5.2配置描述符33420.5.3接口描述符33420.5.4端点描述符33520.5.5字符串描述符33520.5.6群组描述符33520.6EZUSB FX固件的函数库33620.6.1包含文件 *.H 33620.6.2子程序33620.6.3整体变量33820.7固件架构的原始程序代码338第21章 EZUSB FX固件范例程序21.1范例程序的简介34621.2外围I/O测试程序34721.3端点对, EP_PAIR范例35221.4批量测试, BulkTest范例36221.5等时传输, ISOstrm范例36821.6问题与讨论373PART 4 实验篇第22章 EZUSB FX仿真器22?1简介37522?2所需的工具37622?3EZUSB FX框图37722.4EZUSB最终版本的系统框图37822?5第一次下载程序37822.6EZUSB FX开发系统框图37922.7设置开发环境38022.8EZUSB FX开发工具组的内容38122.9EZUSB FX开发工具组软件38222.9.1初步安装程序38222.9.2确认主机 个人计算机 是否支持USB38222.10安装EZUSB控制平台. 驱动程序以及文件38322.11EZUSB FX开发电路板38522.11.1简介38522.11.2开发电路板的浏览38522.11.3所使用的8051资源38622.11.4详细电路38622.11.5LED的显示38722.11.6Jumper38722.11.7连接器39122.11.8内存映象图39222.11.9PLD信号39422.11.10PLD源文件文件39522.11.11雏形板的扩充连接器P1~P639722.11.12Philips PCF8574 I/O扩充IC40022.12DMA USB FX I/O LAB开发工具介绍40122.12.1USBFX简介40122.12.2USBFX及外围整体环境介绍40322?12?3USBFX与PC连接软件介绍40422.12.4USBFX硬件功能介绍404第23章 LED显示器输出实验23.1硬件设计与基本概念40923.2固件设计41023.3.1固件架构文件FW.C41123.3.2描述符文件DESCR.A5141223.3.3外围接口文件PERIPH.C41723.4固件程序代码的编译与链接42123.5Windows程序, VB设计42323.6INF文件的编写设计42423.7结论42623.8问题与讨论427第24章 七段显示器与键盘的输入/输出实验24.1硬件设计与基本概念42824.2固件设计43124.2.1七段显示器43124.2.24×4键盘扫描43324.3固件程序代码的编译与链接43424.4Windows程序, VB设计43624.5问题与讨论437第25章 LCD文字型液晶显示器输出实验25.1硬件设计与基本概念43825.1.1液晶显示器LCD43825.2固件设计45225.3固件程序代码的编译与链接45625.4Windows程序, VB设计45725.5问题与讨论458第26章 LED点阵输出实验26.1硬件设计与基本概念45926.2固件设计46326.3固件程序代码的编译与链接46326.4Windows程序, VB设计46526.5问题与讨论465第27章 步进电机输出实验27.1硬件设计与基本概念46627.1.11相激磁46727.1.22相激磁46727.1.31-2相激磁46827?1?4PMM8713介绍46927.2固件设计47327.3固件程序代码的编译与链接47427.4Windows程序, VB设计47627.5问题与讨论477第28章 I2C接口输入/输出实验28.1硬件设计与基本概念47828.2固件设计48128.3固件程序代码的编译与链接48328.4Windows程序, VB设计48428.5问题与讨论485第29章 A/D转换器与D/A转换器的输入/输出实验29.1硬件设计与基本概念48629.1.1A/D转换器48629.1.2D/A转换器49029.2固件设计49329.2.1A/D转换器的固件设计49329.2.2D/A转换器的固件设计49629.3固件程序代码的编译与链接49729.4Windows程序, VB设计49829.5问题与讨论499第30章 LCG绘图型液晶显示器输出实验30.1硬件设计与基本概念50030.1.1绘图型LCD50030.1.2绘图型LCD控制指令集50330.1.3绘图型LCD读取与写入时序图50530.2固件设计50630.2.1LCG驱动程序50630.2.2USB固件码51330.3固件程序代码的编译与链接51630.4Windows程序, VB设计51730.5问题与讨论518附录A Cypress控制平台的操作A.1EZUSB控制平台总览519A.2主画面520A.3热插拔新的USB设备521A.4各种工具栏的使用524A.5故障排除526A.6控制平台的进阶操作527A.7测试Unary Op工具栏上的按钮功能528A.8测试制造商请求的工具栏 2100 系列的开发电路板 529A.9测试等时传输工具栏532A.10测试批量传输工具栏533A.11测试重置管线工具栏535A.12测试设置接口工具栏537A.13测试制造商请求工具栏 FX系列开发电路板A.14执行Get Device Descriptor 操作来验证开发板的功能是否正确539A.15从EZUSB控制平台中, 加载dev_io的范例并且加以执行540A.16从Keil侦错应用程序中, 加载dev_io范例程序代码, 然后再加以执行542A.17将dev_io 目标文件移开, 且使用Keil IDE 集成开发环境 来重建545A.18在侦错器下执行dev_io目标文件, 并且使用具有侦错能力的IDE547A.19在EZUSB控制平台下, 执行ep_pair目标文件A.20如何修改fw范例, 并在开发电路板上产生等时传输550附录BEZUSB 2100系列及EZUSB FX系列引脚表B.1EZUSB 2100系列引脚表555B?2EZUSB FX系列引脚图表561附录C EZUSB FX寄存器总览附录D EEPROM烧录方式

    标签: EZ-USB USB 单片机 外围设备

    上传时间: 2013-11-21

    上传用户:努力努力再努力

  • PCB可测性设计布线规则之建议―从源头改善可测率

    P C B 可测性设计布线规则之建议― ― 从源头改善可测率PCB 设计除需考虑功能性与安全性等要求外,亦需考虑可生产与可测试。这里提供可测性设计建议供设计布线工程师参考。1. 每一个铜箔电路支点,至少需要一个可测试点。如无对应的测试点,将可导致与之相关的开短路不可检出,并且与之相连的零件会因无测试点而不可测。2. 双面治具会增加制作成本,且上针板的测试针定位准确度差。所以Layout 时应通过Via Hole 尽可能将测试点放置于同一面。这样就只要做单面治具即可。3. 测试选点优先级:A.测垫(Test Pad) B.通孔(Through Hole) C.零件脚(Component Lead) D.贯穿孔(Via Hole)(未Mask)。而对于零件脚,应以AI 零件脚及其它较细较短脚为优先,较粗或较长的引脚接触性误判多。4. PCB 厚度至少要62mil(1.35mm),厚度少于此值之PCB 容易板弯变形,影响测点精准度,制作治具需特殊处理。5. 避免将测点置于SMT 之PAD 上,因SMT 零件会偏移,故不可靠,且易伤及零件。6. 避免使用过长零件脚(>170mil(4.3mm))或过大的孔(直径>1.5mm)为测点。7. 对于电池(Battery)最好预留Jumper,在ICT 测试时能有效隔离电池的影响。8. 定位孔要求:(a) 定位孔(Tooling Hole)直径最好为125mil(3.175mm)及其以上。(b) 每一片PCB 须有2 个定位孔和一个防呆孔(也可说成定位孔,用以预防将PCB反放而导致机器压破板),且孔内不能沾锡。(c) 选择以对角线,距离最远之2 孔为定位孔。(d) 各定位孔(含防呆孔)不应设计成中心对称,即PCB 旋转180 度角后仍能放入PCB,这样,作业员易于反放而致机器压破板)9. 测试点要求:(e) 两测点或测点与预钻孔之中心距不得小于50mil(1.27mm),否则有一测点无法植针。以大于100mil(2.54mm)为佳,其次是75mil(1.905mm)。(f) 测点应离其附近零件(位于同一面者)至少100mil,如为高于3mm 零件,则应至少间距120mil,方便治具制作。(g) 测点应平均分布于PCB 表面,避免局部密度过高,影响治具测试时测试针压力平衡。(h) 测点直径最好能不小于35mil(0.9mm),如在上针板,则最好不小于40mil(1.00mm),圆形、正方形均可。小于0.030”(30mil)之测点需额外加工,以导正目标。(i) 测点的Pad 及Via 不应有防焊漆(Solder Mask)。(j) 测点应离板边或折边至少100mil。(k) 锡点被实践证实是最好的测试探针接触点。因为锡的氧化物较轻且容易刺穿。以锡点作测试点,因接触不良导致误判的机会极少且可延长探针使用寿命。锡点尤其以PCB 光板制作时的喷锡点最佳。PCB 裸铜测点,高温后已氧化,且其硬度高,所以探针接触电阻变化而致测试误判率很高。如果裸铜测点在SMT 时加上锡膏再经回流焊固化为锡点,虽可大幅改善,但因助焊剂或吃锡不完全的缘故,仍会出现较多的接触误判。

    标签: PCB 可测性设计 布线规则

    上传时间: 2014-01-14

    上传用户:cylnpy

  • 驱动程序与应用程序的接口

    有两种方式可以让设备和应用程序之间联系:1. 通过为设备创建的一个符号链;2. 通过输出到一个接口WDM驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。一个应用程序使用Win32APIs来调用设备。在某个Win32 APIs和设备对象的分发函数之间存在一个映射关系。获得对设备对象访问的第一步就是打开一个设备对象的句柄。 用符号链打开一个设备的句柄为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3",  GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路径名的前缀“\\.\”告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。有关细节查看有关Kdevice和CreateLink的内容。在上述调用中第一个参数中前缀后的部分就是这个符号链的名字。注意:CreatFile中的第一个参数不是Windows 98/2000中驱动程序(.sys文件)的路径。是到设备对象的符号链。如果使用DriverWizard产生驱动程序,它通常使用类KunitizedName来构成设备的符号链。这意味着符号链名有一个附加的数字,通常是0。例如:如果链接名称的主干是L“TestDevice”那么在CreateFile中的串就该是“\\\\.\\TestDevice0”。如果应用程序需要被覆盖的I/O,第六个参数(Flags)必须或上FILE_FLAG_OVERLAPPED。 使用一个输出接口打开句柄用这种方式打开一个句柄会稍微麻烦一些。DriverWorks库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。应用程序能有用CdeviceInterfaceClass类的一个实例来获得一个或更多的CdeviceInterface类的实例。CdeviceInterface类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile中使用来打开设备。下面用一个小例子来显示这些类最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface(  GUID* pClassGuid,  DWORD instance,  PDWORD pError){  CDeviceInterfaceClass DevClass(pClassGuid, pError);  if (*pError != ERROR_SUCCESS)    return INVALID_HANDLE_VALUE;  CDeviceInterface DevInterface(&DevClass, instance, pError);  if (*pError != ERROR_SUCCESS)    return INVALID_HANDLE_VALUE;  cout << "The device path is "    << DevInterface.DevicePath()    << endl;   HANDLE hDev;  hDev = CreateFile(   DevInterface.DevicePath(),    GENERIC_READ | GENERIC_WRITE,    FILE_SHARE_READ | FILE_SHARE_WRITE,    NULL,    OPEN_EXISTING,    FILE_ATTRIBUTE_NORMAL,    NULL  );  if (hDev == INVALID_HANDLE_VALUE)    *pError = GetLastError();  return hDev;} 在设备中执行I/O操作一旦应用程序获得一个有效的设备句柄,它就能使用Win32 APIs来产生到设备对象的IRPs。下面的表显示了这种对应关系。Win32 API  DRIVER_FUNCTION_xxxIRP_MJ_xxx  KDevice subclass member function CreateFile  CREATE  Create ReadFile  READ  Read WriteFile  WRITE  Write DeviceIoControl  DEVICE_CONTROL  DeviceControl CloseHandle  CLOSECLEANUP  CloseCleanUp 需要解释一下设备类成员的Close和CleanUp:CreateFile使内核为设备创建一个新的文件对象。这使得多个句柄可以映射同一个文件对象。当这个文件对象的最后一个用户级句柄被撤销后,I/O管理器调用CleanUp。当没有任何用户级和核心级的对文件对象的访问的时候,I/O管理器调用Close。如果被打开的设备不支持指定的功能,则调用相应的Win32将引起错误(无效功能)。以前为Windows95编写的VxD的应用程序代码中可能会在打开设备的时候使用FILE_FLAG_DELETE_ON_CLOSE属性。在Windows NT/2000中,建议不要使用这个属性,因为它将导致没有特权的用户企图打开这个设备,这是不可能成功的。I/O管理器将ReadFile和WriteFile的buff参数转换成IRP域的方法依赖于设备对象的属性。当设备设置DO_DIRECT_IO标志,I/O管理器将buff锁住在存储器中,并且创建了一个存储在IRP中的MDL域。一个设备可以通过调用Kirp::Mdl来存取MDL。当设备设置DO_BUFFERED_IO标志,设备对象分别通过KIrp::BufferedReadDest或 KIrp::BufferedWriteSource为读或写操作获得buff地址。当设备不设置DO_BUFFERED_IO标志也不设置DO_DIRECT_IO,内核设置IRP 的UserBuffer域来对应ReadFile或WriteFile中的buff参数。然而,存储区并没有被锁住而且地址只对调用进程有效。驱动程序可以使用KIrp::UserBuffer来存取IRP域。对于DeviceIoControl调用,buffer参数的转换依赖于特殊的I/O控制代码,它不在设备对象的特性中。宏CTL_CODE(在winioctl.h中定义)用来构造控制代码。这个宏的其中一个参数指明缓冲方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表显示了这些方法和与之对应的能获得输入缓冲与输出缓冲的KIrp中的成员函数:Method  Input Buffer Parameter  Output Buffer Parameter METHOD_BUFFERED  KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT  KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT  KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER  KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代码指明METHOD_BUFFERED,系统分配一个单一的缓冲来作为输入与输出。驱动程序必须在向输出缓冲放数据之前拷贝输入数据。驱动程序通过调用KIrp::IoctlBuffer获得缓冲地址。在完成时,I/O管理器从系统缓冲拷贝数据到提供给Ring 3级调用者使用的缓冲中。驱动程序必须在结束前存储拷贝到IRP的Information成员中的数据个数。如果控制代码不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,则DeviceIoControl的参数呈现不同的含义。参数InputBuffer被拷贝到一个系统缓冲,这个缓冲驱动程序可以通过调用KIrp::IoctlBuffer。参数OutputBuffer被映射到KMemory对象,驱动程序对这个对象的访问通过调用KIrp::Mdl来实现。对于METHOD_OUT_DIRECT,调用者必须有对缓冲的写访问权限。注意,对METHOD_NEITHER,内核只提供虚拟地址;它不会做映射来配置缓冲。虚拟地址只对调用进程有效。这里是一个用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE来定义一个IOCTL代码:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)现在使用一个DeviceIoControl调用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING,  NULL, // no input  注意,这里放的是包含有执行操作命令的字符串指针  0, FirmwareRev,      //这里是output串指针,存放从驱动程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize,  NULL // not overlapped I/O );如果输出缓冲足够大,设备拷贝串到里面并将拷贝的资结束设置到FirmwareRevSize中。在驱动程序中,代码看起来如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){  ULONG fwLength=0;  switch ( I.IoctlCode() )  {    case IOCTL_MYDEV_GET_FIRMWARE_REV:      fwLength = strlen(FIRMWARE_REV)+1;      if (I.IoctlOutputBufferSize() >= fwLength)      {        strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV);        I.Information() = fwLength;         return I.Complete(STATUS_SUCCESS);      }      else      {              }    case . . .   } }

    标签: 驱动程序 应用程序 接口

    上传时间: 2013-10-17

    上传用户:gai928943

  • 基于Altera 28nm FPGA的100-Gbit OTN复用转发器解决方案

      100-Gb光传送网(OTN)复用转发器   a. 提供连续数据范围在600 Mbps到14.1 Gbps之间的串行收发器,通过使用方便的部分重新配置功能支持多标准客户侧接口;   b. 44个独立发送时钟域,提高了时钟灵活性;   c. 收发器集成电信号散射补偿(EDC)功能,可直接驱动光模块(SFP+、SFP、QSFP、CFP);   d. 支持下一代光接口的28-Gbps收发器;   e. 替代外部压控晶体振荡器(VCXO)的高级fPLL。

    标签: Altera FPGA Gbit 100

    上传时间: 2013-11-19

    上传用户:zhyiroy

  • TKS仿真器B系列快速入门

    TKS仿真器B系列快速入门

    标签: TKS 仿真器 快速入门

    上传时间: 2013-10-31

    上传用户:aix008

  • 集成温度传感器的分类和应用

    一、传感器的定义信息处理技术取得的进展以及微处理器和计算机技术的高速发展,都需要在传感器的开发方面有相应的进展。微处理器现在已经在测量和控制系统中得到了广泛的应用。随着这些系统能力的增强,作为信息采集系统的前端单元,传感器的作用越来越重要。传感器已成为自动化系统和机器人技术中的关键部件,作为系统中的一个结构组成,其重要性变得越来越明显。最广义地来说,传感器是一种能把物理量或化学量转变成便于利用的电信号的器件。国际电工委员会(IEC:International Electrotechnical Committee)的定义为:“传感器是测量系统中的一种前置部件,它将输入变量转换成可供测量的信号”。按照Gopel等的说法是:“传感器是包括承载体和电路连接的敏感元件”,而“传感器系统则是组合有某种信息处理(模拟或数字)能力的传感器”。传感器是传感器系统的一个组成部分,它是被测量信号输入的第一道关口。传感器系统的原则框图示于图1-1,进入传感器的信号幅度是很小的,而且混杂有干扰信号和噪声。为了方便随后的处理过程,首先要将信号整形成具有最佳特性的波形,有时还需要将信号线性化,该工作是由放大器、滤波器以及其他一些模拟电路完成的。在某些情况下,这些电路的一部分是和传感器部件直接相邻的。成形后的信号随后转换成数字信号,并输入到微处理器。德国和俄罗斯学者认为传感器应是由二部分组成的,即直接感知被测量信号的敏感元件部分和初始处理信号的电路部分。按这种理解,传感器还包含了信号成形器的电路部分。传感器系统的性能主要取决于传感器,传感器把某种形式的能量转换成另一种形式的能量。有两类传感器:有源的和无源的。有源传感器能将一种能量形式直接转变成另一种,不需要外接的能源或激励源(参阅图1-2(a))。有源(a)和无源(b)传感器的信号流程无源传感器不能直接转换能量形式,但它能控制从另一输入端输入的能量或激励能传感器承担将某个对象或过程的特定特性转换成数量的工作。其“对象”可以是固体、液体或气体,而它们的状态可以是静态的,也可以是动态(即过程)的。对象特性被转换量化后可以通过多种方式检测。对象的特性可以是物理性质的,也可以是化学性质的。按照其工作原理,传感器将对象特性或状态参数转换成可测定的电学量,然后将此电信号分离出来,送入传感器系统加以评测或标示。各种物理效应和工作机理被用于制作不同功能的传感器。传感器可以直接接触被测量对象,也可以不接触。用于传感器的工作机制和效应类型不断增加,其包含的处理过程日益完善。常将传感器的功能与人类5大感觉器官相比拟: 光敏传感器——视觉;声敏传感器——听觉;气敏传感器——嗅觉;化学传感器——味觉;压敏、温敏、流体传感器——触觉。与当代的传感器相比,人类的感觉能力好得多,但也有一些传感器比人的感觉功能优越,例如人类没有能力感知紫外或红外线辐射,感觉不到电磁场、无色无味的气体等。对传感器设定了许多技术要求,有一些是对所有类型传感器都适用的,也有只对特定类型传感器适用的特殊要求。针对传感器的工作原理和结构在不同场合均需要的基本要求是: 高灵敏度,抗干扰的稳定性(对噪声不敏感),线性,容易调节(校准简易),高精度,高可靠性,无迟滞性,工作寿命长(耐用性) ,可重复性,抗老化,高响应速率,抗环境影响(热、振动、酸、碱、空气、水、尘埃)的能力 ,选择性,安全性(传感器应是无污染的),互换性 低成本 ,宽测量范围,小尺寸、重量轻和高强度,宽工作温度范围 。二、传感器的分类可以用不同的观点对传感器进行分类:它们的转换原理(传感器工作的基本物理或化学效应);它们的用途;它们的输出信号类型以及制作它们的材料和工艺等。根据传感器工作原理,可分为物理传感器和化学传感器二大类:传感器工作原理的分类物理传感器应用的是物理效应,诸如压电效应,磁致伸缩现象,离化、极化、热电、光电、磁电等效应。被测信号量的微小变化都将转换成电信号。化学传感器包括那些以化学吸附、电化学反应等现象为因果关系的传感器,被测信号量的微小变化也将转换成电信号。有些传感器既不能划分到物理类,也不能划分为化学类。大多数传感器是以物理原理为基础运作的。化学传感器技术问题较多,例如可靠性问题,规模生产的可能性,价格问题等,解决了这类难题,化学传感器的应用将会有巨大增长。常见传感器的应用领域和工作原理列于表1.1。按照其用途,传感器可分类为: 压力敏和力敏传感器 ,位置传感器 , 液面传感器 能耗传感器 ,速度传感器 ,热敏传感器,加速度传感器,射线辐射传感器 ,振动传感器,湿敏传感器 ,磁敏传感器,气敏传感器,真空度传感器,生物传感器等。以其输出信号为标准可将传感器分为: 模拟传感器——将被测量的非电学量转换成模拟电信号。数字传感器——将被测量的非电学量转换成数字输出信号(包括直接和间接转换)。膺数字传感器——将被测量的信号量转换成频率信号或短周期信号的输出(包括直接或间接转换)。开关传感器——当一个被测量的信号达到某个特定的阈值时,传感器相应地输出一个设定的低电平或高电平信号。

    标签: 集成 温度传感器 分类

    上传时间: 2013-10-11

    上传用户:zhangdebiao

  • 嵌人式系统在光纤识别仪中的应用

    由于光纤弯曲时光线不满足全反射的条件,有光线泄漏出来,而这些光线具有光纤中传输信号的特征,我们根据光纤弯曲的理论在不影响光纤通信的条件下给光纤施加适当的弯曲,并由此设计合理的光检测器结构和放大电路,利用嵌入式系统为硬件支撑,研制出光纤识别仪.该仪器能够通过对光检测器检测到的光纤泄漏光信号进行分析,在不中断通信的情况下对光纤进行检测,识别其中的信号.在实际应用当中显示了良好的性能.

    标签: 嵌人式系统 光纤 中的应用 识别仪

    上传时间: 2013-12-28

    上传用户:lijinchuan

  • 浩辰CAD 2012专业版下载

    附件附带破解补丁 浩辰CAD 2012专业版破解方法: 按正常安装浩辰CAD 2012专业版,点击安装KeyGen.exe。 浩辰CAD2012,以增强软件实用性、易用性为主要目标,新增了大量实用功能,改进了着色、消隐的正确性,提升了大幅面光栅图像处理的性能,同时改进了LISP\VBA二次开发接口的正确性和兼容性。 浩辰CAD 2012根据国内外用户的需求,增加了大量实用功能,例如动态块、DWF文件插入、隔离隐藏对象、转换EXCEL表格、块属性管理器、放样、超级填充等。 浩辰cad2012新增功能: 1、动态块(bedit)      动态块具有灵活性和智能性。 用户在操作时可以轻松地更改图形中的动态块参照。 可以通过自定义夹点或自定义特性来操作动态块参照中的几何图形。   a)通过设置图块中元素的可见性,一个图块中可以包含一种图形的多种形态,如下图的汽车模块就包含跑车、轿车和卡车的各向视图,只需在可见性列表中选择一个选项,就可以显示相应的图形。   还可对图块中的图形设置参数和动作,可对图块的整体或部分图形进行移动、旋转、翻转、缩放、阵列等;并可建立查询列表,对图块进行参数化控制。通过图块的动作设置,一个图块可以派生出数个图块,如下图所示:   2、DWF参考底图(dwfattach)      可以将dwf文件插入到当前图中作为参考底图,并可以捕捉到底图的端点、中点,如下图所示:   3、对象隔离、对象隐藏、取消对象隔离      可将选择的对象暂时隐藏,也可将选择对象以外的其他所有对象隐藏。当图中对象较多,利用此命令可以简化图纸,方便后续操作,操作起来比图层隔离更加简便、直观。   4、冻结其它图层和锁定其它图层      浩辰CAD 之前版本提供了图层隔离的功能,冻结其他图层和锁定其它图层与图层隔离功能类似,可以通过选择需要显示或可编辑对象,将其他图层进行冻结和锁定。      5、CAD表格转EXCEL表格      可以直接选择CAD中由直线、多段线和单行文字、多行文字组成的表格输出为EXCEL表格。   6、文字递增      可以对序号、编号、数值进行递增复制,间距、数量和增量均可随心所欲地控制。   7、多段线布尔运算      可直接对封闭的多段线进行差并交计算,无需转换面域,有时比修剪更简便。   8、拼写检查(spell)      此功能实现对用户输入的单词或文章进行单词校验,提示匹配的单词列表,方便用户进行正确的单词填写工作。可以实现不同语言的单词校验工作,包括英文,德文,等8种语言。      可以对全部实体(包括布局,模型中的所有实体)进行校验。      可以分别对布局或模型中的实体进行校验。      可以单独对一个实体或一个选择集进行校验。      方便用户自定义词典。      兼容的自定义词典。      支持文字,块内文字,块属性,属性,标注的校验。      9、放样(Loft)      通过对包含两条或者两条以上的横截面曲线的一组曲线进行放样(绘制实体或曲面)来创建三维实体或曲面。   10、块属性管理器(battman)      创建带属性的块后,执行 battman 对块中属性定义进行查询和修改,如果将修改应用到所有块参照,则对应块的块参照中属性实体也会做对应修改。   11、超级填充(superhatch)      超级填充命令有点像hatch命令,不同的是,可以使用该命令将光栅图像、块、外部参照和擦除这些实体作为填充实体对闭合区域进行填充。   12、线上写字      可以在选择线上书写文字,线会被自动打断,文字会放到线中间。 ◆ 重要功能改进      1、超链接      浩辰CAD 2012版的超链接不仅修改了以前存在的一些错误,而且提供了更为丰富的功能。   a)支持web链接的浏览和连接的设置。      b)支持打开操作系统可打开的所有文件。      c)支持dwg图纸的视图定位。      d)支持超链接的复制粘贴。      e)可以通过鼠标光标状态来判断是否存在链接,方便用户判断是否存在链接。      f)可以通过ctrl+鼠标点击打开设置的文件,方便用户的操作。      g)可以通过右键打开块内实体的链接。      2、光栅图像      浩辰CAD 2012版不仅增加了图像格式的支持,同时提升了大分辨率光栅图像的插入、显示和打印的效果和速度。   a) 增加了对多种图像格式的支持,诸如:CALS-1(*.cal,*.mil,*.rst,*.cg4)、RLC、GEOSPORT(.bil)、PICT(.pct/.pict)、IG4、Autodesk Animator(.fil/.flc)。      b) 内存使用问题,可以插入多张图片,内存不会增加。      c) 光栅图像打印问题(不清晰)。      d) 插入大图像时,预览速度大幅提升。      3、二次开发改进      浩辰CAD 2012版针对二次开发商和用户提出的一些LISP及VBA与AutoCAD存在的兼容性问题进行了系统梳理,兼容性有明显提升,此外还针对国外二次开发商的需求开发了Lisp调试器。      a) Lisp改进      处理了线程问题、命令范围值问题、VLX解析问题,对Lisp程序执行速度进行了优化。      b) VBA改进      处理了VBA的文档管理、接口不全、接口错误、类派生关系错误问题。      c) Lisp调试器      用户在使用浩辰CAD时,由于LISP与AutoCAD不完全兼容,用户需要一个工具进行调试,以协助用户解决及分析报告LISP问题。此系统以完成调试功能为主,不处理词法分析前的映射。适用于中级以上开发用户。

    标签: 2012 CAD 浩辰

    上传时间: 2013-11-24

    上传用户:lepoke

  • 基于Altera 28nm FPGA的100-Gbit OTN复用转发器解决方案

      100-Gb光传送网(OTN)复用转发器   a. 提供连续数据范围在600 Mbps到14.1 Gbps之间的串行收发器,通过使用方便的部分重新配置功能支持多标准客户侧接口;   b. 44个独立发送时钟域,提高了时钟灵活性;   c. 收发器集成电信号散射补偿(EDC)功能,可直接驱动光模块(SFP+、SFP、QSFP、CFP);   d. 支持下一代光接口的28-Gbps收发器;   e. 替代外部压控晶体振荡器(VCXO)的高级fPLL。

    标签: Altera FPGA Gbit 100

    上传时间: 2013-11-10

    上传用户:pzw421125