版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
研究生专业实验教学实验报告书实验课程名称:嵌入式系统专业实验实验指导教师:学院:专业及类别:学号:姓名:实验日期:成绩:重庆大学研究生院制实验名称:fpgasopc实验实验时间:2016.5.52016.5.12一、实验目的1、学习QuartusII、SOPCBuilder、NiosIIIDE的基本操作;2、初步了解SOPC的开发流程,基本掌握NiosII软核的定制流程;3、掌握NiosII软件的开发流程;掌握软件的基本调试方法。二、实验仪器设备硬件:PC机,FPGA实验开发平台;软件:QuartusII9.1,SOPCBuilder9.1,NiosIIIDE9.1。三、实验原理实验利用Quartus软件内嵌的SOPCBuilder工具来构造实验硬件,在NiosII软件编译工具中开发程序来控制实验箱中的LED灯实现闪烁的效果。1、验证实验:建立可用于控制LED闪烁的简单NiosII处理器系统,具体包括:(1)在QuartusII中建立一个工程;(2)使用SOPCBuilder建立并生成一个简单的基于NiosII的硬件系统;(3)在QuartusII工程中编译基于NiosII的硬件系统并生成配置文件.sof;(4)在NiosIIIDE中建立对应硬件系统的用户C/C++工程,编写一简单用户程序,在NiosIIIDE中编译程序生成可执行文件.elf;(5)将配置文件.sof和可执行文件.elf都下载到FPGA进行调试运行。2、设计实验:用按键控制8个LED灯的闪烁状态,灯的状态如下:灯分为左右两部分交替闪烁。灯分为奇数号和偶数号灯两部分交替闪烁。循环从左至右间隔(两盏灯一组)跑动显示;从中间开始向两侧依次点亮,从两侧向中间依次点亮。四、实验内容.文件夹的建立在计算机上创建文件夹,要求用英文或数字命名,不能用中文命名。.文本文件的建立1)单击“开始”一“程序”一Altera-QuartusII9.1SP2。2)点击菜单栏File-NewProjectWizard,弹出对话框式。点击Next>按钮继续,修改,而后点击Next>继续,出现提示D盘nios2目录下面没有led这个目录,询问是否要创建它,选择是(y),让QuartusII创建这个目录。点击"Next”。3)向导开始询问是否有现成的文件需要加到当前新建的工程中点击Next>继续,在图(6)中选择试验箱的芯片CycloneWE系列的EP4CE40F23I7,点击Next>,最后点击Finish完成新建项目(注:在项目文件中找到led.qsf文件修改器件的电压值为1.2V).NIOSII软核建立1)在Quartus下,向工程中添加文件,先建立一个BlockDiagram/SchematicFile,点击菜单栏中的File->New,打开新建文件对话框,我们选中BlockDiagram/SchematicFile,然后点击OK按钮。2)接下来我们该启动SOPCBuider来创建NIOSII软核了,点击Tools->SOPCBuilder会出现对话框在在最上层的CreateNewSystem对话框中的SystemName:中输入软核的名字,在本示例中,输入helloled做为软件核的名字,点击OK按钮确认。3)窗口左上角的ClockSettings显示clk_0为外部时钟,频率为50Mhz,这是我们当前所用到的软核时钟。(注:外部时钟频率可以修改,此实验最好按板上晶振改为25Mhz)4)接下来要建立CPU,用鼠标双击窗口左侧框中的Processors->NIOSIIProcessor弹出如窗口,先选择软核的类型,Quartus一共提供了三种类型可供选择,NiosII/e占用资源最少600-800LEs,功能也最简单,速度最慢°NiosII/s占资源比前者多一些,功能也多了,速度也快一些,NiosII/f占资源最多,功能也最多,速度就快。选择的时候要根据你的需求和你的芯片资源来决定,在本实验中,我们选择NiosII/s,能够满足需要。在窗口下半部分的这些选项可以先不用管ResetVector是复位后启动时的Memory类型和偏移量ExceptionVector是异常情况时的Memory类型和偏移量。现在还不能配置,需要RAM设置好以后才能修改这里,点击Next,需要设置JTAGDebugModule,即JTAG调试时所要用到的功能模块,我们选择Level1,只使用最简单的功能。点击Next>继续,最后点击Finish完成,出现cpu_0,就是刚才创建的cpu。5)接下面我们要添加片内RAM选择左边目录树下的MemoriesandMemoryControllers->On-Chip->On-ChipMemory(RAMorROM)双击On-ChipMemory(RAMorROM),我们将RAM的大小改为20K,其他不做修改,然后直接点击Finish完成,回到SOPCBuilder主窗口。主窗口上又加了一个Onchip_memory2_0的Module。6)接下来建立一个SystemID(这个版本中不是必需的),SystemID就是一种标示符,类似校验和的这么个东西,在你下载程序之前或者重启之后,都会对它进行检验,以防止错误发生。在左边窗口的Peripherals->Debugandperformance->SystemIDPeripheral,双击SystemIDPeripheral会弹出对话框此窗口警告:SystemID组件的名字必需为sysid才能使用,点击Finish完成添加,在SPOCbuilder主窗口中选中SystemID组件,然后击点鼠标右键,弹下一个菜单,选择Rename,对sysid_0组件进行重命名,将此文本框中的sysid_0改为sysid。照此方法,我们把所有组件后面的_0全部去掉。7)接下来创建JTAGUART(调试时需要打字符串用才需要,如果单纯控制LED可以不要),首先JTAGUART是实现PC和NiosII系统间的串行通信接口,它用于字符的输入输出,在NiosII的开发调试过程中扮演了重要的角色,接下来我们开始建立它的模块。选择sopcbuilder主窗口左边InterfaceProtocols->Serial->JTAGUART双击JTAGUART,不做修改,点击Next>,下一步点击finish完成。回到SOPCBuilder主窗口,更改组件名jtag_uart_0为jtag_uart。8)接下来回去对CPU进行设定,在主窗口中双击CPU组件进入CPU设定对话框,如下把ResetVector右边的Memory:改为onchip_memory2,offset会设为0x0把ExceptionVector右边的Memory改为onchip_memory2,offset会设为0x20,点击窗口右下角的finish完成。9)接下来要添加一个PIO模块(ParallelI/O),点击窗口左侧的Peripherals->MicrocontrollerPeripherals->PIO(ParallelI/O),其中Width表示要建立的PIO宽度是多少,我们的板上有8个LED,选择宽度为8,Direction复选框中表示要建立的PIO的方向,分别表示Bidirectional(tristate)ports(双向三态口),Inputportsonly(仅仅作为输入口),Bothinputandoutputports(作为输入和输出口),Outputportsonly(仅仅作为输出口),在本实验中将要实现的是点亮LED,所以这个新建的PIO采用Outputportsonly(仅输出口)方式,点击Next继续,不需要选择,点Next继续,直接点击Finish,完成PIO模块的创建回到主窗口中我们为了方便识另U,将pio_0改名为pio_led。10)执行System菜单上的Auto-AssignBaseAddresses自动分配一下地址。最后就能进行编译了,点击SOPCBuilder主窗口左上角的SystemGeneration选项卡.我们点击最下面的Generate按键,弹出对话框会提示你是否保存改变,点Save,保存一下。开始编译,程序编好了,查看下最后的输出,最后一行显示Info:Systemgenerationwassuccessful,产生成功点击Exit退出,会回到QuartusII主界面。11)在这一步中需要分配管脚,回到Quartus界面以后,在Blockl.bdf界面里在空白处双击左键,会出现对话框(注意上图的红框内)展开左边的Project,下面有个helloled,这个helloled,就是刚才建立的NIOSII软核,quartusii中把它用了一个方块symbol来表示,点击左下角的0K按钮在Block1.bdf界面中,有个小方框阴影跟随着鼠标移动,鼠标点击,把它放在Block1.bdf界面中放好,在NIOS软核helloled上点击右键后点击GeneratePinsforsymbolports,这一步作用就是生成管脚,通过命名以后给信号分配真正的fpgaio口引脚。然后双击out_port_from_the_pio_led[7..0]端口符号,弹出窗口中修改引脚名,改为led[7..0],所示确认后,点击按钮编译工程,在弹出窗口中保存bdf文件为led。编译完成后,如果提示所示错误,则需要修改工程文件夹下led.qsf文件中“set_global_assignment-nameNOMINAL_CORE_SUPPLY_VOLTAGE1.0V”1.0V修改为1.2V,再次进行编译。编译成功后点击Assignments->Pins绑定引脚。12)接下来要对工程进行配置在quartus9.1sp2主窗口中,鼠标右键点击led,选择settingo进入Setting后,点击Device下面的DeviceandpinOption,出现DeviceandPinOptions对话框,选择Configuration选项卡在Configurationdevice下面的Useconfigurationdevice中选择EPCS4改好后,点击确认,再点击0K按钮返回quartus9.1sp2主界面Saveall按钮,保存下所有的改动。执行菜单Processing->StartCompilation,开始进行编译,最后Quartus显示一共用掉了5%的逻辑单元,用掉了18%的片上内存,接下来要将生成好的*.sof或*.pof下载到FPGA中,至此,NIOS的硬件逻辑部分已经编译完成并下载了,接下来要进行nios的软件部分了。4.NIOSII软件LED跑马灯编写1)打开NiosII软件,开始一>程序一>Altera—>NiosIIEDS9.1—>NiosII9.1SoftwareBuildToolsforEclipse。2)新建NiosIIApplication,New—>NiosIIApplicationandBSPfromTemplate.选择先前生成的SOPC文件,并输入工程名,选择工程模板HelloWorldSmall。然后点击“Finish”。左侧窗口中点击“hello_world_small.c”,可以看到程序。4)双击led8.c,写入程序,并保存。然后编译工程,在窗口的右下角可以看到编译进程。如果编译无错,则进行下载。5)下载运行。首先在实验箱上把之前绑定的FPGA引脚连接到LED对应的引脚,仿真器通过排线连接到实验箱上“JTAG”处,另一接口通过USB线连接到电脑。在Quartus软件中下载先前生成的目标文件,Tools->Programmer。在弹出窗口中点击“确定”。若窗口出现“NoHardware",则需设置下载方式。若有硬件连接,则不需要再设置。点击“Start”下载,弹出窗口,注意请勿点击“Cancel”。6)运行Nios应用程序。首先点击工程“led8”,点击右键,选择RunAs->NiosIIHardware若出现无目标连接,则需要刷新目标连接。点击“TargetConnection”,在窗口中点击“RefreshConnection",然后点击“Run”运行程序。若不出现无目标连接,则会自动运行程序。设计性实验步骤一致。五、实验数据/*"SmallHelloWorld"example.*Thisexampleprints'HellofromNiosII'totheSTDOUTstream.ItrunsontheNiosII'standard','full_featured','fast',and'low_cost'exampledesigns.ItrequiresaSTDOUTdeviceinyoursystem'shardware.*ThepurposeofthisexampleistodemonstratethesmallestpossibleHelloWorldapplication,usingtheNiosIIHALlibrary.Thememoryfootprintofthishostedapplicationis~332bytesbydefaultusingthestandardreferencedesign.ForamorefullyfeaturedHelloWorldapplicationexample,seetheexampletitled"HelloWorld".*Thememoryfootprintofthisexamplehasbeenreducedbymakingthefollowingchangestothenormal"HelloWorld"example.CheckintheNiosIISoftwareDevelopersManualforamorecomplete*description.IntheSWApplicationproject(small_hello_world):*-IntheC/C++Buildpage*-SettheOptimizationLevelto-Os*InSystemLibraryproject(small_hello_world_syslib):-IntheC/C++Buildpage*-SettheOptimizationLevelto-Os*-DefinethepreprocessoroptionALT_NO_INSTRUCTION_EMULATIONThisremovessoftwareexceptionhandling,whichmeansthatyoucannotruncodecompiledforNiosIIcpuwithahardwaremultiplieronacorewithoutathemultiplyunit.ChecktheNiosIISoftwareDevelopersManualformoredetails.*-IntheSystemLibrarypage:-SetPeriodicsystemtimerandTimestamptimertononeThispreventstheautomaticinclusionofthetimerdriver.-SetMaxfiledescriptorsto4Thisreducesthesizeofthefilehandlepool.*-CheckMainfunctiondoesnotexit-UncheckCleanexit(flushbuffers)Thisremovestheunneededcalltoexitwhenmainreturns,sinceitwon't.*-CheckDon'tuseC++ThisbuildswithouttheC++supportcode.*-CheckSmallClibraryThisusesareducedfunctionalityClibrary,whichlackssupportforbuffering,fileIO,floatingpointandgetch(),etc.ChecktheNiosIISoftwareDevelopersManualforacompletelist.*-CheckReduceddevicedriversThisusesreducedfunctionalitydriversifthey'reavailable.ForthestandarddesignthismeansyougetpolledUARTandJTAGUARTdrivers,nosupportfortheLCDdriverandyoulosetheabilitytoprogramCFIcompliantflashdevices.-CheckAccessdevicedriversdirectlyThisbypassesthedevicefilesystemtoaccessdevicedriversdirectly.Thiseliminatesthespacerequiredforthedevicefilesystemservices.ItalsoprovidesaHALversionoflibcservicesthataccessthedriversdirectly,furtherreducingspace.Onlyalimitednumberoflibcfunctionsareavailableinthisconfiguration.-UseALTversionsofstdioroutines:FunctionDescriptionalt_printfOnlysupports%s,%x,and%c(<1Kbyte)alt_putstrSmalleroverheadthanputswithdirectdriversNotethisfunctiondoesn'taddanewline.alt_putcharSmalleroverheadthanputcharwithdirectdriversalt_getcharSmalleroverheadthangetcharwithdirectdrivers*/#include"system.h”#include〃altera_avalon_pio_regs.h〃#include〃alt_types.h〃//intmain(void)__attribute__((weak,alias("alt_main")));intalt_main(void)//如果编译不过,把此处改为intmain(void)试试{alt_u8led=0x00;alt_u8led1=0x10;alt_u8led2=0x08;alt_u8keyvalue=0;volatileinti,k=0,j=0;while(1){keyvalue=IORD_ALTERA_AVALON_PIO_DATA(PIO_INPUTS_BASE);switch(keyvalue&0x07){intj;case0x0:led=0x0f;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0xf0;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;break;case0x1:led=0x55;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=~0x55;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;break;case0x2:led=0x03;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;for(k=0;k<3;k++)led=led<<2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;}break;case0x3:led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1<<1;led2=led2>>1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1<<1;led2=led2>>1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1<<1;led2=led2>>1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;if(led==0x81){Ied1=led1>>1;led2=led2<<1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1>>1;led2=led2<<1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1>>1;led2=led2<<1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led1=led1>>1;led2=led2<<1;led=led1|led2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;}led1=0x10;led2=0x08;break;case0x4:j=0;while(j<5){led=0x18;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x24;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x42;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x81;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x42;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x24;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0x18;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;j++;}j=0;while(j<5){led=0x03;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;for(k=0;k<3;k++){led=led<<2;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;}j++;}j=0;while(j<5){led=0x0f;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=0xf0;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;j++;}j=0;while(j<5){led=0x0f;led=0x55;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;led=~0x55;IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);i=0;while(i<2000000)i++;j++;}break;}}return0;六、数据处理及结果分析验证性实验实验了跑马灯的功能。设计性实验实现了用按键控制8个LED灯的闪烁状态,灯的状态如下:灯分为左右两部分交替闪烁。灯分为奇数号和偶数号灯两部分交替闪烁。循环从左至右间隔(两盏灯一组)跑动显示;从中间开始向两侧依次点亮,从两侧向中间依次点亮。当判断开关状态为00时,LED为左右两部分交替闪烁。当判断开关状态为01时,LED为奇数号和偶数号两部分交替闪烁。当判断开关状态为10时,LED为循环从左至右间隔(两盏灯一组)跑动显示(程序段led=led*2为LED亮灯右移)。当判断开关状态为11时,LED为从中间开始向两侧依次点亮,从两侧向中间依次点亮。七、实验小结1、熟悉了QuartusII、SOPCBuilder、NiosIIIDE的基本操作;2、了解了SOPC的开发流程,基本掌握NiosII软核的定制流程;3、掌握了NiosII软件的开发流程和软件的基本调试方法。实验名称:Linux操作系统实验实验时间:2016.5.19一、实验目的熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用。使用Linux的arm-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。二、实验仪器设备硬件:ARM9嵌入式实验平台、PC机。软件:PC机操作系统UbuntuLINUX9.0+MINICOM+ARM-LINUX开发环境。三、实验原理实验利用Linux操作系统,做字符显示。四、实验内容1、验证实验硬件连接确保ARM9实验系统电源未开启下,用镊子轻轻地将拨码开关S100的第二个拨到ON(朝上)。在CON400处插入SMC卡(金属面朝下)。实验系统CON500处插入网线,网线另一端连接到电脑。232串口线连接到UART0处,另一端连接到电脑。连接电源。电源适配器插头连接到220V,另一端连接到实验箱上CON800处。实验箱上电源开关S800拨到“1”。电脑开机,选择“Ubuntu”,启动到Linux操作系统下。点击桌面上方的places->HomeFolder,进入cxsys目录,双击workdir,在该目录下新建“myhello.c文件”,创建方法:在该窗口空白处点击鼠标右键,选择“Create->Document->EmptyFile”,然后命名该文件“myhello.c”,如下图所示。双击打开该文件,用C语言编辑,实现打印输出“Hello,自己的学号名字”。(4)打开终端,在桌面左上角点击Application->Accessories->Terminal。输入minicom命令,然后回车,运行。(5)在实验平台dev/shm目录下创建nfs目录。按“Ctrl+c”,然后回车。输入cddev/shm,进入shm目录下。在该目录下创建nfs目录,输入mkdirnfs。输入ls目录查看命令,可以看到上一步骤创建的nfs目录。(6)输入挂接(mount)命令:mount-tnfs-onolock:/home/cxsys/NFS_SHARE/dev/shm/nfs,把nfs目录挂接到PC机上home/administrator/NFS_SHARE目录。(7)查看挂接是否成功。可以先拷贝自己步骤(3)新建的myhello.c文件到PC机上home/cxsys/NFS_SHARE目录下,输入:cdnfs进入nfs目录,然后回车,再输入ls命令,如果看到所列文件和PC机上home/cxsys/NFS_SHARE目录下的myhello.c文件,说明挂起成功。显示nfs目录下的文件,可以看到。(8)另外再打开终端窗口,输入cdworkdir/,进入workdir目录。(9)设置交叉编译的环境变量,指定编译工具的路径exportPATH=/home/cxsys/YF2410/2.95.3/bin:$PATH。(10)输入arm-linux-gcc-omyhellomyhello.c,编译myhello.c的文件,生成可执行文件。(11)在cxsys/workdir目录下把生成的可执行文件hello复制到cxsys/NFS_SHARE下。(12)查看可执行文件hello在实验平台上的运行结果,切换到最开始打开的终端窗口,输入./hello。2、设计性实验(1)输入ls/dev/test/命令,查看设备驱动。可以看到字符设备驱动名称为0raw,该驱动在初始化时存入10个数据,供应用程序使用。(2)输入~$gedit~/workdir/Char_dev.c,查看并阅读底层驱动程序Char_dev.c,~为/home/administrator/。(3)编辑应用程序yourtest.c,输入设计的代码。(4)交叉编译应用程序.(5)把编译生成的目标文件拷贝到nfs_share里。(6)运行程序,输出数据。五、实验数据#include<stdio.h>intmain(intargc,char**argv){printf("hello!\n");}六、数据处理及结果分析验证性实验中,输出“hello”七、实验小结熟悉了Linux开发环境,学会了基于S3C2410的Linux开发环境的配置和使用。并使用Linux的arm-linux-gcc编译,使用基于NFS方式的下载调试,掌握了嵌入式开发的基本过程。实验名称:DSP实验名称:DSP控制步进电机实验实验时间:2016.5.26一、实验小结1、学习DSP外部中断的使用;掌握DSP中断向量表的划分。2、了解汇编和C混合编程以及IO空间操作等基本DSP编程技巧。二、实验仪器设备PC机一台,SZDSPF型开发实验平台一套三、实验原理1、中断向量表实验使用的DSP为TMS320VC5416,DSP的中断向量表如表3.1所示。
表31DSP中断向量表NAMETRAP/1NTRNUMBER间locationDECIMALHEXPHIOWTYFUNCTIOW晦SINTH0001RcmIJimUwruntfwftwiXT-NMi,5r4T16D42Nmn姑新1相仍t&m中1S«T172g做rri^fTupll#17SIMTia3120CSolhmfftsmjptm's*<ri94ie10SoftwnntHTupE#1ESIHT3}52014SoMararrtBmjptfZCB3418SaftwnrrtmupCfQ1l3WT2272B1CSofhwisrrtBmjptffZZSMT23B323d女IbwHrvlfmjpl<23SWT2H924ScrfrwrtSIWT25ID4D2311ScIbwHrrtamjpt11442CSIMT27124B30Salt*由hmenuptJ271352&jfr*nrtntcn^pt心SIHT29w5633ntBmjptf?9153CSofhwE5IWTT]16g■UJ3E>1emalit9efintem4>tK:1FTTSinn17踣444EiIbtuMuhtiHbEmj||)i*14T215INT21372曲SEMwralitMfintenMtV?TINTSIST319784CTimerinterruptRINTO,SINT4nBO1McflSP5HCPPWnmfTbpI:sWTO.3H752184gMtflSPtotanwiimeffupi(derauin)RIMT^.SIMTl?22网sMtfiSP#2rrtprvpl^mJt;MHTZStn?23925CwMcflSP£2IrarrmHimemjpt(der^jHi检引皿24常411r、1prnluwirtcfin#峙HiNTSiNrre251D06412HPImerrup、1按键与显示B104681SMpSSP朝recsvrftIett中MHT1,5lNTnZ71D36C14McBSP»1trar^ihnerrumrdsrajh)〒实验采用CPLD(EPM7128).•给DSP扩展了一个"I/O口(:地址为C00I)h),来初完成bDSP:对I/OI—IDMAC5.SIHT132311616□Fi4Acriarnei5区电瑚科剩忒对数码管的操作,DSP通过IO方式对数码管送:攵据,一高8位D8〜D15数据为数码管的位码,低8位D7〜D0数据为数码管的段码。同时,CPLD(EPM7128)给DSP扩展了一个I/O口(地址为C001h),来完成DSP对读所按键键值。实验采用键盘中断,当有键(任意一个键)按下时,给DSP一个中断信号(INT2),DSP通过I/O端口(地址为C001h)读键值,读取键值后由数码管显示出来。其中“键1”对应数据D8位,“键2”对应数据D9位……“键8”对应数据D15位。数码管模块原理图如下:SM1和SM2为两个四位一体的8段共阴数码管,右边为位码的第一位。
LED图2.Z3数码官模块原理国暗箱用羊Vj-Ud—匹14-3JI2,13.13、步进电机工作原理LED图2.Z3数码官模块原理国暗箱用羊Vj-Ud—匹14-3JI2,13.1电机驱动方式可以米用双四拍(AB—BC—CD—DA—AB)方式,也可以米用单四拍(A—B—C—D—A)方式,或单、双八拍(A—AB—B—BC—C—CD—D—DA—A)方式。各种工作方式的时序图如下:(高电平有效)双四拍方式DAABBCCDDA实验可通过DSP的I/O方式来控制电机的运转,CPLD(EPM7128)给DSP扩展了一个I/O口。在来完成对步进电机的控制。DSP的I/O方式下,将DSP的经过电平转换的四位数据线D5〜D2送往步进电机模块的锁存器,信号再经过隔离和驱动后对四相(A、B、C、D)步进电机控制。DSP对步进电机控制的I/O访问地址为C004h。四、实验内容1、验证性实验(1)硬件连接:“设置模块”SW1中“A”和“C”将设置为“1”;DSP仿真器的USB接口连接USB线到PC机,JTAG接口连接到实验箱SZ-5416模块上SZ-JTAG接口。将实验箱上的电源模块开关“MS2”、“MS4”按下,打开机箱电源(在机箱右侧船型开关)(2)(注意:必须先做步骤(1))参考附录2"CCS的使用参考步骤”,在CCS下,建立工程文件,把验证性实验的所有源程序(cmd文件与c程序文件)加载到该工程中,编译、链接,链接后生成OUT文件,把该目标文件通过JTAG下载到实验箱中,全速运行程序,依次按键1—8,观察数码管的显示。2、设计性实验在CCS下建立一工程文件调试自己编写程序(或者直接修改验证实验C程序)并运行、下载目标文件到实验箱中,验证设计程序。附录2:一、建立工程新建一个工程,Project->New。在所示窗口中点击Location,选择建立工程的存放文件夹,在Project中输入工程名。新建文件File->New->SourceFile。保存文件File->Save,若是C程序,文件以.c保存,若是汇编程序文件以.asm保存。添加文件到工程(如下图所示),单击工程,点击鼠标右键,选择Addfiles……。(cmd文件通过同样的方式添加)。在弹出的窗口中,选择所要添加文件的类型(若是cmd文件,“文件类型”选择“linkerCommandFile(*.cmd)”)。编译/执行程序(1)选择Project->RebuidAll或工具栏的相应按钮。(2)编译成功后,选择File->LoadProgram,选择编译生成的可执行程序*.out。(3)选择Debug->Run或工具栏中的相应图标。五、实验数据#pragmaCODE_SECTION(vect,"vect")unsignedint*pmem=0;#defineIMR*(pmem+0x0000)#defineIFR*(pmem+0x0001)#definePMST*(pmem+0x001d)#defineSWCR*(pmem+0x002b)#defineSWWSR*(pmem+0x0028)#defineCLKMD*(pmem+0x0058)ioportunsignedportc001;//键盘地址ioportunsignedportc000;//数码显示地址ioportunsignedportc004;intkey=1,n=0;〃数据线的高8位是位码,低8位是段码voidcpu_init()/*初始化DSP*/{asm("ssbxintm");asm("ssbxxf");//总清零PMST=0xe8;SWWSR=0x7fff;SWCR=0x0001;IMR=0x010c;IFR=0xffff;CLKMD=0x1000;asm("rsbxxf");//打开数据口asm("rsbxintm");}voiddelay10ms(){inti,j,k;for(i=0;i<50;i++)for(j=0;j<20;j++)for(k=0;k<20;k++);}voidmain(){cpu_init();while(1){if(key==1){portc004=0x30;delay10ms();portc004=0x18;delay10ms();portc004=0x0c;delay10ms();portc004=0x06;delay10ms();portc004=0x03;delay10ms();}if(key==2){portc004=0x30;delay10ms();portc004=0x03;delay10ms();portc004=0x06;delay10ms();portc004=0x0c;delay10ms();portc004=0x18;delay10ms();}if(key==3){while(n<5){delay10ms();n++;}}}}interruptvoidkeyint0()//键盘测试{inta;a=portc001;a=a&0xff00;if(a!=0xff00){delay10ms();a=portc001;a=a&0xff00;switch(a){case0xfe00:portc000=0x013f;key=1;asm("nop");break;case0xfd00:portc000=0x0206;key=2;asm("nop");break;case0xfb00:portc000=0x045b;key=3;asm("nop");break;}}}voidvect(){asm(".ref_c_int00”);asm(".ref_keyint0");asm("b_c_int00");/*reset*/asm("nop");asm("nop");asm("rete");/*nmi*/asm("nop");asm("nop");asm("nop");asm("r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 路桥工程施工项目造价的成本控制措施研究
- 中医急诊护理中的多学科合作
- 溶剂培菌工安全素养测试考核试卷含答案
- 2026年社区灯箱广告合同(1篇)
- 涂装后处理工安全实操模拟考核试卷含答案
- 高中规划指南
- 2026年投资还款合同(1篇)
- 橡胶制胶工复测测试考核试卷含答案
- 2026年建筑用工临时合同(1篇)
- 火电工程作业指导书
- 2026上半年安徽黄山市休宁城乡建设投资集团有限公司及权属子公司招聘18人笔试历年参考题库附带答案详解
- 统编人教五年级语文下册《杨氏之子》教学课件
- 编制说明-矿产资源规划数据质量检查与汇交规范
- 2026上海市工商外国语学校招聘9人笔试备考题库及答案解析
- 充电桩日常维护手册
- 2026届新高考语文三轮热点复习:二元思辨作文指导
- 社区卫生服务站内控制度
- 河北省石家庄市2026年小升初入学分班考试数学试卷解析及答案
- 煤矿乳化泵维修培训课件
- 2026年邮储银行面试实战经验分享面试题库解读求职者必看含答案
- 感染性腹主动脉瘤诊断治疗专家共识解读指南
评论
0/150
提交评论