嵌入式ADS实验指导书_第1页
嵌入式ADS实验指导书_第2页
嵌入式ADS实验指导书_第3页
嵌入式ADS实验指导书_第4页
嵌入式ADS实验指导书_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一嵌入式微处理器系统的开发环境一、实验环境PC机 一台软件:ADS1.2集成开发环境一套二、实验目的1.了解嵌入式系统及其特点;2.熟悉嵌入式系统的开发环境和基本配置并能编写简单的汇编程序三、实验内容1.嵌入式系统的开发环境、基本配置2.使用汇编指令完成简单的加法实验四、实验步骤(1)在D:\新建一个目录,目录名为experiment。(2)点击WINDOWS操作系统的“开始|程序|ARMDeveloperSuitev1.2|CodeWarriorforARMDeveloperSuite”启动MetrowerksCodeWarrior,或双击“ADS1.2”启动ADS1.2如图1-1所示:图1-1启动ADS1.2(3)在CodeWarrior中新建一个工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New…”菜单。这样就会打开一个如图1-2所示的对话框。选择【File】->【New…】,使用ARMExecutableImage工程模板建立一个工程,名称为ADS,目录为D:\experiment。图1-2新建文件在这个对话框中为用户提供了7种可选择的工程类型:1)ARMExecutablImage:用于由ARM指令的代码生成一个ELF格式的可执行映像文件;2)ARMObjectLibrary:用于由ARM指令的代码生成一个armar格式的目标文件库;3)EmptyProject:用于创建一个不包含任何库或源文件的工程;4)MakefileImporterWizard:用于将VisualC的nmake或GNUmake文件转入到CodeWarriorIDE工程文件;5)ThumbARMExecutableImage:用于由ARM指令和Thumb指令的混和代码生成一个可执行的ELF格式的映像文件;6)ThumbExecutableimage:用于由Thumb指令创建一个可执行的ELF格式的映像文件;7)ThumbObjectLibrary:用于由Thumb指令的代码生成一个armar格式的目标文件库。(4)选择【File】->【New…】建立一个新的文件TEST1.S,设置直接添加到项目中。输入如程序代码,并保存,此时在工程窗口中可以看到TEST1.S文件。图1-3新建test1.s(5)选择【Edit】->【Perferences…】,在Font选项设置字体是Fixedsys,Script是CHINESE_GB2312。图1-4设置字体(6)选择【Edit】->【DebugRelSettings…】,在DebugRelSettings对话框的左边选择ARMLinker项,设置链接地址。点击“DebugRelSettings…”图标按钮,即可进行工程的地址设置、输出文件设置、编 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START MOV R0,#15 ;设置参数 MOV R1,#8 ADDS R0,R0,R1 ;R0=R0+R1 B START END 实验预作关键过程及结果图:实验二汇编指令实验一、实验环境 PC机 一台ADS1.2集成开发环境一套二、实验目的1.了解ADS1.2集成开发环境及ARMulator软件仿真方法;2.掌握ARM7TDMI汇编指令的用法,并能编写简单的汇编程序;3.掌握指令的条件执行和使用LDR/STR指令完成存储器的访问。三、实验内容1.使用LDR/STR指令完成存储器的访问。2.使用数据处理指令实现数据传送和算术和逻辑运算。3.使用ADS1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegisters)监视寄存器的值,打开存储器观察窗口(Memory)监视存储器的值。根据以上要求完成该操作:使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址……周而复此循环;使用ADS1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegisters)监视R0、R1的值,打开存储器观察窗口(Memory)监视0x40003100上的值。四、实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程Instruction1。(2)建立汇编源文件TEST2.S,编写实验程序,然后添加到工程中。(3)设置工程链接地址ROBase为0x40000000,RWBase为0x40003000。设置调试入口地址Imageentrypoint为0x40000000。(4)编译链接工程,选择【Project】->【Debug】,启动AXD进行软件仿真调试。(5)打开寄存器窗口(ProcessorRegisters),选择Current项监视R0,R1的值。打开存储器观察窗口(Memory),设置观察地址为0x40003100,显示方式Size为32Bit,监视0x40003100地址上的值。图2-1Memory窗口显示格式设置寄存器显示格式与之类似。使用鼠标左键选择某一个寄存器,然后点击鼠标右键,Format项中选择显示格式Hex,Decimal等等。如图2-2所示。图2-2设置寄存器显示格式(6)单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,调试时观察寄存器和0x40003100地址上的值。图2-3调试程序窗口六、思考题1.LDR伪指令与LDR加载指令的功能和应用有何区别,举例说明?2.LDR/STR指令的前索引偏移指令如何编写?指令是怎样操作的?3.在AXD调试时如何复位程序?(提示:选择【File】->【ReloadCurrentImage】重新加载映象文件)七、参考程序COUNT EQU 0x40003100 ;定义一个变量,地址为0x40003100 AREA Example2,CODE,READONLY ;声明代码段Example2 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START LDR R1,=COUNT ;R1<=COUNT MOV R0,#0 ;R0<=0 STR R0,[R1] ;[R1]<=R0,即设置COUNT为0 LOOP LDR R1,=COUNT LDR R0,[R1] ;R0<=[R1] ADD R0,R0,#1 ;R0<=R0+1 CMP R0,#10 ;R0与10比较,影响条件码标志 MOVHS R0,#0 ;若R0大于等于10,则此指令执行,R0<=0 STR R0,[R1] ;[R1]<=R0,即保存COUNT B LOOP END 实验预作关键过程及结果图:单步运行观看寄存器和存储器的变化:具体指令讲解见指令手册。实验三:基于ADS的C语言程序实验一、实验环境 PC机 一台ADS1.2集成开发环境一套二、实验目的通过实验了解使用ADS1.2编写C语言程序,并进行调试。三、实验内容编写一个汇编程序文件Startup.S和一个C程序文件Test.c。汇编程序的功能是初始化堆栈指针和初始化C程序的运行环境,然后调跳转到C程序运行,这就是一个简单的启动程序。C程序使用加法运算来计算1+2+3+...+(N-1)+N的值(N>0)。四、实验预习要求(1)仔细阅读《ARM嵌入式系统基础教程》中第4章ARM指令系统的内容。(2)仔细阅读产品配套光盘附带文档《ADS集成开发环境及仿真器应用》或其他相关资料,了解ADS工程编辑和AXD调试的内容。(本实验使用软件仿真)五、实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程ProgramC。(2)建立源文件Startup.S和Test.c,编写实验程序,然后添加到工程中。(3)设置工程链接地址ROBase为0x40000000,RWBase为0x40003000。设置调试入口地址Imageentrypoint为Ox40000000。(4)设置位于开始位置的起始代码段,如图3-1,3-2所示。图3-1设置位于开始位置的起始代码段(1)图3-2设置位于开始位置的起始代码段(2)(5)编译链接工程,选择Project—Debug,启动AXD进行软件仿真调试。(6)在Startup.s的“BMain”处设置断点,然后全速动行程序。(7)程序在断点处停止。单步运行程序,判断程序是否跳转到C程序中运行。(8)诜择Processorvlews—variables打开变量观察窗口,观察全局变量的值,然后单步/全速运行程序,判断程序的运算结果是否正确。如图3-3所示。图3-3ARM实验3的运行观察结果六、思考题(1)在实验参考程序中,Startup.s文件的作用是什么?如果没有Startup.s文件,C程序运行会出错吗?(2)实验程序中的Main()函数名是否可以更改为其他名字?(提示:Main只是一个标号。)七、参考程序 ;startupfile IMPORT |Image$$RO$$Limit| IMPORT |Image$$RW$$Base| IMPORT |Image$$ZI$$Base| IMPORT |Image$$ZI$$Limit| IMPORT MAIN ;declarethemain()intheCProg AREA start,CODE,READONLY ENTRY CODE32 Reset LDR SP,=0x40003f00 ;initialtheCcase LDR R0,=|Image$$RO$$Limit| LDR R1,=|Image$$RW$$Base| LDR R3,=|Image$$ZI$$Base| CMP R0,R1 BEQ LOOP1 LOOP0 CMP R1,R3 LDRCC R2,[R0],#4 STRCC R2,[R1],#4 BCC LOOP0 LOOP1 LDR R1,=|Image$$ZI$$Limit| MOV R2,#0 LOOP2 CMP R3,R1 STRCC R2,[R3],#4 BCC LOOP2 B MAIN END //mainfile#define uint8 unsignedchar #define uint32 unsignedint#define N 100 uint32sum;voidMAIN(void){ uint32i; sum=0; for(i=0;i<=100;i++) sum+=i; while(1);}实验四:C语言调用汇编程序实验一、实验环境 PC机 一台ADS1.2集成开发环境一套二、实验目的掌握在C语言程序中调用汇编程序,了解ATPCS的基本规则。三、实验内容在C程序调用汇编子程序,实现两个整数的加法运算。汇编子程序的原型为:uint32Add(uint32x,uint32y)其中uint32已定义为unsignedint。四、实验预习要求(1)仔细阅读ARM公司的ATPCS的相关文档。例如ATPCS.PDF。(2)仔细阅读产品配套光盘附带文档《ADS集成开发环境及仿真器应用》或其他相关资料,了解ADS工程编辑和AXD调试的内容。(本实验使用软件仿真。)五、实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程ProgramCl。(2)建立源文件Startup.s、Add.s和Test.c,编写实验程序,然后添加到工程中。(3)设置工程链接地址ROBase为0x40000000,RWBase为0x40003000。设置调试入口地址Imageentrypoint为Ox40000000。(4)设置工程链接选项,位于开始位置的起始代码段设置为Startup.o的Start段。图4-1设置开始位置的起始代码段(5)编译链接工程,选择Project→Debug,启动AXD进行软件仿真调试。(6)在Test.c文件中调用Add()的代码处设置断点,然后全速运行程序。(7)程序在断点处停止。使用SetpIn单步运行程序,观察程序是否转到汇编程序Add.s。(8)选择ProcessorViews→Variables打开变量观察窗口.观察全局变量的值,然后单步/全速运行程序,判断程序的运算结果是否正确。如图4-2所示。图4-2ARM实验4的运行观察结果六、思考题在实验参考程序中,如何以指针形式传递参数?(即设汁“uint32Add(uint32*x,uint32*y)”函数。)七、参考程序startup.s文件程序见实验3 //Test.c#defineuint8 unsignedchar#defineuint32 unsignedintexternuint32 Add(uint32x,uint32y);uint32sum;voidMain{ sum=Add(5,4); while(1);};Add.s EXPORT Add AREA Addc,CODE,READONLY ENTRY CODE32 Add ADD R0,R0,R1 MOV PC,LR END源代码组织见图源代码组织图实验五:GPIO输出实验一、实验环境 PC机 一台ADS1.2集成开发环境一套EasyARM2200教学实验平台一套二、实验目的(1)掌握LPC2200专用工程模板的使用。1(2)掌握EasyJTAG仿真器的安装和使用。(3)能够在EasyARM2200教学实验开发平台上运行第一个程序(无操作系统)。(4)熟悉LPC2000系列ARM7微控制器的GPIO控制。三、实验内容编程控制LPC2200实验箱上的蜂鸣器报警。先使用片外RAM进行调试,调试通过后将程序固化到片外FLASH中,脱机运行程序。四、实验预习要求(1)仔细阅读《ARM嵌入式系统基础教程》5.7节的LPC2000引脚连接模块,5.9节的GPIO。//H-jtag(2)仔细阅读本书第1章的内容,了解EasyARM2200教学实验开发平台的硬件结构,注意蜂鸣器的相关控制电路。(3)仔细阅读产品配套光盘附带文档《ADS集成开发环境及仿真器应用》或其他相关资料,了解ADS1.2集成开发环境、LPC2200专用工程模板以及EasyJTAG仿真器的应用。五、实验原理如何在EasyARM2200上运行第一个程序。(1)安装ADS1.2(PC)(2)了解ADS1.2(PC)(3)连接EasyJTAG仿真器和EasyARM2200开发板(硬件)(4)安装EasyJTAG驱动程序(PC)(5)添加工程模板(PC)(6)用工程模板建立第一个工程(PC)(7)仿真调试第一个工程(PC+硬件)说明:(PC)属于在PC机上操作,即软件的操作;(硬件)属于开发板硬件操作;(PC+硬件)属于在PC机上进行软件操作,硬件上要连接或跳线操作。1、安装ADS1.2,运行在ADS目录下Setup.exe,开始安装ADS1.2。按照安装软件的提示安装,与其它软件安装操作方法基本一致。2、了解ADS1.2,使用ADS1.2建立工程,编译连接设置,调试操作等,参考本书第2章的内容。更详细使用方法参考ADS1.2的在线帮助文档或相关资料。3、连接EasyJTAG仿真器和EasyARM2200开发板。将EasyJTAG仿真器的25针接口通过并口延长线与PC机的并口连接,将EasyJTAG仿器的20针接口通过20PIN连接电缆接到EasyARM2200开发板的J2上,然后使用配套的压器(9V)给开发板供电。4、.EasyJTAG仿真器的安装与应用参考本书第2.5节的内容。5.、添加工程模板参考本书第2.4节的内容。6、.用工程模板建立第一个工程使用LPC2200专用工程模板建立工程(比如ARMExecutableImageforlpc22xx工程模板),建立源文件并加入到工程,然后编写程序代码;编译连接工程,若有错误,则修改程序,然后再次编译。7.仿真调试第一个工程正确设置EasyARM2200开发板上的跳线;启动AXD进行仿真调试。六、实验步骤1、连接EasyJTAG仿真器和EasyARM2200开发板,然后安装EasyJTAG仿真器的驱动程序(若已经安装过,此步省略)。2、为ADS1.2增加LPC2200专用工程模板(若已增加过,此步省略)。3、启动ADS1.2,使用ARMExecutableImageforlpc22xx工程模板建立一个工程BeepCon_C。4、建立C源文件BeepCon.c,编写实验程序,然后添加到工程的user组中。5、选用DebugInExram生成目标,如图5-1所示,然后编译连接工程。图5-1选择生成目标6、将EasyARM2200开发板上的JP9跳线短接,JP4跳线断开,JP6跳线设置为Bank0-RAM、Bank1-Flash。7、选择【Project】->【Debug】,启动AXD进行JTAG仿真调试(需要正确设置仿真器,注意:使用DebugInExram生成目标时,使用片外RAM进行仿真调试,JP6跳线要设置为Bank0-RAM、Bank1-Flash,在AXD中设置仿真器参考如图5-2所示。图5-2片外RAM调试的仿真器设置8、若JTAG连接出错,或AXD主窗口没有显示Startup.S源程序,按本书第2.5节介绍的方法进行处理。9、全速运行程序,程序将会在beepcon.c的主函数中停止(因为main函数起始处默认设置有断点)。10、单击ContextVariable图标按钮(或者选择【ProcessorViews】->【Variables】)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择【SystemViews】->【DebuggerInternals】即可打开LPC2000系列ARM7微控制器的片内外设寄存器窗口。11、可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。12、当仿真调试通过后关闭AXD,在ADS1.2集成开发环境中选用RelOutChip生成目标,然后编译连接工程。13、将EasyARM2200开发板上的JP9跳线短接,JP1、JP4跳线断开,JP6跳线设置为Bank0-Flash、Bank1-RAM,JP7跳线设置为OUTSIDE。14、选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。此时EasyJTAG仿真器将会把程序下载到片外FLASH上(需要正确设置仿真器,参考第2.5节)。注意:使用RelOutChip生成目标时,使用片外FLASH进行仿真调试(或固化程序),JP6跳线要设置为Bank0-Flash、Bank1-RAM,在AXD中设置仿真器参考如图5-3所示。图5-3片外FLASH调试的仿真器设置15、按EasyARM2200开发板上的RST复位键,观察程序是否能脱机运行。16、实验结束后,在AXD中设置仿真器为片外RAM调试方式的设置,以便于后面实验的正确操作。七、思考题为什么这个实验的工程不需要设置连接地址?(提示:LPC2200专用工程模板已集成了起动代码、编译选项和连接地址设置等等)在实验参考程序中,如何控制蜂鸣器报警的速度?在LPC2000系列ARM7微控制器中,有哪两个管脚作GPIO输出时需要外接上拉电阻?八、参考程序GPIO输出控制实验1的参考程序见程序清单。GPIO输出控制实验1参考程序/*****************************************************************************文件名:BEEPCON.C*功能:蜂鸣器控制。对蜂鸣器B1进行控制,采用软件延时方法。*使用I/O口直接控制,采用灌电流方式。*说明:将跳线器JP9短接,JP4断开。****************************************************************************/#include"config.h"#defineBEEPCON0x00000080/*P0.7引脚控制B1,低电平蜂鸣*//*****************************************************************************名称:DelayNS()*功能:长软件延时。*入口参数:dly延时参数,值越大,延时越久*出口参数:无****************************************************************************/voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--)for(i=0;i<5000;i++);}/*****************************************************************************名称:main()*功能:控制蜂鸣器蜂鸣。****************************************************************************/intmain(void){PINSEL0=0x00000000;//设置管脚连接GPIOIO0DIR=BEEPCON;//设置I/O为输出while(1){IO0SET=BEEPCON;//BEEPCON=1DelayNS(10);IO0CLR=BEEPCON;//BEEPCON=0DelayNS(10);}return(0);}实验六:GPIO输入实验一、实验环境 PC机 一台ADS1.2集成开发环境一套EasyARM2200教学实验平台一套二、实验目的能够使用GPIO的输入模式读取开关信号。三、实验内容读取P0.14口上的电平值,然后将读到的值输出控制蜂鸣器。四、实验预习要求仔细阅读《ARM与嵌入式系统基础教程》第5.7节的LPC2000管脚连接模块,第5.9节的GPIO。仔细阅读本书第1章的内容,了解EasyARM2200开发板的硬件结构,注意蜂鸣器控制电路及JP1跳线器的说明。仔细阅读本书第2章的内容,了解ADS1.2集成开发环境、LPC2200专用工程模板、EasyJTAG仿真器的应用。五、实验原理P0.14口设置为输入模式时,口线内部无上拉电阻,当与按键或跳线器连接使用时需要外接上拉电阻,防止口线悬空。GPIO输入实验原理图如图6-1所示。图6-1GPIO输入实验原理图六、实验步骤(1)启动ADS1.2,使用ARMExecutableImageforlpc22xx工程模板建立一个工程ReadPin_C。(2)建立C源文件ReadPin.c,编写实验程序,然后添加到工程的user组中。(3)选用DebugInExram生成目标,然后编译连接工程。(4)将EasyARM2200开发板上的JP9跳线短接,JP4跳线断开,JP6跳线设置为Bank0-RAM、Bank1-Flash。(5)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。(6)单步运行程序,先短接JP1,观察IO0PIN寄存器的值,然后断开JP1,观察IO0PIN寄存器的值。全速运行程序,短接/断开JP1,控制蜂鸣器的蜂鸣。说明:可以通过Watch窗口观察寄存器的值。选择【ProcessorViews】->【Watch】打开Watch窗口,在Watch窗口内点击鼠标右键,选择AddWatch…项添加变量,如图6-2所示。图6-2Watch窗口在AddWatch窗口中的Expression项输入*((unsignedlong*)0xE0028000),然后回车,如图6-3所示,然后选择AddToView按钮,即可在Watch窗口观察IO0PIN寄存器(IO0PIN寄存器的地址0xE0028000)。图6-3AddWatch对话框在Watch窗口中选择一个观察变量,按Del键即可删除此观察变量。注意:有些寄存器不能读出显示或读操作会影响到其它寄存器的值。七、思考题如果将P0.30设置为GPIO输入模式,且管脚悬空,那么读取P0.30得到的值是0还是1?或者是不确定?如果需要读取当前P0.7的输出值(不是管脚上的电平),如何实现?八、参考程序GPIO输入控制实验的参考程序见程序清单。GPIO输入控制实验参考程序/*****************************************************************************文件名:READPIN.C*功能:读取I/O引脚值,并输出控制蜂鸣器。*使用I/O口输入方式对P0.14口进行扫描。*说明:将跳线器JP9短接,JP4断开,然后短接/断开JP1(使P0.14为低/高电平)。****************************************************************************/#include"config.h"#defineBEEPCON0x00000080/*P0.7引脚控制B1,低电平蜂鸣*/#definePIN_P0140x00004000/*定义P0.14屏蔽字*//*****************************************************************************名称:main()*功能:读取P0.14口的值,并输出控制蜂鸣器B1。****************************************************************************/intmain(void){uint32i;PINSEL0=0x00000000;//设置管脚连接GPIOIO0DIR=BEEPCON;//设置B1控制口为输出,其它I/O为输入while(1){if((IO0PIN&PIN_P014)!=0)IO0SET=BEEPCON;elseIO0CLR=BEEPCON;for(i=0;i<1000;i++);}return(0);}实验七:UART通讯实验一、实验环境 PC机 一台ADS1.2集成开发环境一套EasyARM2200教学实验平台一套二、实验目的1.了解LPC2200处理器的UART基本工作原理及配置操作;2.能够使用LPC2200处理器的UART进行数据发送和接收。三、实验内容使用UART0发送字符串“HelloWorld!”。UART0设置为通讯波特率115200,8位数据位,1位停止位,无奇偶校验。四、实验预习要求仔细阅读《ARM嵌入式系统基础教程》第5.10节UART0的说明。仔细阅读本书第1章的内容,了解EasyARM2200开发板的硬件结构,注意串口部分的电路。仔细阅读SP3232E芯片的数据手册,了解此芯片的作用及应用电路设计。五、实验步骤(1).启动ADS1.2,使用ARMExecutableImageforlpc22xx工程模板建立一个工程SendStr_c。(2)建立C源文件SendStr.c,编写实验程序,然后添加到工程的user组中。(3)选用DebugInExram生成目标,然后编译连接工程。(4)将EasyARM2200开发板上的JP6跳线设置为Bank0-RAM、Bank1-Flash。(5)使用串口延长线把EasyARM2200开发板的CZ2(UART0)与PC机的COM1连接。PC机运行EasyARM软件,设置串口为COM1,波特率为115200,然后选择【设置】->【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口。(6)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。(7)全速运行程序,PC机上的EasyARM软件会不断的显示“HelloWorld!”。如图7-1所示。图7-1UART实验运行结果七、思考题U0RBR寄存器和U0THR寄存器的地址是完全一样的,是不是说明接收寄存器和发送寄存器是同一物理寄存器呢?如果将实验参考程序中等待数据发送完毕的代码改为“while((U0LSR&0x20)==0);”,程序运行能得到正确结果吗?八、参考程序UART实验的参考程序见程序清单。UART实验参考程序/*****************************************************************************文件名:SENDSTR.C*功能:向串口发送数据。*说明:使用外部11.0592MHz晶振,根据CONFIG.H文件配置,Fpclk=11.0592MHz;*通讯波特率115200,8位数据位,1位停止位,无奇偶校验。****************************************************************************/#include"config.h"/*****************************************************************************名称:DelayNS()*功能:长软件延时*入口参数:dly延时参数,值越大,延时越久*出口参数:无****************************************************************************/voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--)for(i=0;i<5000;i++);}#defineUART_BPS115200/*定义通讯波特率*//*****************************************************************************名称:UART0_Ini()*功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200*入口参数:无*出口参数:无****************************************************************************/voidUART0_Ini(void){uint16Fdiv;U0LCR=0x83;//DLAB=1,可设置波特率Fdiv=(Fpclk/16)/UART_BPS;//设置波特率U0DLM=Fdiv/256;U0DLL=Fdiv%256;U0LCR=0x03;}/*****************************************************************************名称:UART0_SendByte()*功能:向串口发送字节数据,并等待发送完毕。*入口参数:data要发送的数据*出口参数:无****************************************************************************/voidUART0_SendByte(uint8data){U0THR=data;//发送数据while((U0LSR&0x40)==0);//等待数据发送完毕}/*****************************************************************************名称:UART0_SendStr()*功能:向串口发送一字符串*入口参数:srt要发送的字符串的指针*出口参数:无****************************************************************************/voidUART0_SendStr(uint8const*str){while(1){if(*str=='\0')break;UART0_SendByte(*str++);//发送数据}}uint8constSEND_STRING[]="HelloWorld!\n";/*****************************************************************************名称:main()*功能:向串口UART0发送字符串"HelloWorld!"****************************************************************************/intmain(void){PINSEL0=0x00000005;//设置I/O连接到UART0UART0_Ini();while(1){UART0_SendStr(SEND_STRING);DelayNS(10);}return(0);}实验八:RTC实验一、实验环境 PC机 一台ADS1.2集成开发环境一套EasyARM2200教学实验平台一套二、实验目的掌握LPC2200的RTC基本设置及时间的读取操作。三、实验内容初始化LPC2200内部的RTC,然后读取时间值通过串口向上位机发送,并把秒的值输出到开发板上的LED1~LED8显示。四、实验预习要求仔细阅读《ARM嵌入式系统基础教程》第5.17节实时时钟(RTC)的说明。五、实验步骤(1)启动ADS1.2,使用ARMExecutableImageforlpc22xx工程模板建立一个工程SendRtc_C。(2)建立C源文件sendrtc.c,编写实验程序,然后添加到工程的user组中。(3)选用DebugInExram生成目标,然后编译连接工程。(4)将EasyARM2200开发板上的JP8跳线短接,JP6跳线设置为Bank0-RAM、Bank1-Flash。(5)使用串口延长线把EasyARM2200开发板的CZ2(UART0)与PC机的COM1连接。PC机运行EasyARM软件,设置串口为COM1,波特率为115200,然后选择【设置】->【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口(不要选择“十六进制方式显示”)。(6)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。//故障解决办法(7)全速运行程序,PC机上的EasyARM软件会不断的显示RTC的时间值。六、思考题若程序中已初始化YEAR、MONTH、DOM寄存器,则DOY寄存器是否还需要初始化?如果想定时每天的12:00:00报警,需要如何设置RTC的相关寄存器?七、参考程序RTC实验的参考程序见程序清单。RTC实验参考程序/*****************************************************************************文件名:SENDRTC.C*功能:运行RTC进行计时,将所时间值不断的通过串口向上位机发送,并把秒的值输出LED1--LED8*显示。*说明:将跳线器JP8短接。*通讯波特率115200,8位数据位,1位停止位,无奇偶校验。****************************************************************************/#include"config.h"#defineSPI_CS0x00000100/*P0.8*/#defineSPI_DATA0x00000040/*P0.6*/#defineSPI_CLK0x00000010/*P0.4*/#defineSPI_IOCON0x00000150/*定义SPI接口的I/O设置字*//*定义串口模式设置数据结构*/typedefstructUartMode{uint8datab;//字长度,5/6/7/8uint8stopb;//停止位,1/2uint8parity;//奇偶校验位,0为无校验,1奇数校验,2为偶数校验}UARTMODE;uint8send_buf[16];//UART0数据接收缓冲区/*****************************************************************************名称:UART0_Ini()*功能:初始化串口0。设置其工作模式及波特率。*入口参数:baud波特率*set模式设置(UARTMODE数据结构)*出口参数:返回值为1时表示初化成功,为0表除参数出错****************************************************************************/uint8UART0_Ini(uint32baud,UARTMODEset){uint32bak;/*参数过滤*/if((0==baud)||(baud>115200))return(0);if((set.datab<5)||(set.datab>8))return(0);if((0==set.stopb)||(set.stopb>2))return(0);if(set.parity>4)return(0);/*设置串口波特率*/U0LCR=0x80;//DLAB位置1bak=(Fpclk>>4)/baud;U0DLM=bak>>8;U0DLL=bak&0xff;/*设置串口模式*/bak=set.datab-5;//设置字长度if(2==set.stopb)bak|=0x04;//判断是否为2位停止位if(0!=set.parity){set.parity=set.parity-1;bak|=0x08;}bak|=set.parity<<4;//设置奇偶校验U0LCR=bak;return(1);}/*****************************************************************************名称:SendByte()*功能:向串口UART0发送字节数据,并等待发送完毕。*入口参数:data要发送的数据*出口参数:无****************************************************************************/voidSendByte(uint8data){U0THR=data;//发送数据while((U0LSR&0x20)==0);//等待数据发送}/*****************************************************************************名称:ISendBuf()*功能:将缓冲区的数据发送回主机。*入口参数:buf数据缓冲区*no发送数据的个数*出口参数:无****************************************************************************/voidISendBuf(uint8const*buf,uint8no){uint8i;for(i=0;i<no;i++)SendByte(buf[i]);}/*****************************************************************************名称:HC595_SendDat()*功能:向74HC595发送一字节数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论