您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页基于LabVIEW的数字频谱分析仪的设计

基于LabVIEW的数字频谱分析仪的设计

来源:爱问旅游网
陕西科技大学硕士学位论文

基于LabVIEW的数字频谱分析仪的设计

姓名:吴静申请学位级别:硕士专业:控制理论与控制工程

指导教师:张俊涛

20090601

基于LabVIEW的数字频谱分析仪的设计摘要频谱分析作为现代信号重要的分析方法,已在地质勘探、医学和航空领域获得广泛的应用。目前,数字频谱分析仪大多是以传统的硬件电路来设计的,存在着其自身无法克服的复杂性和封闭性,而且体积大价格高,不能普遍应用于教学和科研实践中。现代测量技术要求频谱分析仪能够实现信息共享,完成对被测系统的综合分析和评估,从而有利于得出准确的判断。数字频谱分析的设计一直是电子设计领域的研究热点,在理论研究和工程实践中具有重要的意义。为此,本文提出了以FPGA为核心,基于LabVIEW新的数字频谱分析仪的设计。与传统的数字频谱仪设计方法相比,基于LabVIEW新的数字频谱分析仪在智能化、处理能力、可操作性等方面都具有明显的技术优势。本文首先简介设计数字频谱分析仪的开发环境一硬件环境QuartusII以及软件环境LabVIEW,然后基于Altera公司的N10SII和LABVIEW提出了数字频谱分析仪的整体设计方案和设计指标。首先设计ADCController控制WM873l对语音信号进行采集,经嵌入式软件处理器NIOSII进行数据存储并控制传送给USBOTG芯片ISPl362,数据再由USB接口传入计算机。PC端采用Windows操作系统I/O设备驱动原理与动态链接库技术相结合的方法,开发出USB通信程序模块DLL,在LabVIEW采用其外部代码接口机制调用该DLL,基于LabVIEW完成频谱分析。设计中充分利用FPGA和NIOSII的特点,基于LabVIEW进行频谱分析。在系统结构设计中尽量采用低耗时的数据传输方式和充分利用FPGA的资源。本文基于NIOSII硬件平台和基于LabVIEW软件平台进行频谱分析仪设计上进行了有益尝试,给出了系统NIOSII的设计方案。由于时间关系和硬件资源,在本次设计中系统仅完成了在48KHZ采样频率下的低频信号的频谱分析和信号的时域、频谱显示。理论和仿真分析表明,实验结果正确。关键词:频谱分析仪,LabVIEW,FPGA,NIOSIIⅡDESIGNoFDIGITALSPECTRUMANALYZERBASEoNLABVIEWAbstractSpectrumanalysishasbeenwidelyusedinmanyfieldsimportantanalysismethodofthemodernsignal,suchgeology,medicine,aviationandanalyzersareSOasasanexplorationofon.Now,mostdigitalspectrumwhichhavedesignedbytraditionalhardwarecircuitscannotshortageofcomplexity,largeandexpensive,SObewidelyusedinteachingandscientificresearchpractice.SpectrumanalyzersneedtoshareinformationandhavecapacityevaluationofthemeasuredsystemtoofcomprehensiveanalysisandtomeetdemandsofmodernmeasuringtechniqueinorderdigitalspectrumanalyzeriSaobtainaccuratejudgments.Designofprojectahottopicinelectronicarea.Ithasthepractice.vitalsignificanceinthefundamentalresearchandtheAsaresult,thispaperpresentsthedesignmethodofonnewdigitalspectrumanalyzerbaseLabVIEWusingonFPGAasthemaintopic.ThetodigitalspectrumanalyzerbasedigitalspectrumanalyzerLabVIEWcomparedtechnicaltraditionalinhasobviouslysuperiorityintelligenceandability,abilityofprocessing,easyoperationandSOon.Firstly,developmentenvironmentofdesignofdigitalspectrumanalyzerispresentedinthispaper,includinghardwareenvironmentQuartusIIandSOftwareenvironmentLabVIEW.Secondly,thegeneralonframeandtargetofthedigitalspectrumanalyzerbaseNIOSIIandLABVIEWiSofferedinthispaper.Thirdly,theaudiochipWM8731iScontrolledtoacquireaudiodatabytheADCcontroller.ThentheaudiosenttodataiSstoredandISPl362,theUSB0TGchip,byembeddedsenttohardwareprocessorNIOSII.AndtheaudiodataiSPCfromtheUSBinterfacebyISP1362.TheDLLofUSBuniversalcommunicationmoduleisdevelopedusingWindowsoperatingsystemI/OequipmentIIIdriverandthedynamiclinklibraryinPC.ThentheDLLiScalledtocompletedatatransferaccordingwithtooutertotheprinciplewhichLabVIEWlinksarecode.ThecharacteristicofFPGAandNIOSIIonfullyuseddesignspectrumanalysisbaseLabVIEW.AndlowconsumptionresourcesdatatransferisusedinsystemstructuraldesignandareofDE2fullyused.ThispaperonmakessignificantattemptindesignofspectrumsoftwareresultofanalyzerbaseNIOSIIhardwareplatformandLabVIEWaplatform,andthedesignframeofNIOSIIispresented.Asthetime,thesystemfrequencyhasonlycompletedthedesignunder48KHZanalysis.Andthesamplingsignallow-frequencysignalspectralandfrequencytimedomainspectrumaredisplayed.ThetheoreticalanalysisandthesimulationindicatedthattheexperimentalresultiScorrect.KEYWORDS:Spectralanalyzer,LabVIEW,FPGA,NIOSIIIV基于LabVIEW的数字频谱分析仪的设计原创性声明及关于学位论文使用授权的声明原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,进行研究所取得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的科研成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律责任由本人承担。论文作者签名:呈盏日期:2QQ!生!月关于学位论文使用授权的声明本人完全了解陕西科技大学有关保留、使用学位论文的规定,同意学校保留或向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅;本人授权陕西科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或其他复制手段保存论文和汇编本学位论文。同时授权中国科学技术信息研究所将本学位论文收录到《中国学位论文全文数据库》,并通过网络向社会公众提供信息服务。论文作者签名:』彗I一导师签名:{獬日期:丛盟工生上且(保密论文在解密后应遵守此规定)基于LabVIEW的数字频谱分析仪的设计I引言1.1频谱分析仪的现状随着科学技术的发展,频谱分析作为近代的信号分析方法在各个学科研究中已经广泛的应用[11。例如:在声纳系统中为了寻找海洋水面舰艇或潜艇,需要对噪声信号进行频谱分析,提取有用信息,以判断舰艇运动速度、方向、位置、大小等。又如:对飞机、轮船、汽车、汽轮机、电机、机床等主体或部件进行实际运行的频谱分析,可以提供设计数据和检验设计效果,或者寻找振源和诊断故障【2.·】,以便及时排除潜在故障因素,保证安全运行等【5】。频谱分析仪就是对我们所关心的信号进行频谱分析,并将分析的结果以图像或数字的方式显示出来,以让我们了解信号的频域特征。传统的模拟频谱分析仪的前端电路是一定带宽内可调谐的接收机,输入信号经变频器变频、检波、低通滤波器滤波,滤波输出作为垂直分量,频率作为水平分量,在示波器屏幕上绘出坐标图,就是输入信号的频谱图。现代频谱分析仪是基于现代数字信号处理理论的频谱分析仪,信号经过前置预处理、抗混叠滤波、A/D变换、数字频谱分析等环节而得到信号中的频率分量,达到与传统频谱分析仪同样的结果。现代的数字频谱分析仪,在实现方式上主要有基于计算机处理准实时频谱分析(或称为软件频谱分析)、基于通用DSP处理器的实时频谱分析和基于专用FFT处理芯片(ASIC)的频谱分析系统【61。前者由于采用软件处理,故实时性很差,且系统成本很高,不能用于工程实际。对于通用处理器实现的分析系统,虽然在实时性上远远高于前者,乘加运算采用硬件实现,系统采用流水线方式,但数据本身的组织及顺序工作方式使其在高速场合通常需多片并行应用,同时系统的编程难度较大。对于后者,通过选用不同的器件,可满足高速实时的要求,但成本很高。所以设计一种既能够满足实时性要求又能够降低成本的数字频谱分析仪刻不容缓【,】。1.2本文研究的目的和意义虽然现代数字频谱分析仪较传统意义上的频谱分析仪有了一定的改进,但是它仍然是以硬件电路来实现的传统意义上的频谱分析仪,他们有着自身无法克服的缺点,如复杂性、封闭性、昂贵性[81和体积庞大等。复杂性,硬件化的频谱分析仪都是通过电子电路来实现,精度越高性能越好的仪器对硬件的要求陕西科技大学硕士学位论文越苛刻,使得系统越来越复杂;封闭性,仪器一经制造完成,对用户就是一个封闭的系统,用户只能使用仪器提供的既有功能,而不能在仪器中加入自己的实际要求;昂贵性,由于频谱分析仪对制造技术水平的要求很高,现有的很多频谱分析仪都依赖进口,价格非常昂贵。现代测量技术要求的不断提高,对频谱分析有了更高的要求【,1,主要表现在两方面:第一,现代测量技术要求仪器不仅能单独测量到某个量,而更希望它们之间能够互相通信,实现信息共享,从而完成对被测各个系统的综合分析、评估、得出准确判断;第二,对于复杂的测试系统而言,为了能正确使用各个不同厂家的测试设备,用户需要掌握和了解的知识面很广、点很多,造成了仪器本身使用率和利用率的低下,并在一定程度上造成了硬件设备的冗余。随着计算机技术的发展和普及,虚拟仪器技术的出现,传统频谱分析仪的这种形态将能为虚拟仪器所取代。虚拟频谱分析仪改变了原有频谱分析仪的整体设计思路,用软件代替了硬件,是一种以计算机作为仪器统一硬件平台,充分利用计算机独具的运算、存储、回放、调用、显示以及文件管理等基本智能化功能,同时把传统仪器的专业化功能和面板控件软件化,使之与计算机结合起来融为一体,根据测试任务的需要来定义和设计仪器的测试功能,充分利用计算机来实现和扩展传统仪器功能,这样便构成了一台从外观到功能都完全与传统数字频谱分析仪一致,同时又充分享用计算机智能资源的全新的仪器系统。使工程技术人员可以用一部台式电脑或一部笔记本电脑到现场就可轻松完成数字信号的采集、处理及频谱分析。另外,随着微电子技术的发展,电子系统的设计已不再是利用各种通用IC进行PCB板级的设计而是转向以大规模FPGA或ASIC为物理载体的系统芯片设计(SOPC或SOC)。同时,EDA工具的迅速发展,使得整个系统从行为算法级到物理结构级的全部设计易于在FPGA上实现。特别是Altera公司推出的Quartus和NIOSII核等软件为实现基于FPGA嵌入IP核的SOPC系统提供了极大的方便。为此,本文设计了一种新的基于LabVIEW的频谱分析仪,充分地结合LabVIEW、EDA工具、FPGA、和NIOSII的特点。基于LabVIEW的数字频谱分析仪的特点[10l1)丰富和增强了传统仪器的功能;2)突出“软件即是仪器”的概念,在通用硬件平台确立后,主要由软件而不是硬件来决定仪器的功能;3)仪器的功能是用户根据需要由软件来定义的;4)智能化程度高,处理能力强;2基于LabVIEW的数字频谱分析仪的设计5)可重复性与可配置性强,开发与维护的费用低;6)用户定义仪器功能,使得仪器操作变得更加直观、简便、易于理解;7)系统开放、灵活、与计算机的进步同步;8)技术更新周期短、价格低:极易与其他设备连接等。1.3本文研究的内容和方法本文选择基于LabVIEW的频谱分析仪的设计这一研究课题,在本课题中着重做了两方面的工作:第一,利用Altera公司的SOPCBuilder开发工具设计基于FPGA的数据采集卡,设计中充分利用Altera公司DE2开发板上的资源。最后利用USB控制芯片ISPl362作为USBDevice来完成数据传输和存储。AlteraDE2开发板是ALRERA公司的合作伙伴友晶科技公司研制的SOPC开发板、可以完成可编程逻辑器件、EDA、SOPC、NIOSII嵌入式系统等方面的实验与开发。DE2开发板上包含CylonelI系列的EP2C35F672C6芯片(含35000逻辑元件)、WM8731芯片、8MB的SDRAM、512k的SRAMj1M的FLASH、16x2的LCD、8只七段数码管、l8只红色发光二极管、9只绿色发光二极管、VGA、RS232、SP/2、USBOTG芯片ISPl362等各种类型的接口。设计中选用WM873l芯片、USBOTG芯片ISPl362。系统的前端在FPGA上设计。ADCController控制芯片WM8731对信号进行采集,经根据系统设计要求灵活定制的NIOSIICPU控制送给由ISPl362Controller控制的芯片ISPl362处理,处理后的数据由USB总线传入PC机。目前,FPGA(现场编程逻辑门阵列)芯片密度己经达到百万门级,在一片FPGA芯片上可以实现如DSP、MCU、PCI总线控制和各种控制算法等复杂的功能。由于FPGA芯片密度的小段提高和新的EDA开发工具的使用,利用FPGA器件实现SOC己成为可能,这项技术称为嵌入式SOPC(可编程单芯片系统)。SOPC技术既具有基于模板级设计的特征,又具有基于ASIC的系统级芯片设计的特征,具有了可重构性、高效自动化的设计方一法。Alter推出的NIOSII正是为设计者提供了FPGA优化的灵活的嵌入式处理器,以及为SOPC设计了一套综合解决方案。设计者能够用AlteraQuartusII开发软件中的SOPCBuilder系统开发工具创建用户定制的CPU和外设,获得恰好满足需求的处理器系统。SOPCBuilder工具通过加载NIOSII核和外围接口的定义配置一个高集成度的SOPC系统的嵌入式处理器芯片。NIOSII处理器具有完善的软件开发套件,包括编译器、集3陕西科技大学硕士学位论文成开发环境(IDE)、JTAG调试器、实时操作系统(RTOS)和TCP/IP协议栈等。SOPC系统结合了嵌入式系统与FPGA优点,为高性能数字信号处理系统提供了新的设计方法。DE2板上的WM873l芯片是一颗低功耗的立体声Codee芯片,它内建了24bit(multi.bit)sigmadelta(∑.△)模数转换和数模转换,ADC和DAC都使用了过采样数字插值技术,它支持的数字音频的位数可以是16位至32位,采样率从8KHz到96KHz。在设计中选择16位分辨率,采样频率为48KHz。它能将从传感器接收到的很弱的输入信号直接转换成串行数字信号输出,而无需外部仪表放大器。由于采用∑.△的ADC,可以实现16位无误码的良好性能,片内可编程放大器可设置输入信号增益。通过片内控制寄存器调整内部数字滤波器。该芯片采用Sigma.deltaADC方式,它的工作原理思路就是“高采频+数字滤波”实现高速高精度数据采集,其内部的采样速率很高,通过采样和数字滤波技术实现低频信号的高分辨率转换和含有音频信号的低失真转换。ISPl362器件结合了高级Philips从机主控制器(PSHC)和PhilipsISPll8lB设备控制器(DC)的功能,是一种单片通用串行总线(USB)On.The.Go(OTG)控制器…l。USBOn.The.Go并不是一个的规范它是USB2.0规范的补充【-:】。USBOn.The.Go在USB2.0USB规范基础上支持双重功能设备既可用作主机也可用作外设。ISPl362器件完全符合On.The.Go规范(USB2.O补充规范)。主机和设备控制器遵循USB2.0的要求,支持全速(12Mbit/s)和低速(1.5Mbit/s)的数据传输。设计中选择ISPl362器件作外设。第二,通过调用动态链接库(DLL),在LabVIEW平台上进行频谱分析仪应用程序的开发。采用Windows操作系统I/O设备驱动原理与动态链接库技术相结合的方法,开发出了具有USB通信程序模块接口的DLL,在LabVIEW采用其外部代码接口机制调用该DLL,完成整个数据的传递过程,基于LabVIEW完成频谱分析。动态链接库(DynamicLinkLibrary)是一个可以多方共享的程序模块,内部对共享的例程和资源进行封装。动态链接库文件的扩展名一般是.dll,也可能是.drv、.sys或.fort。DLL和可执行文件(EXE)非常相似,最大的区别在于DLL虽然包含了可执行代码却不能单独执行,必须由Windows应用程序直接或间接调用。采用动态链接方式时,所调用的函数并没有被复制到应用程序的可执行文件中,而仅仅在可执行文件中描述了调用函数的信息,往往是重定位信息。仅当应用程序运行时,在Windows的管理下,应用程序与对应的DLL之间建立链接关系。当执行DLL中的函数时,根据链接产生的重定位信息,4基于LabVIEW的数字频谱分析仪的设计Windows转去执行DLL中的相应代码。作为自动化测量领域的专业软件,数字信号处理是LabVIEW的重要组成部分之一。LabVIEW是美国国家仪器公司(NationalInstruments,NI)开发的一种图形化的编程语言。图形化的程序语言,又称为“G”语言。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图。高效、强大的数字信号处理功能也是LabVIEW的重要优势之一【131。它将信号处理所需的各种功能封装为一个个的VI函数,我们利用这些现成的信号处理VI函数可以迅速地实现信号的频谱分析,而无需再为复杂的数字信号处理算法花费精力【141。鉴于以上各点,我们设计了基于LabVIEW的数字频谱分析仪。另外,从理论上讲,这种设计频谱分析的方法可以方便地完成信号实时高分辨的频谱分析1151基于LabVIEW的数字频谱分析仪的设计2数字频谱分析仪开发环境简介LabVIEW开发环境虚拟仪器(VirtualInstrument,缩写为VI)是基于计算机的仪器,是将仪器装入计算机,以通用的计算机硬件及操作系统为依托,实现各种仪器功能[161。虚拟仪器和传统仪器的基本结构的比较如表2.1:表2.1虚拟仪器和传统仪器的基本结构的比较Tab2-1virtualinstrumentandtraditionalinstrument’Sbasicstructurecomparison2.1传统仪器关键是硬件开发与维护的费用高技术更新周期长价格高生产商定义仪器功能系统封闭、固定不易与其他设备连接虚拟仪器关键是软件开发与维护的费用低技术更新周期短价格低,并且可重复性与可配置性强用户定义仪器功能系统开放、灵活、与计算机的进步同步极易与其他设备连接与传统仪器相比,虚拟仪器在智能化程序、处理能力、性能价格比、可操作性等方面都具有明显的技术优势[171,具体表现为:智能化程度高,处理能力强。虚拟仪器的处理能力和智能化程度主要取决于仪器软件水平。用户完全可以根据实际应用需求,将先进的信号处理算法、人工智能技术和专家系统应用于仪器设计与集成,从而将智能仪器水平提高到一个新的层次。复用性强,系统费用低。应用虚拟仪器思想,用相同的基本硬件可构造多种不同功能的测试分析仪器,如同一个高速数字采样器Ds-20】,可设计出数字示波器【:·】、逻辑分析仪、计数器等多种仪器。这样形成的测试仪器系统功能更灵活、系统费用更低[221。通过与计算机网络连接,还可实现虚拟仪器的分布式共享,更好地发挥仪器的使用价值[231。可操作性强。虚拟仪器面板可由用户定义,针对不同应用可以设计不同的操作显示界面。使用计算机的多媒体处理能力可以使仪器操作变得更加直观、简便、易于理解,测量结果可以直接进入数据库系统或通过网络发送。测量完后还可打印,显示所需的报表或曲线,这些都使得仪器的可操作性大大提高。虚拟仪器实际上是一个按照仪器需求组织的数据采集系统【24】。虚拟仪器的陕西科技大学硕士学位论文研究中涉及的基础理论主要有计算机数据采集和数字信号处理。目前在这一领域内,使用较为广泛的计算机语言是美国NI公司的LabVIEW。LabVIEW(LaboratoryVirtualinstrumentEngineering,实验室虚拟仪器工程平台)是美国国家仪罂公司(NationalInstruments,NI)开发的一种图形化的编程语言。图形化的程序语言,又称为“G”语言。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图,使编程简单直观。以下分别介绍LabVIEW程序构成、LabVIEW控制选项板、LabVIEW函数选项板、LabVIEW工具选项板、LabVIEW数据线、数据流和数据类型、LabVIEW控制量与显示量等。1)LabVIEW程序构成双击LabVIEW快捷图标.出现启动画面,单击其中的NewVI,打开一个新的LabVIEW程序,可以看到它由前面板和流程图组成。前面板窗口是圈形用户界面,也就是vI的虚拟仪器面板,相当于实际仪器的控制面板,它将用户和程序联系起来,是程序运行时显示和输入的交互窗口,如图2一l所示。图2-1前面板窗口Fi92—1Frontpanelwindow8基于LabVIEW的数字频谱分析仪的设计流程图窗口提供vI的图形化源程序.相当于实际仪器箱内部,在流程圈中程序员用图形语言编写LabVIEW程序源代码,以控制和操纵定义在前面板上的输入和输出功能。如图2-2所示的流程图,上面包括前面板上的控件的连线端子,还有一些前面板上没有,但编程必须有的东西,例如结构和连线等。2)控制选项扳功能介绍只能在前面板窗口中使用,通过前面板窗口Windows—ShowControlsPalette打开,也可以在前面扳窗口中空白处单击右键打开。该选项板用来给前面板设置各种所需的输出显示对象和输入控制对象。模块图标右上角有的表示有于选项板,单击模块圈标可以访问子选项板。3)函数选项板功能介绍只能在流程图窗口中使用.通过流程图窗口Window—ShowFunctions立件o■辑∞蔓看凹巧目(巳)槲#蛐工J舡)窗口幽帮助凹恼翮网萄研司囤固固圉剥1#胂噼}#洲‘i垩翌二j团q擅素I==壹和●,lo事#¥:一~—圈…………困圜囵圈圈圈目一j一圃屠I圈圈圈圜圈霜I屠I圈2-2流程图窗口Fi92-2Blockdiagramwindow陕西科技大学硕士学位论文Palette打开,也可以在路程图面板中空白处单击右键打开。函数选项板提供创建流程图的工具。其与控制选项板基本相同,模块图标右上角有的表示有子选项板,单击模块图标可以访问子选项板。4)工具选项板功能介绍通过WindowsShowToolsPalette打开和关闭。它提供了各种用于创建、修改和调试VI程序的工具。当从选项板内选择了任一种工具后,鼠标箭头就会变成该工具相应的形状。5)数据线、数据流和数据类型在流程图上,模块接口之间的连线就是数据线。数据通过数据线在模块之间传递。LabVIEW不像一般语言按照语句的顺序执行,它是依靠在数据线上传递的数据来控制程序的,只有当模块要求的输入数据完全到达这个模块时才能执行,然后向其所有的输出端口输出数据,这些数据再沿数据线流向其它模块。这就是LabVIEW的数据流工作方式。前面介绍过,可以通过加亮执行观察它的数据流是如何工作的。当你连线时,LabVIEW会提示该接口的名称,只能在同一数据类型的端口之间连线,不同类型的数据连线的颜色和形状也不同。错误的连线会表示成黑色虚线,这时你应将连线工具移动到它上面,LabVIEW会给出两端的数据类型信息,你可以检查并改正。添加新的模块和连线可能会对已设置好的部分有影响,而且原来的错误连线也可能对新添加的连线有影响。LabVIEW的基本数据类型有五种:Numeric(数值),Boolean(逻辑),String(字符串)、Enum(枚举)。还有一种叫Ring(环型枚举),和Enum很类似,可以循环枚举。例如,Numeric类型的数据按精度有分若干种类型,与标准C++的数据类型基本是一致的。可以在数值对象上点右键,通过弹出菜单中Representation修改。6)控制量与显示量在LabVIEW中,一个数字量(numeric)、布尔量(boolean)、字符量(string)等都有控制量(contr01)和显示量(indicator)的区别。控制量用于控制程序,它相当于仪器上的控制按钮,如开关、旋钮等。显示量用于显示程序运行的结果,它相当于仪器上的显示部件,如显示屏、指示灯等。LabVIEW的核心概念就是“软件即是仪器”,即虚拟仪器的概念。利用LabVIEW包含的大量的工具与函数可以进行数据采集、分析、显示与存储等。10基于LabVIEW的数字频谱分析仪的设计2.2NIOSII简介(1)NIOSII软核处理器开发环境随着EDA技术及微电子技术的飞速发展【:sl,现场可编程门阵列(FieldProgrammableGateArray,简称FPGA)的性能有了大幅度的提高,FPGA的设计水平也达到了一个新的高度。传统的嵌入式系统设计方法已不能适应当前设计的需要。基于FPGA的嵌入式系统设计为现代电子产品设计带来了更大的灵活性,以Altera公司开发的NiosII软核处理器为核心的SOPC(SystemonProgrammableChip)【26】系统便是把嵌入式系统应用在FPGA上的典型例子。QuartusII软件是美国Altera公司的可编程逻辑开发工具,它根据设计者需要提供了一个完整的多平台开发环境,其集成开发环境包括:系统级设计,可编程逻辑器件设计、综合、布局和布线,验证和仿真【27】。且提供了可编程片上系统(SOPC)设计的综合开发环境,是进行SOPC设计的基础【:。】。SOPCBuilder是集成在QuartusII内部的一个SOPC系统级开发工具,利用其可以很方便的构建一个SOPC系统,SOPC工具内部已经集成了许多免费的组件供设计者调用,用户还可以自己订制外设甚至指令,设计时用户只要按需添加就可以构建出属于自己的资源合理的系统,SOPCBuilder便可以自动生成每个硬件部件的片内总线结构,仲裁和中断逻辑,还会为后续的软件设计生成符合订制系统特性的头文件,这些头文件定义了存储器映射、中断优先级以及每个外设寄存器空间的数据结构[291,而且一旦硬件系统发生改变,SOPC灵活性是一般的硬核处理器所无法完成的。NiosBuilder会自动更新这些头文件,从而为软件开发者提供了一个自动配置的接口,这种II集成开发环境(IDE)是NiosII系列嵌入式处理器的基本软件开发II工具,所有的软件开发任务都可以在Nios调试和程序下载。NiosIIIDE下完成【,01,包括编辑、编译、IDE提供了一个统一的开发平台,用于所有NiosII处理器系统。仅仅通过一台PC机、一片Altera的FPGA和一根JTAG下载线,软件开发人员就可以往NiosII处理器系统写入数据并与NiosII处理器系统进行通止兰1日o(2)NIOSII内核设计框图NiosII包括三种内核[311,即快速的NiosII/f(最高性能的优化)内核、经济的NiosII/e(最小逻辑占用的优化)内核以及标准的NiosII/s(平衡于性能和尺寸)内核,每种内核根据不同的性能而优化。考虑到性能和成本,通常采用NiosII标准内核设计,如图2.3所示。NiosII嵌入式CPU支持32位指令集、32位数据线宽度、32个通用寄存器、32个外部陕西科技大学硕士学位论文中断源、2GB寻址空间,包含高达256个用户自定义的CPU定制指令。其可选的片上JTAG调试模块是基于边界测试的调试逻辑,支持硬件断点、数据触发和片外片内的调试跟踪。博恼调试模块NIOSIII毒l油通用异步收发器Data亨巴卜+Int.宝定时器处理器内核片上ROM片上RAM箸串行外设接口通用I/O以太网接口喜吲莹。图2.3Fi92-3NiosNioslIII标准内核设计框图IPdesignstandarddiagram(3)NIOSII开发流程利用Altera的强大的SOPCBuilder系统开发工具和QuartusII设计软件(SoPCBuilder和NIOSIDE)等可以完成NIOSII内核的设计[321。NIOSCPU内核设计流程如图2-4所示。NIOS是一个可灵活定制的CPU,它的外设是可选的IP核或自定制逻辑,可以根据系统的设计要求,通过SOPCbuilder向导式的界面定制裁剪得当的SOPC系统。在设计规划后,分为硬件开发和软件开发两个流程。第一,NIOS的硬件开发流程。NIOS的硬件设计流程就是为了定制合适的CPU和外设,其工作环境是AlteraQuarlusII中的soPcBuilder。通过采用SOPCBuilder工具,用户可以很方便地将处理器、存储器和其他外设连接起来,组成一个完整的嵌入式系统。SOPC从内部的角度,主要包含两个部分:图形用户界面(GUI)和系统生成程序。GUI创建系统PTF文件对系统进行描述,GUI内每个组件也可以提供自己的配置图形用户界面;系统生成程序创建针对目标器件的系统HDL描述。第二,NIOS的软件开发流程。当软硬件开发完成后,接下来就需要在NIOS开发板上实现一个要求设计的系统的原型。在这个软硬件原型上运行整个系统,测试是否达到要求。以下是Altera公司提供的开发工具进行的NIOS软件开发流程。NIOS软件开发流程如图2.5所示。Windows下的NIOS软件开发环境是一个用Cygwin模拟的Unix控制台环12基于LabVIEW的数字频谱分析仪的设计境。NIOS开发包编译程序支持C/C++或汇编语言源程序。通过使用在QuanusII中建立工程LI’在sopcBuilder中配置NiosCPU山是将Niosl为核添加到Q1laltusII原理图中’添加外设接口后对工程进行编译’疋打开NiosIDE,建立软件工程并对软件进行编译’足在QuartusII中对工程进行编译山是下载到开发板验证图2.4NiosCPU内核设计流程图Fi92-4NiosCPUIPDesignflowchart问题图2.5Nios软件开发流程Fig2-5Softhardwaredevelopingflowchart13陕两科技大学硕+学位论文Nios.build批处理命令或编写Makefile文件,开发人员可以方便地对软件源程序进行编译。编译后生成的二进制代码保存为S.record格式文件,另外也生成包含调试信息的代码文件。通过使用NIOS.run批处理脚本,可以将编译生成的可执行代码下载到开发板上,并且立即执行该代码。NIOS开发包重的GERMA监控程序允许用户运行可执行代码,进行内存读写操作,装在大块代码到内存区,以及Flash内容擦写操作等。NIOS开发板一般将STDIO执行到一个串口或NIOSOCI调试器模块,并将Nios—run所在的控制台窗口作为消息显示终端。通过使用NIOS开发板自带的GNUdebugger调试器可以对Out格式的可执行代码进行调试。如果调试过程中发现问题,那么就返回暗道重新修改源程序,然后编译,再次调试,直到程序调试通过。14基于LabVlEW的数字频谱分析仪的设计3数字频谱分析仪系统概述3.1频谱分析仪总体方案的确定频谱分析仪是在频域上观察电信号特征,并在显示仪器上显示当前信号频谱图的仪器。从实现方式上可分为模拟式与数字式两类方案。但是模拟频谱分析仪调试复杂,短期实现有难度,尤其是在对频谱信息的存储和分析上,逊色于现代数字频谱仪方案[331。数字式频谱仪组成框图如图3.1所示。图3—1数字式频谱仪组成框图Fi93-1Digitalspectrometercompositiondiagram数字式频谱仪通常使用高速A/D采集当前信号,然后送入处理器处理,最后将得到的各频率分量幅度值数据送入显示器显示。按照对信号处理方式的不同,数字式频谱仪可分为以下三种:基于数字滤波法的数字式频谱仪、基于外差原理的数字式频谱仪、基于FFT技术的数字频谱仪。以上三种数字式频谱仪较传统频谱分析仪有一定的优势,但是他们都需要用硬件来时实现复杂的频谱分析。随着计算机技术的发展和普及,虚拟仪器技术的出现,充分利用计算机来实现和扩展传统仪器功能,这样便构成了一台从外观到功能都完全与传统数字频谱分析仪一致,同时又充分享用计算机智能资源的全新的仪器系统。鉴于以上各点,本文以美国NI公司的LabVIEW为软件开发平台设计虚拟频谱分析仪,设计采用的是数字处理式频谱分析原理,并充分结合EDA工具、FPGA、和NIOSII的特点。3.2基于LabVIEW的数字频谱分析仪的设计方案本项目以DE2板上的NIOSII系统为基础。通过DE2板上的芯片ISPl362收集采集卡上的数据,经芯片ISPl362的处理,再通过USB总线传入PC主机,最后有驱动程序发给LabVIEW进行频谱分析,完成整个数据的传递过程。设计中数据传输方式充分考虑NIOSII的特点,在各个环节上都以低耗时为设计目标,故总体数据流程构思如图3.2所示。15陕西科技大学硕士学位论文PC主机L■bVIEW臼日臼日◇图3-2谱分析设计的总体数据流程设计图Fig3-2Generaldataprocessdesigndrawingofspectrumanalysisdesign为保证ADC输入动态范围的要求和对特定干扰的抑制,信号首先进行预处理。根据采样定理,输入ADC的信号必须小于采样频率的1/2。所以输入信号在进入ADC前要经过抗混叠滤波,ADC是完成从模拟到数字的关键环节,它的精度和速度直接决定了频谱分析仪的性能,所以ADC尽量选用精度和速度都比较高的芯片。为了控制及协调整个系统的数据传输以及必要的数据处理并且为每个部分电路提供工作时钟,我们通过使用CyelonelI中的硬件PLL提供基时钟,然后用计数器对基时钟进行分频得到个环节所需要的时钟。3.3频谱分析仪的性能指标1)频率分辨率缈设采样频率Fs,采样点数为N,那么其极限分辨率为Af=Z/N。这样,理论上我们就可以任意高的频率分辨率。分辨率指示表如表3.1所示。表3.1分辨率指示表Tab3.1Resolutioninstructionsheet汰16KHz48KHZ96Khz166425610241kHz3kHz6kHz250Hz750Hz1.5kHz62.5Hz187.5Hz375HZ1.5625Hz4.6875Hz9.375HZ2)测量频率范围:0Hz.20KHz3)A/D转换:l6BIT4)处理速度系统工作主频为50M时,输入数据传输速度是V=20ns/16BIT数据,那么做一次FFT处理需要的时间V*N。就这样来算,作一次l024处理也不过20uS。16基于LabVlEW的数字频谱分析仪的设计这样的速度已经能够满足实时处理的要求。5)灵敏度:AD采样的参考电压为1V,位数为16BIT,那么灵敏度为1/(2^16)V:6)提升空间由于A/D采样频率的,了系统的测量频率范围,这一点可以选择采样频率更高A/D来克服。3.4主要芯片介绍ALTERA推出的CyloneIIFPGA是Cylone系列FPGA中的最新产品。这个系列的产品提供了于其上一代产品相同的优势一一用户定义的功能、领先的性能、低功耗、高密度以及低成本。CyloneII器件扩展了低成本FPGA的密度、使之最多达到68416个逻辑单元(LE)和1.1MB的嵌入式存储器。CylonelI器件采用90nm、低k值电介质工艺、通过使硅片面积最小化,可以在单芯片上支持复杂的数字系统。TaCylonelI器件可提供可以实现NIOSII嵌入式处理器系统,NIOSII系统的处理器和外围设备占用600~2000个逻辑单元。开发人员通过向NIOSIl2处理器指令集中增加定制指令,可以加快软件算法的运行。定制指令可以在一个时钟周期内完成复杂的任务,为系统优化提供一个高性价比的解决方案。CylonelI器件最多内置4个增强型锁相环、可提供高性能的时钟管理功能,如频率合成、可编程相移、片外时钟输出、可编程占空比、失锁检测及高速差分时钟信号的输入和输出等。本设计采用ALRERADE2开发板是ALRERA公司的合作伙伴友晶科技公司研制的SOPC开发板、可以完成可编程逻辑器件、EDA、SOPC、NIOSII嵌入式系统等方面的实验与开发。DE2开发板上包含CylonelI系列的EP2C35F672C6芯片(含35000逻辑元件)、8MB的SDRAM、512k的SRAM、1M的FLASH、16x2的LCD、8只七段数码管、18只红色发光二极管、9只绿色发光二极管、还有USB接口芯片ISPl362、VGA、RS232、SP/2等各种类型的接口[341。17基于LabVIEW的数字频谱分析仪的设计4频谱分析仪的设计4.1频谱分析仪的设计图4-1系统设计框图Fig4-1Systemstructureblockdiagram如图4.1系统设计框图所示,系统的大部分在FPGA上设计的。ADCController控制芯片WM873l对信号进行采集,经根据系统设计要求灵活定制的NIOSIICPU控制送给由ISPl362Controller控制的芯片ISPl362处理,处理后的数据由USB总线传入PC机。最后,采用Windows操作系统I/O设备驱动原理与动态链接库技术相结合的方法,开发出了具有USB通信程序模块接口的DLL,在LabVIEW采用其外部代码接口机制调用该DLL,设计了基于LabVIEW的频谱分析。系统单元设计包括ADC单元设计、NIOS设计,以下分别是各个单元的设计。4.2IICPU的设计、USB接口单元ADC单元设计ADC采集速率直接了频谱分析仪的频率范围,综合现有的资源我们的设计定位在音频范围的实时频谱分析。选择ADC的主要考虑因素的是转换速度和精度。常见的ADC器件有8位,10位,12位,14位,16位等。为获得良好的仪器线性度和高分辨率,对信号进行数据采集的ADC需要l2位一16位的分辨率,但高的位数意味着大的数据量。高的转换速度可以获得高采样频率,按采样原理可知,ADC的取样率最少等于输入信号最高频率的两倍,亦即频率上限是lOkHz的实时频谱分析仪要求ADC有20kHz的取样频率。在设计中选用DE2板上音频芯片的集成ADC。19陕两科技大学硕士学位论文4.2.1WM8731芯片简介DE2板上的WM8731芯片t35]是一颗低功耗的立体声Codec芯片,它内建了24bit(multi.bit)sigmadelta(∑.A)模数转换和数模转换,ADC和DAC都使用了过采样数字插值技术,它支持的数字音频的位数可以是l6位至32位,采样率从8KHz到96KHz。它能将从传感器接收到的很弱的输入信号直接转换成串行数字信号输出,而无需外部仪表放大器。由于采用∑.△的ADC,可以实现16位无误码的良好性能,片内可编程放大器可设置输入信号增益。通过片内控制寄存器调整内部数字滤波器。该芯片采用Sigma.deltaADC方式,它的工作原理思路就是“高采频+数字滤波”实现高速高精度数据采集,其内部的采样速率很高,通过采样和数字滤波技术实现低频信号的高分辨率转换和含有音频信号的低失真转换。Sigma.delta转换器的主要优势在于其较高的分辨率,原理框图如图4.2所示。数据出图4-2sigma-deltaADC原理框图Fig4-2Schematicdiagramofsigma-deltaADC4.2.2WM8731芯片的控制(1)数字音频接口(DIGITALAUDIOINTERFACE)模式选择WM8731的数字音频接口是数据的输入输出接口,串行数据的传输支持12S模式,Rightjustified模式,Leftjustified模式,DSP模式,这些模式通过控制字选择。设计中选择Leftjustified模式并且让WM8731工作在常规模式下,时序如图4.3所示。其中:BCLK:数字音频接口时钟信号(bit时钟);ADCLRC:数字音频接口ADC方向的帧信号;ADCDATA-数字音频接口ADC方向的数据输出。(2)WM8731芯片的配置WM8731的配置接口支持12C模式,也支持SPI模式,通过CSB位控制。但从电路图中我们可以看到在DE2板WM8731的CSB位已经接地,所以我们只能用12C模式。12C时序如图4.4所示:基于LabVIEW的数字频谱分析仪的设计图4-3WM8731工作在常规模式下的时序Fig4-3TimesequenceofWM8731undermain.model图4.4WM873112C时序图Fig4-4TimesequenceofWM873112CWM8731可以用NIOSII系统通过12C接口来控制,也可以由HDL编写逻辑电路通过实时电路来直接配置。用NIOSII来控制仍然需要HDL语言描写的接口,利用查询或中断方式读取外部控制信号,然后通过12C总线向WM8731写入控制字,而用HDL编写逻辑电路来配置简化了控制过程,避免了软件执行过程中的不稳定,而且实时性好。因此我们这里采用后者。12C模块的VerilogHDL描述为(部分)如下:always@(negedgeif(!RESET)beginelseRESETorposedgeCLOCK)beginSCLK=l;SDO=I;ACKl=0;ACK2=0;ACK3=O;ENDI=I;endcase(SD—COUNTER)6’dO//start6’dl6’d26’d36’d46’d56’d6:beginSD=12C—DATA;SDO=0;end:SCLK=0;//SLAVEADDR:beginACKl=0;ACK2=0;ACK3=0;ENDI=0;SDO=I;SCLK=1;end:SDO=SD[23];:SDO=SD[22];:SDO=SD[21】;:SDO=SD[20];216’d76’d86’d9:SDO=SD【19】;:SDO=SD【I8】;:SDO=SD[17】;6’d10:SDO=SD[16】;6tdl1:SDO=1’bl;//ACK6·d12:begin6’d136’d146’dl56’d16SDO=SD[15】;ACKI=12C—SDAT;end:SDO=SD【14】;:SDO=SD[13】;:SDO=SD[12];:SDO=SD[11】;6’d17:SDO=SD[101;6‘dl86’d196·d206'd21:SDO=SD[9];:SDO=SD[8】;:SDO=1’bl;//ACK:beginSDO=SD[7];ACK2=12C—SDAT;end6’d22:SDO=SD[6];6’d23:SDO=SD[5】;6’d24:SDO=SD[4];6’d256’d266’d276’d286td29//stop6·d30:beginSDO---1lbO;SCLK=Itb0;ACK3=12C—SDAT;end6·d31:SCLK=I’b1;6'd32:beginSDO=I’bl;ENDl=1;endendcaseend:SDO=SD[3】;:SDO=SD【2】;:SDO=SD【1】;:SDO=SD[0];:SDO=1’bl;HACKendmodule【3)WM8731采样频率的控制WM8731提供了两种模式产生所需要的采样频率:常规模式和USB模式(通过控制字选择)。在常规模式下,用户用外界时钟控制采样频率,这种模式控制比较简单,但所需要的时钟比较特殊(12.288M、11.2896M、18.432M、16·9344M),DE2基于LabVlEW的数字频谱分析仪的设计板上没有,而且无法由锁相环得到。在USB模式下,用户必须通过12M的时钟输入得到8k到96k的采样频率,但这时BCLK也是12M,这样在一个采样周期与BCLK对应的只有很小一段是数据(其余为零),所以要加保持逻辑电路。设计中选择USB模式,l2M的时钟由系统锁相环得到。然后加串并转换电路,和计数保持电路得到并行输出数据。4.2.3ADC单元硬件电路设计ADC单元的框图如图4.5所示,图4-6为硬件电路,图4-7为其模块框图。其中由R9、C6、R7、C3构成前置滤波器(抗混叠滤波器),保证输入信号范围约为20HZ一20KHZ(其中苫l--47us,z2=330us)。图4.5ADC数据流程Fig4-5DataflowofADC118680f2C3IU函一U∞MK泰Ⅲ口o,、I鹜岌一1PlZ—U喜三m一一一一一吩叩跽凸《熬薹MBIAVMl]AGNAVDROLLOUHPGNAGND119J3LINEOUT∞47K仪谕爿-f量霉一盥pl图4-6AGNDAGNDAGNDADC单元的硬件电路Fig4-6ADCunitschematic陕西科技大学硕士学位论文图4.7ADC模块图Fig4-7ADCModulechart4.3NIOS4.3.1NIOSII设计II硬件的设计1)串行外设接口PIOPIO按照功能可以分为输入PIO、输出PIO和三态PIO。PIO通过三态总线与NIOS进行相连。2)串口UARTUART即通用异步收发器(UniversalAsynchronousReceiverTransmitter),一般称为串口。由于在两个设备之间使用串口进行数据通信,需要的连接线非常少,而且相关的工业标准RS232、RS485、RS422提供了标准的接口电平规范,因此在工业控制和嵌入式系统中被广泛使用到。本设计中可以通过UART连接到PC机的的串口,进行基于SOPC系统的软件调试。3)TIMER定时器和单片机不同,在SOPCBuilder中可以随意的增加定时器IP,就这么容易。定时器模块可以作为周期性脉冲发生器或系统的看门狗定时器,不过这个定时器IP没有计数功能。4)SDRAM外存储器NIOSII可以工作在100多MHz,但是DE2板子上的外围器件不一定能以基于LabVIEW的数字频谱分析仪的设计同样的速度跟着工作。在SOPCBuilder中可以很方便的添加SDRAM控制器IP,所以很容易就把SDRAM连接到CPU上,相对于硬件电路增加一个SDRAM,SOPCBuilder真是灵活至极。5)SRAM和Flash外存储器存储器一般都由外接的SRAM和Flash构成。由于现有的FPGA还不能集成大容量的SRAM和FlashROM,而SOPC处理往往是一个较为复杂的系统,对应的代码量较大,需要的数据存储器也较大,只能通过外接的方式来解决。通过Avalon三态总线桥,外部的SRAM和Flash就可以接入到NIOS中,接入了高速的SRAM,其作用类似于PC机系统的内存,用于存放正在执行的程序和数据。Flash加入类似于PC机接入了硬盘,用于存放程序和数据,并且,在软件调试中,需要将调试好的程序烧写到Flash中。NIOS的硬件设计主要包含两个部分:图形用户界面(GUI)和系统生成程序。GUI创建系统PTF文件对系统进行描述,GUI内每个组件也可以提供自己的配置图形用户界面;系统生成程序创建针对目标器件的系统HDL描述。鉴于空间有限,系统生成程序不在这里一一列举。图形用户界面图4.8所示。瀚…轴噍知№怕2∞蚶蛐∞cIo味{e-∞醐囡田q附№lPr00e簟蝌…:哟l—_.,^磁●l●I●●●●●●k01SOSTtf团帕耐—m—一^W幻n^■Tastsle旨啕≯回融ma_lluhFhsh■嗍(cFDws_dkqm_dk《0x014●●●●●hOlYfffff圈蕾iidrMItgXC^M团or此npM删删甜㈣C吖灯—嚣田雠mp..nwms■ns_dks聊s_dk崭●l●I,●1●●●010l’口Ifff回田ltq_t_盯AOU^RTm"s_dk精●l●I50412●OzOt,¨12r回田U∞q嘲●PlO(Psr如lI妫s聊s_dk50405f回国Um_1崔ilPIo㈣蒯嘞—憎.声★5040505040,f回田班玎TO一PlOCP*rsS翻I瑚Ws_ak《●IOl!040.oOzOI,040*f回田囊■TCHPIo(pIr删嘞—俸.嗣k耐●I●I5041b0回田Ws_dktlnWh协州韵m一竹●.宴★旗●101’04●●●OxO!,0401f团田憎ghJ●·簿脯一●tarv■Tmwrsysak磊●l●t,040tOOz01¥0405f回母均瞻Ⅵ回田帅,鼬爿啊呐■盯日,cSS吖■F黼O弹由嘶SwtemD轴蚋砷—■sl一_dk《●嚏●l■●●1t●OzO!,O“2fslm_dk508fff囡田p■PLLdk《●l●I10404050405f囱田嘲口冒●cl吖Ll∞I码一.,^稚●I●t9040c00:01,040cf回鄹啪n稚●101584%●囡田姊'撇黼(R5-232洲细哟slm_dkOzOI,O●OTfPIO(P■■嘲vo)Ws_dkOxO000000f翻圈N'CI盯OlOl,04lOf团田朋瞰T_一PlO【P¨稿峭l铆●一。J:^癖h01'041●●P婚(P,rshl嘞s"s_dk赫●l●lS0411001101’¨ltf图4-8图形用户界面Fi94—8Graphicaluserinterface4.3.2NIoSII软件的设计目前NiosII的开发都是在HAL(hardwareabstractionlayer)的基础上进行的【361。HAL系统库是一个轻量级的运行环境,提供了简单的和硬件通讯的设备驱动程序。HALAPI集成了ANSIC标准库,这些API允许调用标准C函数(例如:printf,fopen,fwrite等等)去存取设备。HAL类似于ARM系统中的BSP(board-supportpackage),提供了一个一致的设备存取界面。由于SOPCBuilder和NIOSIIIDE紧密的集成,在SOPCBuilder生成硬件系统以后,陕两科技大学硕十学位论文IDE能够自动生成对应的客户HAL系统库。更新硬件系统设置以后,NIOSIINIOSIIIIIDE能自动更新HAL的驱动设置。在创建软件项目的时候,NIOS系统库137·35]。IDE自动生成并管理HAL在NIOSII软件系统开发中,主要实现NIOSII的中断。NIOSII的中断处理方式带有典型的RISC处理器的特征,所有的中断处理都从同一入口进入,然后由软件加以分配。负责分配工作的软件系统ISR,它是由开发系统提供的,自动的连接到可执行程序上。系统ISR维护着一个中断向量表,表中的每一项代表一个专项处理程序的入口。所有的专项处理程序都是由用户定义然后注册到中断向量表中的,叫做用户ISR。系统ISR的入口地址是在SOPC.Builder中定义的,叫ExceptionAddress。和中断有关的CPU寄存器有:ctl0、ctll、ctl3、ctl4。ctl0是程序状态字,它的bit0位是全局中断允许位,1代表允许,0代表禁止。ctl0是程序状字的堆栈,当发生中断时,由它保留一个程序状态字的备份。ctl3是中断允许寄存器,其中每一位控制着一个中断源,1代表允许,0代表禁止,共计32位。ctl4是中断申请寄存器,每一位对应着一个中断源的中断请求,l代表有中断,0代表没有…计32位。一个完整的中断必不可少的有两项:alt—irq—register()注册宏定义和中断服务程序ISR。alt—irq—register()是向系统ISR注册用户ISR的API函数。其原形为:intalt—irq—register(alt—u32id),void木context,void(宰isr)(void·,alt—u32)id代表被服务的中断向量号;context是运行参数指针,将来作为第一个参数传给用户ISR;ISR是一个函数指针,指向用户ISR入口;如果注册成功,函数返回O,并允许全局中断及被服务中断;不成功返回非0值。定义的用户ISR程序要符合统一的原形定义,即:Voidisr(void·context,alt—u32id)函数名没有特别的要求,与一般函数一样。入口参数与返回值要严格按标准形式定义,否则系统ISR将不能正确的对其调用。4.4USB接口设计USB(UniversalSerialBus)是一种快速的,双向的,同步传输的廉价的并可以进行热拔插的串行接口,有使用方便、速度快、供电、连接灵活、成基于LabVIEW的数字频谱分析仪的设计本低等优点1391。速度快是USB技术的突出特点之一。全速USB接口的最高传输率可达12Mb/s,而执行USB2.0标准的高速USB接口速率更是达到了480Mb/st40l。到目前为止,USB已经在PC机的多种外设上得到应用,包括扫描仪,数码相机,数码摄像机、音频系统、显示器、输入设备等【·11。因此,在设计中选用DE2板上带有OTG功能的主控芯片ISPl362,它具有比以往的USB芯片更强的OTG功能,可以支持设备之间点对点传输数据。4.4.1ISPl362芯片简介ISPl362器件结合了高级Philips从机主控制器(PSHC)和Philips控制器。USBISPll8lB设备控制器(DC)的功能,是一种单片通用串行总线(USB)On.The.Go(OTG)On.The.Go并不是一个的规范它是USB2.0规范的补充。USBOn—The.Go在USB规范基础上增加了以下几点:双重功能设备既可用作主机也可用作外设;主机处理协议HNP用于转换USB主机和外设功能;对话请求协议;除小和大功率之外增加了微功率选择;超小连接器。ISPl362器件完全符合On.The.Go规范(USB2.o+b充规范)。主机和设备控制器遵循USB2.0的要求,支持全速(12Mbit/s)和低速(1.5Mbit/s)的数据传输。PhilipsISPl362由OTG控制器、主机控制器、外设控制器、USB收发器、OTG收发器和缓存器等组成,通过内部集成的总线接口可与CPU连。4.4.218P1362芯片的控制(1)ISPl362控制芯片操作模式选择ISPl362还提供两个USB端口。端口1可进行软件配置,并可用作下行、上行或OTG端口。OTG口可以从主机转换为外设,或者从外设转换为主机。通过OTG补充规范的主机处理协议(HNP),OTG端口可以变成主机。端口2只用作下行传输。设计中选用ISPl362控制器作为设备。Al(引脚62)用于决定控制器工作于主机还是设备控制模式:0表示处于主机控制(HC)模式;1表示处于设备控制(DC)模式。我们设置A1为l状态,使ISPl362控制器处于设备控制模式,如图4.9所示。当Al为低电平时,ISPl362控制器处于主机控制(HC)模式;当Al为高电平时,ISPl362控制器处于设备控制(DC)模式。陕两科技大学硕士学位论文总线接口微处理器总线椿口O主机总线接口“/二1设备总线接口7^I图4-9主机/设备控制模式Fig4-9Host/Devicecontrolmodel(2)ISPl362控制芯片的配置而用HDL编写逻辑电路来配置简化了控制过程,避免了软件执行过程中的不稳定,而且实时性好。该模块的VerilogHDL描述为(部分)如下:always@(posedgebeginiCLKornegedgeiRST_N)if([iRST_N)beginTMP—DATA<=0;OTGADDROTGRDN<=O:<=l:OTG—WR—N<=1;OTGCSN<=1:<=0:TMPDATAoDATA<=O;oINTON0INTlendelsebeginODATAoINT0NoINTlN<=OTGDATA:<=OTGINTO;<=OTGINTl:<=iDATA;<=iADDR;<=iRDN:N<=1:<=1:TMP—DATAoTGADDROTGRDN28基于LabVIEW的数字频谱分析仪的设计<2OTG—WR—NOTG—CS—NendendassigniWR_N;<=iCS_N;OTG—RST—N=iRST_N;endmodule4.4.3USB接口软件设计USB应用系统软件设计分为三部分:设备固件(Firmware)、设备驱动程序以及LabVIEW操作界面程序。LabVIEW界面程序将在第5章中详细介绍。(1)设备固件设备固件(firmware)是储存在程序内存中的代码。它使得USB接口芯片与主机和外设中其它电路能够通信,因此固件程序包括响应主机要求部分和控制外设部分。本设计采用NIOSIIBuilder开发平台对底层固件程序进行具体设计。当PC机检测到ISPl362产生的中断时,屏蔽其他优先级较低的中断,根据计算机发送的命令进入相应的传输程序,由NIOS的设备功能向计算机传输数据。IICPU控制,通过ISPl362为了满足不同外设和用户的要求,USB提供了四种传输方式:控制传输,同步传输,中断传输和批传输。它们在数据格式、传输方向、数据包容量、总线访问等方面有着各自不同的特征:1)控制传输(ControlTransfer)。通常用于配置/命令/状态等情形;其中的设置操作setup和状态操作status的数据包具有USB定义的结构,因此控制传输只能通过消息管道进行;支持双向传输;对于高速设备,允许数据包最大容量为8,16,32或64字节,对于低速设备只有8字节一种选择;端点不能指定总线访问的频率和占用总线的时间,USB系统软件会做出;具有数据传输保证在必要时可以重试。2)同步传输(IsochronousTransfer)。是一种周期的、连续的传输方式,通常用于与时间有密切关系的信息的传输;数据没有USB定义的结构(数据流管道);单向传输,如果一个外设需要双向传输,则必须使用另一个端点;只能用于高速设备,数据包的最大容量可以从0到1023个字节;具有带宽保证,并且保持数据传输的速率恒定(每个同步管道每帧传输一个数据包);没有数据重发机制,要求具有一定的容错性;与中断方式一起占用总线的时间不得超过一帧的90%。3)中断传输(InterruptTransfer)。用于非周期的、自然发生的、数据量很陕两科技大学硕士学位论文小的信息的传输,如键盘、鼠标等;数据没有USB定义的结构(数据流管道);只有输入这一种传输方式(即外设到主机);对于高速设备,允许数据包最大容量为小于或等于64字节,对于低速设备只能小于或等于8字节:具有最大服务周期保证,即在规定时间内保证有一次数据传输;与同步方式一起,占用总线的时间不得超过一帧的90%;具有数据传输保证,在必要时可以重试。4)批传输(BulkTransfer)。用于大量的对时间没有要求的数据传输;数据没有USB定义的(结构数据流管道);单向传输,如果一个外设需要双向传输,则必须使用另一个端点;只能用于高速设备,允许数据包最大容量为8,16,32或64字节;没有带宽的保证,只要有总线空闲,就允许传输数据(优先级小于控制传输);具有数据传输保证,在必要时可以重试,以保证数据的准确性。设计中采用批传输数据。底层固件程序接收计算机发送的控制命令并将数据传送给计算机。部分代码见附录A。(2)USB设备驱动程序在Windows下,与USB#b设的任何通信必须通过USB设备驱动,这个驱动知道如何与系统的USB驱动和访问设备的应用程序通信。设备驱动用程序访问硬件设备的软件组件,使得应用程序不必知道物理连接、信号和与一个设备通信需要的协议等的细节,可以保证应用程序代码只通过外设名字访问外设或端口目的地。Windows下有一种驱动程序符合WDM1.0(Windows准,而这种标准同样也是WindowsNTDriverModel1.0)标4.0、Windows2000及以后的Windows操作系统所采用的驱动程序标准。本项目最终采用的驱动程序结构和设计方法都符合WDM1.0标准。驱动程序可以工作在两种模式下,一是核心模式(KernelMode),此类模式的驱动程序以后缀名为sys的文件存在于系统目录下;一是用户模式(UserMode),此类模式的驱动程序以可执行文件的形式存在,可以从任何路径运行。用户模式下的驱动程序较核心模式下的相对简单一些,但能实现的控制和通讯功能也相对较少一些。所以究竟设计哪种模式下的驱动程序,还需要开发者根据具体的情况选择。本设计中设计用户模式下的驱动程序。在Windowsxp下编写驱动程序,必须使用特定的编译器。Microsoft为开发者提供了一个软件包DeviceDriverKit,简称为DDK,其中包含了驱动程序的编译器和调试工具,以及帮助文档和一些范例。DDK代码编写使用C/C++语言,只是编译、连接需要使用VisualC++和DDK的工具。所以使用十分简单。DDK为开发者提供了各类驱动程序的源代码,对开发者编写自己的驱动程序很有参30基于LabVIEW的数字频谱分析仪的设计考价值。WindowsXP提供的HID设备专用函数在用户模式下的Hid.dll,通过WindowsXPDDK的编译器开发者可以很容易地将自己的驱动程序里的调用同这个文件联系起来。这些函数按功能可以分为两类。一类是用于初始化USB设备,建立该设备的一个客户驱动;另一类是用于完成设备数据的输入和输出。典型的函数例如HidDGetConnguration9(),可以将HID设备的配置信息传给驱动程序;HidD—SetConnguration(),可以设置HID设备;HidP—GetUsage0,可以得至UHID设备数据报告中的二进制值等等。在本设计中最终的实现只有一个用户模式下的EXE文件,其功能主要是从WINDOWSXP底层驱动获得HID设备的信息和数据报告。HID设备管理模块大量调用了WINDOWSXP系统提供的设备专用函数,完成与设备缓冲区的连接、对设备的识别、对设备数据报告的获取等功能。鉴于篇幅有限程序源代码无法提供,这里只能将各函数调用步骤和流程表提供如下。HID设备管理模块分为两个部分,包括HID设备链表的建立和获得单个HID设备的信息。第一部分是为WINDOWSXP中已安装的所有HID设备建立一个信息链表,这个链表就成为驱动程序的其他部分提供各个HID设备的接口。图4.10仅仅是这一部分中最关键部分的流程和函数调用介绍。第二部分是获得单个HID设备的信息,不但有利于驱动程序正确地读取设备的数据报告,也可以使驱动程序从众多的HID设备中分辨出自己要控制的设备,然后即可建立与该设备的直接连接,为以后读取数据报告作准备。当程序执行到最后一步时,驱动程序已经获得了数个结构,存储或是指向HID设备的各项设定和属性。这时程序可以很简单地将设备与预先的设定进行比较,以判断是否是自己要控制的设备。如下图4.1l所示。在与HID设备建立直接连接之后,驱动程序就可以直接读取设备缓冲区内的数据了。但这里有一个同步的问题就是驱动程序读取缓冲区的速度需要和设备发送数据的速度相当。如果驱动程序读取数据较慢,则有可能造成WINDOWSXP系统分配给设备的缓冲区被充满,而这时如果设备再向主机发送数据就会发生数据的丢失;如果驱动程序读取数据较快,那么则有可能因为缓冲区无数据而使读取缓冲区的函数无法返回,最终造成驱动程序的停顿和系统资源的浪费。所以本系统为了不的丢失采集的数据,以牺牲部分系统资源为代价,始终保持对设备缓冲区的读取状态。由于WINDOWSXP的进程调度遵从抢占式多任务陕西科技大学硕士学位论文调度,当缓冲区无数据时,系统不会始终让驱动程序占据CPU,所以虽然系统资源有所浪费,但使用效果还是让人满意的。图4.10HIDi委:备链表的建立Fi94-10HIDequipmentchaintableestablishment获得为m设备信息链表节点0l为HID设备建立一个虚拟文件对象l(CrcatFilc)山获得HID设备的数据区指针l(HidD_GetdPreparsedData)0获得HID设备的属性(HidD—GetAttributes)0获得HID设备的CAP数据结构l(HidP_GctCaps)士l查询HID设备的各项设置判断是否是驱动需要控制的设备图4.11查询和判断HID设备信息Fi94-11Inquiresandjudges32theHIDequipmentinformation基于LabVIEW的数字频谱分析仪的设计5虚拟仪器的应用LabVIEW应用程序与USB的连接USB总线完成对外部数据实时高速的采集,把采集的数据传送到主机,需要通过LabVIEW的功能模块完成数据显示、分析和存储,但此时在LabVIEW下编写的应用程序仍然不能够操作USB发送的数据【424·l,为了解决此问题可以采用如下三种方法:第一种方法:采用动态数据交换(DynamicData5.1Exchange)。动态数据交换是windows提供的进程间通信的一种机制。它是基于windows的消息系统。要实现LabVIEW与数据采集卡的通信,就需要在windows环境下编写一个ODE的服务器程序和LabVIEW环境下的DDE客户程序。DDE的服务器程序可以用C++语言编写,完成与数据采集卡的连接和数据采集,DDE客户程序通过调用LabVIEW提供的DDE模块在LabVIEW平台下生成。这种方法的缺点就是如果客户程序没有足够频繁的检查数据值的变化,则有可能错过服务器端发送的数据。第二种方法:用LabVIEW的代码接口节点生成采集卡驱动程序的子VI。LabVIEW的Function模板内Advanced中有一个代码接口节点(CIN)图标,它是LabVIEw中与传统C语言连接的节点,在LabVIEW环境内,可对这一节点自动生成一模板程序,用户在这一模板程序中添加相应的源代码,然后在VisualC++的IDE环境下编译生成。ISB文件,接着在LabVIEW中对CIN的节点选择loadeinobjeetcode,最后将这个节点封装成一个VI,由主程序调用。采用该方法可以获得较高的采样速率,但是编程比较烦杂。第三种方法:调用动态链接库(DLL)。动态链接是一种应用程序在运行时与库文件连接起来的技术。它在应用程序运行时被装入和链接的,而不是把源代码复制到应用程序中去,因此使用动态链接库可以实现多个应用程序之间代码和资源的共享。LabVIEW也提供了一个动态链接库函数的图标CallLibraryFunction,放在Functions模板内的advanced子模板中。将其设置好以后,LabVIEW在运行时就可以将dll文件自动地连接起来,从而完成对数据采集卡的各种控带lJ[4sl。这种方法综合了上面两种方法的优点,因此,本课题中采用第三种方法。33陕两科技大学硕十学位论文5.2DLL的开发Win32API与动态连接库(1)Win32API5.2.1Windows应用程序总是在常规的用户态下运行,而Windows操作系统核心组件则对外界表现出中立的性质。应用程序要想利用系统资源、调用系统服务,必须依靠Windows操作系统的用户态环境子系统为应用程序提供的编程接口和执行环境。Win32子系统是Windows操作系统固有的子系统,作为应用程序与操作系统核心之间的接口,能够提供应用程序运行所需要的窗口管理、图形设备接口、媒体控制、内存管理等各项服务功能,这些功能的函数库形式,就是Win32API(Win32应用程序编程接口)。Win32子系统负责将API调用转换成Windows操作系统的系统服务调用。标准Win32API函数可以分为系统服务、通用控件库、图形设备接口、网络服务、用户接口、系统Shel1、Windows系统信息等几类。每个Win32API函数都可以通过其名字来访问。在应用程序中要调用Windows子系统的某个服务程序,程序员只需在源程序中标明目标函数名,并用合适的库来进行编译和链接,该应用程序就可以运行了。Win32API是一个基于C语言的接口,但是Win32API中的函数可以被使用不同语言编写的程序调用,只要在调用时遵循调用规范即可。不同Windows操作系统平台上的Win32API存在一些差异,从很大程度上讲windows2000/XP是所有Win32实现的超集。Win32API实际上是通过各种函数组成的动态链接库和动态链接机制来实现的。(2)动态连接库动态链接库(DynamicLinkLibrary)是一个可以多方共享的程序模块,内部对共享的例程和资源进行封装。DLL是一个包含可由多个程序同时使用的代码和数据的库。通过使用DLL,程序可以实现模块化,由相对的组件组成。因为模块是彼此的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。动态链接库文件的扩展名一般是.dll,也可能是.drv、.sys或.fon。DLL和可执行文件(EXE)非常相似,最大的区别在于DLL虽然包含了可执行代码却不能单独执行,必须由Windows应用程序直接或间接调用。动态链接是相对于静态链接而言的。所谓静态链接是指将调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分,即程序EXE文件中包含基于LabVIEW的数字频谱分析仪的设计了运行时所需的全部代码。当多个程序调用同一个函数时,内存中就会出现该函数的多个复本。这种方式增加了系统开销,浪费内存资源。采用动态链接方式时,所调用的函数并没有被复制到应用程序的可执行文件中,而仅仅在可执行文件中描述了调用函数的信息,往往是重定位信息。仅当应用程序运行时,在Windows的管理下,应用程序与对应的DLL之间建立链接关系。当执行DLL中的函数时,根据链接产生的重定位信息,Windows转去执行DLL中的相应代码。一般情况下,如果一个应用程序使用了动态链接库,Win32系统通过内存映射文件保证内存中只有DLL的一份复本。DLL首先被调入Win32系统的全局堆栈,然后映射到调用该DLL的进程地址空间。动态链接库的优点:1)共享代码、资源和数据。DLL的代码可以被所有的Windows应用程序共享,它不仅包括代码,还可以包含数据和各种资源。2)语言无关性。DLL的编写、生成与编译器无关。只要遵守DLL的开发规范和编程方法,并声明正确的调用接口,不管任何语言编写生成的DLL都具有通用性。例如VisualC++、VisualBasic、LabVIEW等都可以编写生成DLL,并能调用任何符合标准的DLL,而不用关心该DLL是何种语言编写生成的。3)隐匿实现细节。DLL中的例用程序可以被应用程序访问,而应用程序并不知道例程的细节。4)节省内存。动态链接库只在被调用执行时才动态载入内存,如果多个程序使用同一个DLL,也只需装载一次,从而节省内存开销。5)推广模块式体系结构。DLL有助于促进模块式程序的开发。这可以帮助您开发要求提供多个语言版本的大型程序或要求具有模块式体系结构的程序。6)简化部署和安装。当DLL中的函数需要更新或修复时,部署和安装DLL不要求重新建立程序与该DLL的链接。此外,如果多个程序使用同一个DLL,那么多个程序都将从该更新或修复中获益。当您使用定期更新或修复的第三方DLL时,此问题可能会更频繁地出现。Windows系统本身在很大程度上可以说是DLL的大集成。Win32系统服务子系统主要包括Kernel、User和GDI=个DLL。实际上Kernel、User和GDI三个DLL只不过是动态链接库DLL中的实例之一。除了上述模块以外,Windows2000/XP还提供了其他一些DLL以支持另外一些功能,包括通用控件(COMCTL32.DLL)、公共对话框(COMDLG32.DLL)、用户界面外壳(SHELL32.DLL)、图形引擎(DIBENG.DLL)、以及网络35陕两科技大学硕士学位论文(NETAPl32.DLL)等等。5.2.2设备访问函数在Win32系统中,每个设备都有设备驱动程序,此时的应用程序可通过几条文件操作API函数实现与驱动程序中某个设备通信。一个驱动程序可以驱动多个设备,并且此驱动程序可能为系统中已有的,也可能为用户安装的。通信程序在CreatFile处指定设备及相关的操作属性,再返回一个句柄,该句柄将被用于后续的通信操作,并贯穿整个通信过程。运用ReadFileO与WriteFileO这两个函数实现串口读写操作,若为异步通信方式,两函数中最后一个参数为指向OVERLAPPED结构的非空指针。通常,这些Win32API函数有以下几种:CreatFile函数。打开一个设备,返回一个与设备相关的句柄。ReadFile函数。从设备中读取数据。,WriteFile函数。向设备写数据。DeviceControl函数。对设备进行一些自定义的操作,比如更改设置等。CloseFile函数。关闭一个由CreatFile打开的设备。这些API函数的执行,都对应着驱动程序的一些分发例程。例如,当应用程序调用函数CreateFile来打开设备对象时,操作系统代替应用程序向驱动程序发送系统I/O控制消息IRP.MJ。CREATE,从而驱动程序响应这个消息,对应的例程被调用。其它,当应用程序调用函数ReadFile从设备中获取数据时,操作系统代替应用程序向驱动程序发送系统I/O控制消息IRP.MJ.READ;当应用程序调用函数WriteFile向设备发送数据时,操作系统代替应用程序向驱动程序发送系统I/O控制消息IRP.MJ.WRITE;当应用程序调用函数CloseFile关闭设备时,操作系统代替应用程序向驱动程序发送系统I/O控制消息IRP.MJ.CLOSE。5.2.3动态链接文件的编写在应用程序中加载DLL时,可以使用两种链接方法来调用导出的DLL函数。这两种链接方法是运行时动态链接和加载时动态链接。在运行时动态链接中,应用程序调用LoadLibrary函数或LoadLibraryEx函数以在运行时加载DLL。成功加载DLL后,可以使用GetProcAddress函数获得要调用的导出的DLL函数的地址。在使用运行时动态链接时,无需使用导入库文件。在加载时动态链接中,应用程序像调用本地函数一样对导出的DLL函数进行显式调用。要使用加载时动态链接,在编译和链接应用程序时提供头文件基于LabVIEW的数字频谱分析仪的设计(.h)和导入库文件(.1ib)。链接器将向系统提供加载DLL所需的信息,并在加载时解析导出的DLL函数的位置。设计中选用加载时动态链接。一个开发完成供使用的DLL,一般有三个必须的文件:头文件(.h)、引人库文件(.1ib)和实际代码文件(.d11)[461。1)头文件(h)定义了dll中能够输出的函数、数据结构及类的声明。当要在应用程序中使用dll时,必须把这个文件插入到使用这个dll的源代码中。2)在dll中的引入库文件(.1ib)只是包含了调用使用dll的一些隐含短接信息。当应用程序使用dll时,引入库文件是与应用程序静态链接的,即其内容装入了应用程序的执行文件,引入库为所有的dll的输出函数提供节头。3)实际代码文件(.d11)包含真正的可执行代码。应用程序调用dll运行时,dll文件中的内容被动态的装入运行。动态链接库可以在不同的编译环境下编写,例如VC、DELPHI等,本课题中是在VC++6.0环境下编译的。VC++6.0支持自动生成Win32DLL。在设计中我们选用空的DLLI程。动态链接库代码见附录B。首先必须要说明的是DLL与程序的链接。链接DLL到一个应用程序中主要有两种方式:隐式链接和显式链接【”】。采用隐式链接时应用程序先链接到编译DLL时生成的导入库文件,在执行这个应用程序时,系统也装载它所需要的DLL,当应用程序调用的DLL比较多时,装入的过程十分慢。隐式调用的方法比较简单,但DLL改变后,应用程序须从新编译。而显式链接是指应用程序在运行时通过函数调用来显式装载和下载DLL,并通过函数指针来调用DLL的导出函数。因为是使用指针来调用函数,所以在开发应用程序时不需要太多的DLL信息,因此使用显式链接不需要DLL提供头文件和库文件。但使用函数指针来调用,很容易发生错误,所以必须要协调好DLL和应用程序的接口。本设计中的DLL一经写好不需要改变,所以我们采用显式链接。5.3LabVIEW应用LabVIEW动态链接库调用机制美国国家仪器公司的LabVIEW是目前应用最广泛的虚拟仪器开发平5.3.1台之一,其突出的优点是采用图形化的G语言编程方式,直接面向测量测试工程师,可开发出功能强大的数据采集、数据分析和仪器控制的虚拟仪器程序。LabVIEW实现外部数据接口的方式有四种:代码接口节点、动态链接库机制、共享库和AetiveX.其中前两者功能较强、应用较广。37陕两科技大学硕士学位码接口节点是LabVIEW环境与外部编译的C语言模块间数据交换的接口。在使用外部代码时,LabVIEW将其装载到与主要应用程序相同的存储空间中,因此通过外部的编译软件编译的C语言代码应当具有可重定位性。这就对C代码模块的编译环境有了一定的,在Windows操作系统中,LabVIEW的CIN节点仅支持MicrosoftVisualC++和SymanteeC编译环境。动态链接库机制,适用于用户已有DLL文件或者需要用户开发自己的DLL的情况。DLL的使用在增强了LabVIEW程序接口驱动能力的同时,使其具备了模块化设计、升级维护方便以及节省内存空间等优点。因为DLL使用通用的标准格式,所以LabVIEW可以调用多种开发环境(如VisualVisualC++,C++Builder,Basic等)开发的DLL。这种方式要求用户熟悉Windows中DLL文件的创建和有关参数传递的规定。在LabVIEW中调用动态链接库的主要特点:1)调用DLL可以用C或stdcall调用;2)能用整数或浮点数的任意维数组;3)不需要关心用巨大模式(HUGE)、近(NEAR)或远(FAR)指针;4)LabVIEW字符串能通过C或Pascal字符指针;5)可以用空(void)、整数(integer)和浮点数(float)指针为返回值。因此本文的应用程序设计选择调用DLL方式作为应用程序的外部代码接口,充分利用其所具有的优良特性以满足虚拟仪器设计的需要和模块化设计的要求。5.3.2DLL的调用LabVIEW提供了强大的外部程序接口能力,这些接口包括DLL、C语言接口(CIN)、ActiveX、.NET、DDE、MATLAB等。通过DLL,用户能够方便地调用C、VC、VB等编程语言编写的程序以及Windows自带的大量API函数等。LabVIEW中动态链接库的调用是通过Call的,该节点位于FunctionPalette的ALLFunctionLibraryFunction节点实现Function>Advanced>CallLibraryNode。如图5—1所示。在本系统中,LabVEIW应用程序使用CallLibraryFunction节点来调用上述开发的DLL,实现与USB接口的数据传输功能。主机和设备批量数据的传输是通过LabVEIW应用程序和DLL传递数组的方法来实现的,其实质是传递一个数组指针。CallLibraryFunction节点的配置过程如下。单击该节点将其放置在程序框图中,此时节点没有与任何DLL连接。右击该节点并选择设置选项或者直接双击该节点可以打开如图5.2所示。38基于LabVIEW的数字频谱分析仪的设计q§啸●尝=蠢看-●,lil’擅号赴理一4’鼓据遇僵1,互连接口‘库与可执行程序圈圈调用麾函熬…代码接口节点画J执行莱蛀缔拿田5-1库与可执行程序Fi95-1Calllibraryfunctionnode在该对话框中可以配置DLL的路径、函数名、线程、调用方式、参数和回调等。1)库名或路径栏中设定DLL的路径F:\毕设资料\UIViewDll\Debug\UIViewDll.dll,在Functionnalne下拉框中就可以看到该动态连接库所包含的所有函数名,选择函数RRADREGl6。面订孤酉|一‘g%&,、¥&女H、Ⅱv㈣Ⅶ·吣哪l棚m画嚣㈣m一口&嗍目十☆《j推ot^自自gEtn.E*16v|■Ⅲ№ost4c*ll口ⅡⅢ】oc}”…—“8hⅢ_自t■d厂司厂丽n厂i矿田5-2CallLibraryFunction配置对话枢Fi95-2DialogboxoffailLibraryFunctionreconfiguration陕两科技大学硕士学位论文2)在右边的线程栏中可以选择DLL是否可以被重新调用,默认情况为在UI线程中运行,这时需要注意的是,如果动态链接库被调用的函数返回时间很长,那么会导致LabVIEW不能执行UI线程中的其他任务,因此界面反应可能会很慢,甚至死掉。这时候最好把它设为重入。若设置为重入,则该动态连接库可以由多个线程同时调用。当然,前提是必须保证该DLL能被多个线程同时安全调用,譬如不包含可能产生竞争的全局变量或文件等。3)在调用规范中栏中可以设置该动态链接库是标准WINAPI调用还是普通的C调用。一般都是采用C调用,但是对于API调用则必须选择stdcall(WINAPI)。本文中调用的是我们用C开发的DLL,因此使用标准C调用规范。4)在参数下可以设置函数的返回值类型和输入参数。左边栏用于增加或删除参数,其中returntype表示返回类型。右边当前参数栏用于设定参数名和参数类型。LabVIEW支持绝大部分的Windows、ANSI、数组、结构体和LabVIEW的数据类型,每一种数据类型都对应于LabVIEW中的某一类型的数据控件。例如字符串指针对应于LabVIEW的字符串控件,结构体对应于LabVIEW的簇等。每当设定一个参数时,在最下面的栏中都会显示相应的函数原型。5)配置参数类型。在LabVIEW中调用动态链接库时,最容易出错的地方就是参数类型匹配。由于LabVIEW中的数据类型和不同编程语言对应的数据类型在形式上有些不一致,因此需要知道他们是如何对应的。在参数配置对话框中选择函数,配置参数为AdapttoType,AdapttoType对应于Void数据类型,即在函数原型中对应于“Void*"类型。它可以用来传递多种数据类型,具体是何种数据类型则有输入数据的类型决定。本设计中输入数据的类型为数组,所以传递格式由DataFormat设置决定,DataFormat为Handles即传递句柄。byValue,5.3.3基于LabVIEW的数字频谱分析仪应用程序开发虚拟仪器必须有合适的软件工具,目前的虚拟仪器软件开发工具有如下两类:文本式编程语言:如VisualC++,VisualBasic,Labwindows/CVI等;图形化编程语言:如LabVIEW,HPVEE等。其中LabVIEW是美国NI公司推出的一种基于G语言(图形化编程语言)的虚拟仪器软件开发工具。用LabVIEW设计的虚拟仪器,用户最终看见的是和实际硬件仪器相似的操作面板。它为虚拟仪器设计者提供了一个便捷、轻松的设计环境,设计者利用它可以像搭积木一样,轻松组建一个测量系统以及构造自己的仪器面板,而无需进行任何烦琐的程序代码的编写,非常适合硬件40基于LabVIEW的数字频谱分析仪的设计工程师使用的计算机语言。因此,本醴计采用LabVIEW开发工具设计虚拟频谱分析仪的软件部分。(1)前面板的构建虚拟频谱分析仪中各个操作模块如下:采集信号显示模块。信号显示模块用来显示采集信号的波形,以便用户的观察和分析。信号显示模块显示信号的坐标.纵坐标是信号的电压幅值,横坐标是信号的时间关系,这两个坐标都可以根据信号幅度、频率的不同,用相应的控制旋钮进行调节.使得信号以最佳的效果显示在屏幕上。仪器控制模块。这个模块是用户操作仪器的接口,这些操作包括:打开设备,用来控制客户端程序和外部设备韵正确连接;连续显示波形,按下这这个按钮,仪器开始自动连续采集数据,并显示在显示屏上:数据保存,将波形数据以一定的格式存储在二进制文件或表单文件中:关闭设备,断开控制客户端程序和外部设备的连接频谱分析模块。在本系统中充分利用计算机的处理功能。这里主要是进行频谱分析,把频谱曲线以及直流分量、有效值、最大值和最小值显示在屏幕上。前面板开发窗口如图5-3所示。’矗磊赢固圈团圆:捞疗一z{笺s。。F—F一_pF一圃5-3前面板开发窗口Fi95·,Frontpaneldevelopmentwindow4l陕两科技大学硕士学位论文(2)用CallLibraryFunction节点功读取设备数据主机和设备批量数据的传输是通过LabVEIW应用程序和DLL传递数组的方法实现的,其实质是传递一个数据指针。利用Call取设备数据如图5.4所示。LibraryFunction节点读图5-4用CallLibraryFunction节点功读取设备数据Fi95—4ReadingthedataofdevicebyCallLibraryFunctionNode(3)频谱分析仪数据显示程序我们只要根据仪器功能需要选取模板,再将其连接就完成了传统仪器电路的功能。通过流程图窗口Window—ShowFunctionsPalette打开函数选项板,Averaged选择频谱分析函数Vrms.vi、波形测量函数BasicMax.min.vi,以及指数函数和常量等。DC.RMS.vi和在程序框图中添加输入输出控件。通过前面板窗口Windows—ShowControlsPalette打开控制选项板,选择图表指示器、输出显示控件。输出显示控件包括分别显示采集信号和采集信号频谱参数的有效值、直流分量、最大值和最小值。在流程图中,模块接口之间的连线就是数据线。数据通过数据线在模块之间传递。LabVIEW的数据流工作方式是依靠在数据线上传递的数据来控制程序的,只有当模块要求的输入数据完全到达这个模块时才能执行,然后向其所有的输出端口输出数据,这些数据再沿数据线流向其它模块。数据显示程序如图5—5所示。采集到的数据经一个常数初始化数组输出可以得到数组元素是0.32768之间的一个整数数组,将该整数数组经创建波形创建后得到连续采集的波形。之后根据设计需要就可以方便地组织输出了。输出包括两部分,一部分直接由采集到的信号接图表控件显示原信号波形,一部分经频谱分析,放大后仍由图表控件显示信号的频谱图。最后,分别由波形测量函数平均值.均方根和和和最大值最小值输出采集信号的分析参数,分别由四个显示控件有效值、直流分量、最大值和最小值输出显示,采集到的数据显示在LabVIEW前面板上。42基于LabVIEW的数字频谱分析仪的设计图5-5数据显示程序Fi95-5Programofdataindication(4)数据存储在LabVIEW程序接收到所采集的数据后,需要把数据记录下来,以便对数据作进一步分析。在LabVIEW中可采用文本文件、电子表格文件或二进制文件来存储或获得数据。在本系统中,数据存储部分的程序如图5-6所示,其中,它将采集到的数据存储成文本文件(.txt)格式,以便使实验者可在实验完成后对实验数据进行分析处理。图5-6数据存储程序Fi95·6Programofdatastorage(5)仿真结果图得到信号的频谱分析。采集信号频谱分析仿真结果图5.7所示。有信号频谱图可以直接观察到采集信号的频谱分析。并由显示控件显示所测信号的直流分量、有效值、最大值和最小值。利用LabVIEW强大的信号处理功能,我们还可以对采集信号在指定频段提取幅值最大的成分频率信号,可输出抽取出的信号波形、频率及相位等,对信号进行谐波分析、计算信号韵功率谱、功率谱密度和互功率谱等。还可以对信号滤波、加窗处理等有效方法,提取我们43陕西科技大学硕士学位论文赢;;≯…网。圆网圆2(,。希静『高;}困5-7仿真蛄果Fi95·7Simulationresult需要的有用信号。(6)与标准信号频谱分析的比较当采样频率48KHz,分别输入幅值为1v.频率为50Hz,触发电平为0的正弦波、方波其频谱分析结果如图5-8所示。由结果图可以看出,设计完成了LabVIEW编程环境下的虚拟频谱数字分析仪的设计。该仪器充分运用了计算机强大的数据处理能力,实现了一般的频谱分析仪所具有的功能。理论和仿真分析表明,该系统基本达到设计要求。菱三一l(^)精八正结进(丑)inputSineWave(b)方波(b)SquareWere基于LabV]EW的数字频谱分析仪的设计tQ—e焉警。髓m等譬謦幽黼慧斧黜F而j£;淄2豢F=广田5-8系统洲试结果Fi95-8Testresultofthesystem基于LabVIEW的数字频谱分析仪的设计6总结6.1设计特点本设计在LabVIEW软件平台上充分结合FPGA和NIOSII的特点,将LabVIEW的图形化编程、NIOSII的可配置特性和FPGA可重构性充分结合起来。LabVIEW的图形化编程方便、简洁、高效,图形界面友好,操作简单,人机交互性强,使其充分发挥计算机的能力,根据用户需要定义其功能。FPGA可重构性好,在不同的应用领域,根据实际的需要可对我们的模块进行替换升级。例如前端加入变频电路可大大提高分析带宽,使系统性能得到大幅度提升。Altera公司推出的QuartusII和NIOSII核等软件为设计基于FPGA的NIOSIIIP核系统提供了极大的方便,充分利用NIOSII的可配置特性给系统设计带来了更大的灵活性。6.2设计过程中出现的问题及解决1)AD转换在USB采样模式下时,输出数据通过SignalTapII测试,采样得到的数据为离散的脉冲。后来发现ADC串行输出的位控制时钟BCLK也为l2M(与AD的驱动时钟相同)。这点在器件手册中没有说清楚。我们的解决办法是用ADCLRC,BCLK控制一个计数器,来实现串转并数据的保持。经过测试,效果非常好。2)前端输入数据FIFO无法正常读入系统,出现读重复或丢失的现象。由于采用同步FIFO读入数据,读写由同一控制时钟,用前端AD转换完成信号做写入使能,使能信号长度非常难控制,我们刚开始把主要精力放在了使能信号的处理上。在确认各控制时序无误后,我们把问题归结到了读写程序上。最终发现问题出现在了一条printf0语句上,用它是为了显示程序运行状态,但它的执行产生了相对非常大的延迟,去掉以后问题得到解决。3)由于本人能力有限,USB驱动没有开发成功,导致整个设计不能顺利完成。最后实现了基于声卡的虚拟音频信号采集与频谱分析。今后我会继续努力完成剩余的工作。6.3总结在本次设计中完成的工作有:1)基于Altera公司的NIOSII和LABVIEW提出了数字频谱分析仪的整47陕西科技大学硕士学位论文体设计方案和设计指标。完成基于FPGA的数据采集卡的设计,即设计WM8731Controller控制WM8731对语音信号进行采集,经嵌入式软件处理器NIOSII进行数据存储并控制传送给USBOTG芯片ISPl362;2)学习并掌握了USB总线协议;3)掌握基于声卡的动态链接库的开发,掌握了基于LabVIEW动态链接库的调用机制,实现了基于声卡的虚拟音频信号采集与频谱分析。我们的设计过程也是我们学习和探索的过程。非常感谢ALTERA公司为我们的这次设计提供了非常好的平台,DE2板为我们提供了非常丰富的硬件模块,使我们在模块的搭建上非常方便。软件方面,QuartusNioslIIDE,DSPII,SOPCBuilder,Builder为我们软硬件的设计设计提供了强大的支撑,使我们体会到EDA工具在设计中的突出优势。QuartusII提供了完整的多平台设计环境,是系统设计的综合性环境。QuartusII与SOPCBuilder。NioslIIDE结合,提供了完整的SOPC解决方案,是系统的开发可以便捷的得到实现。QuartuslI与MATLAB和DSPBuilder结合,进行基于FPGA的DSP开发,是DSP硬件系统实现的关键工具。以NioslI为核心的嵌入式系统设计平台为我们提供了极大的灵活性,SOPCBuilder为我们提供了丰富的外设资源,更重要的是,我们可以通过添加自定义的逻辑来随心所欲的编写自己的外设模块。例如,我们系统中如果需要用到的液晶模块,通过自定义时序,就可将液晶模块挂在PIO口上,若需更改液晶模块,只需相应的调整时序即可完成,不必太大的改动。这样极大的提高了系统的兼容性和可移植性。虚拟仪器使用的图形化编程环境使编程者不再需要记忆纷繁复杂的语法和函数原型,更使编写程序的过程与工程师们的思维习惯相符合,从而使编写程序的过程变的生动。基于LabVIEW的数字频谱分析仪理论研究和工程实践中有着重要的意义。根据具体情况,我们可以做具体虚拟仪器以便达到我们的具体要求,从而对信号进行频谱分析,例如:分析噪声的频谱,以提高信号的受干扰性;分析网络攻击流量数据的频谱,阻止网络攻击;分析数字信号的频谱,提高数字信号的质量;根据频谱分析进行故障诊断等等。这些在人们的日常生活中都有重要的意义。我们接触到的是一个比较新的领域,所以在学习,摸索的过程中出现很多问题需要解决单独去摸索可能要很多时间和精力,比较快的方法就是多与别人进行交流和沟通。通过交流,避免自己的设计走向死角,分享大家在开发学习中的经验,同样帮助别人解决问题也使自己学到了知识。交流的方法有很多种,基于LabVIEW的数字频谱分析仪的设计比如ALTERA公司的网站,一些比较专业的论坛等。49基于LabVIEW的数字频谱分析仪的设计致谢首先衷心感谢陕西科技大学三年对我的精心培养。这篇论文的完成,我要感谢我的导师张俊涛副教授给我提供了学习的机会和良好的学习条件。导师在我的研究课题的选题、研究方法、论文撰写等方面都进给予了悉心的指导,倾注了大量的心血。导师渊博的学识、敏锐的学术洞察力、丰富的实践经验,严谨认真的治学风范、正直的人格、脚踏实地的科学态度、平易近人的工作作风以及对科学永无止境的追求都给我留下了深刻的印象,将会使我受益终生。导师忘我的工作精神,对我产生了潜移默化的影响,将使我终生受益。在此即将完成学业之际,谨向尊敬的张俊涛导师表示我最诚挚的敬意!在此我对导师的辛勤工作表示最诚挚的感谢!感谢为我认真审稿和提出宝贵意见的党宏社教授、周强副教授、李颀副教授和侯勇华副教授。感谢在研究生阶段给予我帮助的所有的老师。感谢在研究生阶段给予我帮助的2006级电气学院全体同学,感谢07级的师弟师妹,感谢给予我帮助的所有的同学。同时要对我的父母及家人对我的一贯支持和信任表示感谢。最后要感谢各位评审老师在百忙中抽出时间对论文进行审稿和参加答辩会,并对各位参加答辩会的老师同学表示感谢。基于LabVIEW的数字频谱分析仪的设计参考文献【1】秦树人,汤宝平.面向2l纪的绿色仪器系统【J】.中国机械工程,2000,11(3):275.278.【2]D.Chrastina,J.P.Hague,D.R.Leadley.ApplicationofBryan’Salgorithmtothemobilityspectrumanalysisofsemiconductordevices[J].JournalofAppliedPhysics,2003,94(10):6583-6590.[3]JunshengCheng,DejieYu,JiashiTangeta1.ApplicationoffrequencyfamilyseparationmethodbasedupontogearfaultEMDandlocalHilbertenergyspectrummethodanddiagnosis[J].MechanismMachineTheory,2007.【4】QDidiera,E.Ternisienb,O.Casparybeta1.Anewapproachtodetectbrokenrotorbarsininductionmachinesbycurrentspectrumanalysis[J].MechanicalSystemsandSignalProcessing2007,21:l127-1142.【5】卢文祥,杜润生.机械土程测试·信息·信号分析(第二版)【M】.华中科技大学出版社,2003:l89.190.ofIntelligentVirtualControlsBasedon【6]BaopingTang.ImplementationModel[J].Proceedings【7]SevinoAQin’SofISIST’2002,Jinan,China:144-150.andInterpolationAl902rithomtoImproveonG,TrottaM.AWindowsElectricalMeasurementAccuracy[J].IEEETransTestingTechnologyandIM,1989,38(4):8562863.【8]ShurenQin.IntegratedVirtualInstrument[M】.ProceedingsoflStlSIST.1999.Sept:66—71.【9】黄建国.现代频谱分析的发展及应用【R】.西安:西北工业大学.【l0】吕红英,吴先球,刘朝辉等.LabVIEW环境下基于声卡的虚拟示波器软件设计【J】.计算机应用与软件,2007,24(3):61.64.【ll】叶文生,王思华.基于虚拟仪器技术的USB接口仪器通信软件设计【J】.自动化技术,2006,10:86—88.【12]杨晓非,邓剑,廖俊卿.嵌入式系统中USBHost功能的开发[J】.华中科技大学学报,2006,34(7):79.81.【13】刘成刚.LabVIEW在快速傅立叶变换中的应用【J】.山东省农业管理干部学院学报,2008,23(4):171.172.【14】陈锡辉,张银鸿.LabVIEW8.20程序设计从入门到精通[M】.北京:清华大学出版社,2007:7.53陕西科技大学硕士学位论文[15】肖晓萍,石永革.基于LabVIEW的虚拟频谱分析仪及频域测量误差分析【J】.计算机工程与设计,2006,27(18):3472.3475.【16】候国屏,王坤,叶齐鑫.LabVIEW7.1编程与虚拟仪器设计【M】.北京:清华大学出版社,2005:2.【17】卢玉州.基于虚拟仪器的数据采集系统【D】.山东:山东科技大学,2004.【18】闫玲,方开翔,姚寿广.基于LabVIEW的多功能数据采集与信号处理系统[J】.江苏科技大学学报,2006,03:50-54.【19]魏家严,韩哓健,王建.基于LabVIEW的结构实验数据采集系统的应用【J】.微计算机信息,2007,23(12.1):116.117.【20]张丙才,刘琳,高广峰等.基于LabVIEW的数据采集与信号处理[J】.仪表技术与传感器,2007,12:74.75.【21]唐求,滕召胜,黄鸿鸣.基于LabVIEW的多功能虚拟示波器设计【J】.传感器与仪器仪表,2007,0l(1):151.152.[22]郝张红,刘先勇,袁长迎等.基于声卡的虚拟音频信号采集与处理【J】.微计算机信息,2007,23(12.1.):98.99.【23】陈真,王延江.基于虚拟仪器技术的数据采集系统设计【J】.工业控制计算机,2008,21(8):1-2.【24]杜秋娇.基于虚拟仪器的高速数据采集系统的研究【D】.武汉:华中科技大学,2004.【25】潘松,黄继业.EDA技术与VHDL[M].北京:清华大学出版社,2005:262.288.【26】汪国强.SOPC技术及应用[M】.北京:机械工业出版社,2006:6.[27]郭文彬,孙智权,赵不贿等.基于NioslI的USB接口模块设计【J】.微计算机信息,2006,22(10.2):278.279.[28]文U需鸽,张晓明,唐玉华.基于NiOSII的网络处理器转发软件设计与实现【J】.计算机应用研究,2006,05:213-215.【29]何茜,韩春林,陈玉鹏等.基于NiosII的通用数字调制器设计与实现【J】.通信技术,2006,4:120-122.[30]林青松,王应丽.基于NiosII与LabVIEW的任意波形发生器实现[J】.测控技术与仪器仪表,2007,08:83-85.【3l】孙恺,王田苗,魏洪兴等.嵌入式CPU软核综述[J】.计算机工程,2006,32(7):6.9.【32]ALTERAQuartusIINIOSII用户手册【G】.ALTERA公司,2005.基于LabVIEW的数字频谱分析仪的设计【33]李桂森.现代频谱分析仪的原理和使用【J】.有限电视技术,2004,1:80—82.【34】DE2司,2006.【35]WM8731/WM8731L【J】.mierorlretronies,2004.DevelopmentandEducationBoardUserManual[G].ALTERA公【36]卢德良,周学功,彭澄廉.NIOSII处理器中定制指令的设计与实现【J】.计算机应用与软件,2007,24(12):3-4.【37]胡强斌,孙军.Nios软核处理器在DTV调制器中的实现【J】.片上系统SOC,2006,08(2):149·150.【38]罗小燕,杨丽荣.基于FPGA与嵌入式软核NIOS的球磨机负荷检测系统设计【J】.工矿自动化,2006,06:26.29.【39】汤占军.基于USB的高速多通道数据采集系统的设计与实现[D】.昆明:昆明理工大学,2007.【40]RU有利.基-亍:USB的高速数据采集系统设计【D】.西安:西安电子科技大学。2006.【41]刘蓉.基于高速通道和USB接口数据传输技术的研究[D】.福建:华侨大学,2003.【42]方尚侠.基-于LabVIEW和USB接口的虚拟晶体管特征图示依【D】.成都:电子科技大学,2006.【43]牛瑞锋.面向虚拟仪器的USB接121设备的访问[D】.西安:西北大学,2006.【441周涛.基于USB的虚拟仪器测试系统的研究与开发[D】.安徽:合肥工业大学,2003.【451宋吉超.基于USB2.0接121的虚拟仪器研究[D】.西安:西安电子科技大学,2005.【46]姜成航.基于USBTMC协议的USB接口虚拟仪器的研究【D】.大连:大连理工大学,2005.【47]赖建平.基-于USB接口的虚拟数字存储示波器[D】.成都:电子科技大学,2005.55基于LabVIEW的数字频谱分析仪的设计附录A:NIOSII软件的设计代码staticvoidhandle—full—interrupts(void·context,alt—u32id)/·中断服务·/{inti=O;volatileint·edge—capture—ptr=(volatileint·)context;·edge—captureptr=IORD—ALTERA—AVALON—PIO—EDGE_CAP(FULL—BASE);IOWR—ALTERA—AVALON—PIO—EDGE—CAP(FULL—BASE,0x0);if(edge—capture!=0){pl一>data=IORD—ALTERA—AVALON—PIO—DATA(ADC—DAT—BASE);pl=pl一>next;if(pl==headl){flagl=0;for(i=0;i<size—x;i++){x1【i】.real=(float)p2一>data;x1【i】.img=0;p22p2->next;flagl++;>pl=head;p2=head;)}edge——capture=O;IOWR—ALTERA—AVALON—PIO—IRQ—MASK(FULL—BASE,Oxf);}staticvoidinit—full—pioO/·中断初始化,注册·/{57陕两科技大学硕十学位论文void·edge—capture—ptr=(void·)&edge—capture;IOWR—ALTERA—AVALON—PIO—IRQ_MASK(FULL—BASE,0xf);lOWR—ALTERA—AVALON—PIO—EDGE—CAP(FULL—BASE,0x0);alt—irq—register(FULL—IRQ,edge—capture—ptr,handle——full——interrupts);>voidcreate——circle——link()inti=0;P1=(Node幸)malloc(sizeof(Node));head=P1;p2=pl;P1一>data=0;for(i=O;i<size—x;i++){pl=(Node木)malloc(sizeof(Node));pl->data=0;p2->next=pl;p22pl;if(i==size—x一1){headl=pl;}>pl->next=head;pl=head;p2=head;)voidHal4D13_SetIntEnable(ULONGdIntEn){IOWR(ISPl362一BASE,D13_COMMAND—PORT,D13CMD—DEV—WR—INTEN);dIntEn=(dIntEn&OxOFFFFFF);IOWR(ISPl362一BASE,D13_DATA—PORT,(USHORT)dIntEn);5R基于LabVIEW的数字频谱分析仪的设计113_DATA—PORT,(USHORT)(dIntEn>>1IOWR(ISP362一BASE,D6));ULONGHal4D13一ReadInterruptRegister(Void){ULONGj,i=O;IOWR(ISPI362一BASE,D13一COMMAND—PORT,D13CMD—DEV—INT—SRC);i=IORD(ISPl362一BASE,DI3_DATA—PORT);j=IORD(ISP1362一BASE,DI3_DATA—PORT);j=(0<<16)&0xffff0000)+(i&0xffff);returni;}UCHARHal4D13_GetEndpointStatusWInteruptClear(UCHARbEPIndex){UCHARc;IOWR(ISPl362一BASE,D13一COMMAND—PORT,D13CMD—EP—RDSTS—CLRINT+bEPIndex);c=(UCHAR)(IORD(ISP1362一BASE,D13_DATA—PORT)&0xoff);returnC;}UCHARHal4DI3_GetEndpointStatusWOInteruptClear(UCHARbEPIndex){UCHARc;IOWR(ISP1362一BASE,D13_COMMAND—PORT,D13CMD—EP—RDSTS+bEPIndex);c=(UCHAR)(IORD(ISP1362一BASE,D13_DATA—PORT)&0x0田;returnC:}voidHal4DI3一SetEndpointStatus(UCHARbEPIndex,UCHARbStalled){if(bStalled&0x90)陕西科技大学硕士学位论文IOWR(ISPl362一BASE,D13_COMMAND—PORT,D13CMD—EP—WR—STS+bEPIndex);}else{//clearendpointstall.IOWR(ISP1362一BASE,D13_COMMAND—PORT,D13CMD—EP—CLR—STALL+bEPIndex);基于LabVIEW的数字频谱分析仪的设计附录B:动态链接库代码#include<windows.h>#include¨NiView.h”BOOLAPIENTRYDIIMain(HINSTANCEhlnst,DWORDreason,LPVOIDreserved)returnTRUE;typedefstructTaghcipriv_t{inttl;inttip;m‘titl0一len;l‘ntitll—len;intitl2——len;intitl3——len;intitl4——len;}hcipriv—t;typedefstructTaghci_thcipriv_thp;intframe——number;inttd——array;inti—td—array[16】;}hci_t;int—declspec(dllexport)一stdcallREAD—REG16(void·hci,intregindex)intvalue;hci—t木pHci=(hci_t·)hci;value=pHci一>hp.tl<<16;returnvalue;61Intvalue;hclj·pHci=(hcit*)hci:Value。P/-/ci.>hp.tj;returnvalue;);n‘一declspec(dllexport)stdcallintvalue;REAELREGn,6。v。;d簟hc,,。n。reg。ndex,hci_t拳pHci=(hci—t木)hci:value。pHci->hp.tI<<16:returnvalue;):n2一declspec(dllexport)stdcallintvalue;REA£LREGn32。v。;d幸hc;,;n。reg;ndex、hci_t木pHci=(hcl—t水)hCi:VaJue2pHci.>hp.tl:returnvalue;;megt;二ddeecxl,spec(dJJexp。rt)一stdcaIlreturnV矿RITE-一REG,6cV。;d事hc;,uns;gned;n。va,ue,;n。vhacJiuperj;vpth*pp.h>ptJp=<(h<cilp6r;iLt拳)hcj;value;,i等“dIJeXpor蛆stdcaIlWRITE~咖32m沁硒舢啦咧缸吲峨衄hcipriv_t幸php=(hcipriLt簟)J1cj=value。php->tJpIphp.>tl:一’returnvalue;基于LabVIEW的数字频谱分析仪的设计}int—declspec(dllexport)一stdcallWRITE—REGnl6(void木hci,unsignedintintvalue,regindex){hcipriv_t·php=(heipriv—t·)hci;value=php一>tip<<16;returnvalue;}int—declspec(dllexport)一stdcallWRITE—REGn32(void宰hci,unsignedintintvalue,regindex){heipriv—t·php=(hcipriv—t·)hci;value=php一>tipreturnvalue;Iphp->tl;}int—declspec(dllexport)一stdcallhe—start—int(void·hci){intmask=SOFITLIntATLIntlOPR—Reg;WRITE—REG16(hci,mask,HcuPInterrupt);WRITE—REG16(hci,mask,HcuPInterruptEnable);return0;}int—declspec(dllexport)一stdcallhc—stop—int(void·hci){WRITE—REGI6(hci,0,HcuPInterruptEnable);return0;>int—declspec(dllexport)一stdcallhe—reset(void·hci){inttime=30;WRITE—REG32(hci,OHCI—INTR—MIE,HcInterruptDisable);/·ResetUSB(neededbysomecontrollers)·/WRITE—REG32(hci,0,HeContr01);WRITE—REG0(hci,HcSoftwareReset);陕西科技大学硕士学位论文/+HCResetrequiresmax10USdelay·/WRITE—REG32(hci,OHCI—HCR,HcCommandStatus);while((READ—REG32(hei,HcCommandStatus)&OHCI—HCR)!=O){if(--timeout==0){err(”USBreturn一1;HCresettimedout!”);>udelay(1);}returnO;’int—declspec(dllexport)一stdcallhc—start(void·hci){intvalue=O;fminterval=0x2edf;fminterval|_((((fminterval一210)奎6)/7)<<16);WRITE—REG32(hci,fminterval,HcFmInterval);WRITEREG32(hci,0x628,HcLSThreshold);/·startcontrolleroperations·/hp->he—control=OHCI—USB—OPER;WRITE—REG32(hci,hp一>he—control,HcContr01);/·Choosetheinterruptswecareaboutnow,otherslaterondemand·/mask=OHCI—INTR—MIEI//OHCI—INTR—ATDOHCI—INTR—SOOHCI—.INTR_SF;lIWRITE—REG32(hci,mask,HcInterruptEnable);WRITE—REG32(hci,mask,HcInterruptStatus);mask=SOFITLIntIATLIntmask=O;lOPR—Reg;WRITE—REG16(hci,mask,HcuPInterrupt);WRITE—REG16(hci,mask,HcuPInterruptEnable);矾基于LabVIEW的数字频谱分析仪的设计WRITE—REG32((READ—REG32(hei,HcRhDescriptorA)IRH—A—NPS)&一RH—A—PSM,HcRhDescriptorA);WRITE—REG32(hci,RH—HS—LPSC,HcRhStatus);//POTPGTdelayisbits24-31,in2msunits.mdelay((READ—REG32(hci,HcRhDescriptorA)>>23)&0xlfe);rh—connect—rh(hci);returnvalue;}int—declspec(dllexport)一stdcallhc—release—hei(void·hci){hcipriv—t·php=(hciprivt·)hci;if(hei->bus一>root—hub)usb—disconnect(&hci·>bus一>root—hub);if(hp->hcport>O){WRITE—REG16(hci,0,HcHardwareConfiguration);WRITE—REG16(hei,0,HcDMAConfiguration);WRITE—REGl6(hci,0,HcuPInterruptEnable);}//if(!hci->disabled)hc—reset(hci);if(hp->t1)kfree(hp->t1);if(hp一>hcport>0){release—region(hp一>hcport,2);hp->heport=O;>if(hp->hcport2>0){release—region(hp一>hcport2,2);hp一>hcport2=O;}陕两科技大学硕士学位论文if(hp->wuport>O){release—region(hp一>wuport,2);hp->wuport=0;>if(hp->irq>=O){free—irq(hp一>irq,hci);hp->irq=一1;>usb—deregister—bus(hci一>bus);usb—free—bus(hci->bus);list—del(&hci->hci—hcd—list);INIT—LIST—HEAD(&hci一>hci—hcd—list);kfree(hci);return0;}int—declspec(dllexport)一stdcallhci—hcd—init(void事hci){hcipriv—t·php=(hcipriv—t·)hci;memset(php,0,sizeof(hcipriv-t));return0;>int—declspec(dllexport)一stdcallhci—hcd—Reset(){return0;}基于LabVIEW的数字频谱分析仪的设计攻读硕士学位期间发表的学术论文目录【1】吴静,张俊涛.模糊-PID复合控制器的FPGA实现【J】.微电子学与计算机,2009,26(3):138-141.【2】吴静,张俊涛.基于FPGA的数字PID的设计与实现[J】.计算机应用研究增刊,2009.67基于LabVIEW的数字频谱分析仪的设计

作者:

学位授予单位:

吴静

陕西科技大学

本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y14211.aspx

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务