ARM应用技术实验指导书13秋.docx
《ARM应用技术实验指导书13秋.docx》由会员分享,可在线阅读,更多相关《ARM应用技术实验指导书13秋.docx(32页珍藏版)》请在冰点文库上搜索。
ARM应用技术实验指导书13秋
《嵌入式系统设计》
实验指导书
哈尔滨理工大学
自动化学院
电子信息科学与技术
20012-10
realviewMDK开发环境简介
一、RealViewMDK软件开发环境简介
RealViewMDK源自德国Keil公司,被全球超过10万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的对各种嵌入式处理器的软件开发工具。
RealViewMDK集成了业内最领先的技术,包括µVision3集成开发环境与RealView编译器,支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20%。
1、RealViewMDK的突出特性
—启动代码生成向导,自动引导,一日千里
—软件模拟器,完全脱离硬件的软件开发过程
—性能分析器,看得更远、看得更细、看得更清
—Cortex-M3支持
—业界最优秀的编译器RealView编译器,代码更小,性能更高,配备ULINK2仿真器,无需安装驱动
—Flash编程模块轻松实现Flash烧写
2、产品模块介绍
µVision3IDE
启动代码生成向导
设备模拟器
性能分析器
RealView编译器
MircoLib
RL-ARM(可选)
ULINK2仿真器
صVision3IDE
µVisionIDE在全球拥有庞大的用户群,超过10万开发工程师在使用Keil开发工具。
不管以前是用8位、16位MCU,还是现在改用ARM32位处理器,µVisionIDE简单易用,能让您立马上手。
صVision3IDE主要特性:
●功能强大的源代码编辑器;
●可根据开发工具配置的设备数据库;
●用于创建和维护工程的工程管理器;
●集汇编、编译和链接过程于一体的编译工具;
●用于设置开发工具配置的对话框;
●真正集成高速CPU及片上外设模拟器的源码级调试器;
●高级GDI接口,可用于目标硬件的软件调试和ULINK2仿真器的连接;
●用于下载应用程序到FlashROM中的Flash编程器;
●完善的开发工具手册、设备数据手册和用户向导。
图1.1µVision3IDE
Ø启动代码配置向导
µVision3IDE的启动代码配置向导将各个所需配置的功能模块以对话框方式展示,附加的提示说明,帮助你快速轻松的做出选择,生成完善的启动代码,免除手工写几百行汇编程序的痛苦。
صVision3设备模拟器
µVision3设备模拟器的功能强大,能模拟整个MCU的行为。
使你在没有硬件或对目标MCU没有更深的了解的情况下,仍然可以立即开始开发软件。
Ø性能分析器
性能分析器可给所有的MCU实现如程序运行时间统计、被调用次数统计、代码覆盖率统计等高端功能,而这些功能对于快速定位死区代码,帮助优化分析等起了关键的作用。
ØRealView编译器(RVCT)
RealViewMDK集成的RealView编译器(跟RVDS使用一样的编译器),是业界最优秀的编译器,它能使代码容量更小、执行效率更高;使应用程序运行更快、系统成本更低。
ØMicroLib
为进一步改进基于ARM处理器的应用代码密度,RealViewMDK采用了新型microlibC库(用于C的ISO标准运行时库的一个子集),并将其代码镜像降低最小以满足微控制器应用的需求。
MicrolibC库可将运行时库代码大大降低。
ØRealView实时库RL-ARM(可选)
ØULINK2仿真器
ULINKUSB-JTAG仿真器
JTAG仿真器也称为JTAG调试器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。
JTAG仿真器连接比较方便,通过现有的JTAG边界扫描口与ARMCPU核通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控软件所必需的。
另外,由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接口问题,如高频操作限制、AC和DC参数不匹配,电线长度的限制等被最小化了。
使用集成开发环境配合JTAG仿真器进行开发是目前采用最多的一种调试方式。
ULINKUSB-JTAG仿真器支持众多Philips、Samsung、Atmel、AnalogDevices、Sharp、ST等众多厂商ARM7及ARM9内核的ARM微控制器,其将PC机的USB端口与用户的目标硬件相连(通过JTAG或OCD),使用户可在目标硬件上调试代码。
通过使用KeiluVisionIDE/调试器和ULINKUSB-JTAG仿真器,用户可以方便地编辑、下载和在实际的目标硬件上测试嵌入式的程序,并且具有三个LED灯分别显示RUN,COM,和USB状态。
使用ULINKUSB-JTAG仿真器可以实现以下功能:
USB通讯接口高速下载用户代码
存储区域/寄存器查看
快速单步程序运行
添加多个程序断点
运行实时程序
片内Flash编程
运行实时程序
ULINK2USB-JTAG仿真器
ULINK2通过JTAG,SWD,或OCDS将目标硬件与您电脑的USB端口连接起来,使用ULINK2您
可以调试在目标硬件上运行的嵌入式程序。
ULINK2不仅包含了ULINKUSB-JTAG适配器具有的所有功能,而且具有如下新的特点:
标准WindowsUSB驱动支持ULINK2即插即用
支持基于ARMCortex-M3的串行线调试
支持程序运行期间的存储器读写、终端仿真和串行调试输出
既支持20针引脚,同时也支持10针引脚
ULINK2仿真器图如图1.2所示。
图1.2ULINK2USB-JTAG仿真器图
二、RealView使用
1、创建一个工程
µVision是一个标准的窗口应用程序,可以点击程序按钮开始运行。
为了创建一个新的µVision工程必须作如下处理:
选择工具集
创建工程文件
选择设备
1)选择工具集
µVision可以使用ARMRealView编译工具、ARMADS编译器、GNUGCC编译器和KeilCARM编译器。
当使用GNUGCC编译器或ARMADS编译器时必须另外安装它们编译集。
实际使用的工具集可以在µVisionIDE的Project–Manage-Components,Environment,andBooks对话框的Folders/Extensions页(见下图)中选择。
图1.3选择工具集
∙UseRealViewCompiler复选框表示本工程使用ARM开发工具。
RealViewFolder文本框指定开发工具的路径。
∙下面的例子显示了各种版本的ARMADS/RealView开发工具的路径:
a)µVision的RealView编译器:
BIN31\
b)ADSV1.2:
C:
\ProgramFiles\ARM\ADSv1_2\Bin
c)RealView评估版2.1:
C:
\ProgramFiles\ARM\RVCT\Programs\2.1\350\eval2-sc\win_32-pentium
∙UseKeilCARMCompiler复选框表示本工程使用KeilCARM编译器、KeilAARM汇编器和KeilLARM链接器/装载器。
∙UseGNUCompiler复选框表示本工程使用GNU开发工具。
CygnusFolder文本框指定GNU的安装路径。
∙Keil根目录的设置是基于µVision/ARM开发工具的安装目录的。
对于KeilARM工具来说,工具组件的路径是在开发工具目录中配置的。
2)创建工程文件
单击Project->New...->µVisionProject菜单项,µVision3将打开一个标准对话框,输入希望新建工程的名字即可创建一个新的工程,建议对每个新建工程使用独立的文件夹。
例如,这里先建立一个新的文件夹,然后选择这个文件夹作为新建工程的目录,输入新建工程的名字Project1,µVision将会创建一个以Project1.UV2为名字的新工程文件,它包含了一个缺省的目标(target)和文件组名。
这些内容在ProjectWorkspace->Files中可以看到。
3)选择设备
在创建一个新的工程时,µVision要求为这个工程选择一款CPU。
选择设备对话框显示了µVision的设备数据库,只需要选择用户所需的微控制器即可。
例如,选择PhilipsLPC2106微控制器,这个选择设置了LPC2106设备的必要工具选项、简化了工具的配置。
图1.4选择设备
注意:
∙当创建一个新的工程时,µVision会自动为所选择的CPU添加合适的启动代码。
∙对于一些设备而言,µVision需要用户手动地输入额外的参数。
请仔细阅读这个对话框右边的信息,因为它可能包含所选设备的额外配置要求。
创建源文件以后,就可以将这个文件添加到工程中。
µVision提供了几种方法将源文件添加到工程中。
例如,在ProjectWorkspace->Files页的文件组上点击鼠标右键,然后在弹出的菜单中选择AddFiles菜单项,这时将打开标准的文件对话框,选择我们创建的asm或c文件即完成源文件的添加。
2.建立一个新的源文件
创建一个工程之后,就应开始编写源程序。
选择菜单项File-New可创建新的源文件,μVisionIDE将会打开一个空的编辑窗口用以输入源程序。
在输入完源程序后,选择File-SaveAs…菜单项保存源程序,汇编语言源文件以*.S为扩展名,C语言源文件以*.C为扩展名。
3.工程中文件的加入
创建完源文件后便可以在工程里加入此源文件,μVision提供了多种方法加入源文件到工程中。
例如,在ProjectWorkspace–Files菜单项中选择文件组,右击将会弹出如图1.5所示快捷菜单,单击选项AddFilestoGroup…打开一个标准文件对话框,将已创建好的源文件加入到工程中。
图1.5加入源文件到工程中
4.编译、链接工程
1)设置目标硬件的工具选项
µVision可以设置目标硬件的选项。
通过工具栏按钮或Project-OptionsforTarget菜单项打开OptionsforTarget对话框,在Target页中设置目标硬件及所选CPU片上组件的参数。
图1.6设置目标硬件
下表描述了Target对话框的选项:
对话框项
描述
Xtal
设备的晶振(XTAL)频率。
大多数基于ARM的微控制器都使用片上PLL产生CPU时钟。
所以,一般情况下CPU的时钟与XTAL的频率是不同的。
Read/OnlyMemoryArea
配置片内、片外的ROM区地址以及大小
Read/WriteMemoryAreas
指定目标硬件的片内和片外的RAM区地址以及大小
CodeGeneration
选择产生ARMcode还是Thumbcode
2)、增加连接控制文件
对于GNU和ARMADS/RealView工具链来说,链接器的配置是通过链接器控制文件实现的。
这个文件指定了ARM目标硬件的存储配置。
预配置的链接器控制文件在文件夹..\ARM\GNU或..\ARM\ADS中。
为了与目标硬件相匹配,用户可能会修改链接器控制文件,所以工程中的那个文件是预配置的连接控制文件的一个副本。
这个文件可以通过Project-OptionsforTarget对话框的Linker页添加到工程中。
图1.7设置linker选项
对于复杂的memorylayout分配方式,应该采用scatterfile,对于简单的工程,直接指定R/O和R/W的基地址即可。
3)编译链接
完成工程的设置后,就可以对工程进行编译链接了。
用户可以通过选择主窗口Project菜单的Buildtarget项或工具条
按钮,编译相应的文件或工程,同时将在输出窗的Build子窗口中输出有关信息。
如果在编译链接过程中,出现任何错误,包括源文件语法错误和其它错误时,编译链接操作立刻终止,并在输出窗的Build子窗口中提示错误,如果是语法错误,用户可以通过鼠标左键双击错误提示行,来定位引起错误的源文件行。
如图1.8
图1.8编译选项
5.程序调试
源文件编译成功产生应用程序以后就可开始调试了,点击Debug->Start/Stopdebugsession(CtrlF5)即进入调试模式。
进入调试模式之后,可以选择单步、全速运行。
可以设置断点等常规的调试。
所有有关调试的操作都可以在Debug菜单下找到。
如下图所示为进入调试模式下时的界面。
常用的调试手段:
▪单步、全速运行程序。
F10单步运行,F5全速运行。
▪对于各种模式下的寄存器,可以在左边的窗口查看。
对于ARM的7种模式下的寄存器,都可以查看。
当处理器处于任何一种模式时,可以查看Current中所有的寄存器的值,处理器从一种状态改变到另外一种状态时,该模式下物理上独立的寄存器将会被用到。
▪设置断点。
选中需要设置断点的行,然后F9即在改行设置断点,程序运行到此处就停止运行。
▪查看变量的实时值。
对于local的变量,打开View->Watch&CallStackWindow,在此Window中,选择Localstab就可以查看所有的local变量。
对于全局变量,选择Watchwindow中的Watch#1,加入你需要查看的变量就可以查看实时的全局变量的值。
▪外设模块仿真。
因为我们选择的是Simulator,所以可以通过RealViewMDK强大的仿真功能来调试程序。
打开Peripheral->GPIO可以看到每一个GPIOpin的实时状态信息。
全速运行程序后,GPIO的状态就开始按照程序的控制开始变化。
图1.9simulator调试
实验一汇编指令实验
一、实验目的
1、熟悉使用realviewMDKIDE开发环境及ARM软件模拟器;
2、通过实验掌握简单ARM汇编指令的使用方法。
二、实验设备
1、硬件:
PC机
2、软件:
realviewMDK集成开发环境,Windows98/2000/NT/XP。
三、实验内容
1、熟悉开发环境的使用并使用LDR/STR,MOV等指令访问寄存器或存储单元。
2、使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。
四、实验步骤
1.实验A
1)新建工程
首先在\Keil\ARM\Examples\目录下建立文件夹命名为Asm1_a,运行μVision3IDE集成开发环境,选择菜单项Project–New…–μVisionProject,系统弹出一个对话框,输入相关内容。
点击“保存”按钮,将创建一个新工程asm_1a.Uv2。
2)为工程选择CPU
新建工程后,要为工程选择CPU,在此选择SAMSUNG的S3C44B0X。
然后会弹出一个对话框,问是否要添加启动代码。
由于本实验是简单的汇编实验,因此不需要启动代码,选择否。
3)建立源文件
点击菜单项File-New,系统弹出一个新的文本编辑窗,按照实验参考程序编辑输入源文件代码。
编辑完后,保存文件asm1_a.s。
4)添加源文件
单击工程管理窗口中的相应右键菜单命令,选择AddFilesto…,会弹出文件选择对话框,在工程目录下选择刚才建立的源文件asm1_a.s。
5)工程配置
选择菜单项Project->OptionforTarget…,将弹出工程设置对话框,如图
(1)所示。
Target选项页的配置如图
(1),Linker选项页的配置如图2,Debug选项页的配置如图3。
需要注意,在Debug选项页内需要一个初始化文件:
DebugINRam.ini。
此.INI文件用于设置生成的.AXF文件下载到目标中的位置,以及调试前的寄存器、内存的初始化等配置操作。
它是由调试函数及调试命令组成调试命令脚本文件。
图1基本配置—Targe
图2基本配置—Linker
图3基本配置—Debug
6)生成目标代码
选择菜单项Project-Buildtarget或快捷键F7,生成目标代码。
在此过程中,若有错误,则进行修改,直至无错误。
若无错误,则可进行下一步的调试。
7)调试
选择菜单项Debug-Start/StopDebugSession或快捷键Ctrl+F5,即可进入调试模式。
若没有目标硬件,可以用μVision3IDE中的软件仿真器。
做如下调试工作:
打开memory窗口,单步执行,观察地址0x8000~0x801f的内容与地址0xff0~0xfff的内容;
单步执行,观察寄存器的变化;
结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM指令的使用;
理解和掌握实验后,完成实验练习题。
2、实验B
实验B与上述步骤完全相同,只要把对应的asm1_a.s文件改成asm1_b.s以及工程名即可。
五、实验参考程序
实验A汇编程序
;asm1_a.s
xEQU45;x=45
yEQU64;y=64/
stack_topEQU0x30200000;definethetopaddressforstacksexportReset_Handler
AREAtext,CODE,READONLY
exportReset_Handler;codestart
ldrsp,=stack_top
movr0,#x;putxvalueintoR0
strr0,[sp];savethevalueofR0intostacks
movr0,#y;putyvalueintoR0
ldrr1,[sp];readthedatafromstack,andputitintor1
addr0,r0,r1;R0=R0+R1
strr0,[sp]
stop
bstop;endthecode£¬cycling
end
调试命令脚本DebugINRam.ini:
/***<<disalbe!
WizardinContextMenu>>>***/
/*Name:
DebugINRam.ini*/
FUNCvoidSetup(void)
{
//ProgramEntryPoint,.AXFFiledownloadAddress
PC=0x030000000;
}
map0x00000000,0x00200000readwriteexec
map0x30000000,0x34000000readwriteexec
Setup();//SetupforRunning
//g,main
实验B汇编程序
;asm1_b.s
xEQU45;/*x=45*/
yEQU64;/*y=64*/
zEQU87;/*z=87*/
stack_topEQU0x30200000;/*definethetopaddressforstacks*/
exportReset_Handler
AREAtext,CODE,READONLY
Reset_Handler;/*codestart*/
movr0,#x;/*putxvalueintoR0*/
movr0,r0,lsl#8;/*R0=R0<<8*/
movr1,#y;/*putyvalueintoR1*/
addr2,r0,r1,lsr#1;/*R2=(R1>>1)+R0*/
ldrsp,=stack_top
strr2,[sp]
movr0,#z;/*putzvalueintoR0*/
andr0,r0,#0xFF;/*getlow8bitfromR0*/
movr1,#y;/*putyvalueintoR1*/
addr2,r0,r1,lsr#1;/*R2=(R1>>1)+R0*/
ldrr0,[sp];/*putyvalueintoR1*/
movr1,#0x01
orrr0,r0,r1
movr1,R2;/*putyvalueintoR1*/
addr2,r0,r1,lsr#1;/*R2=(R1>>1)+R0*/
stop
bstop;/*endthecode£¬cycling*/
END
调试命令脚本文件与实验A相同。
六、练习题
1.编写程序循环对R4~R11进行累加8次赋值,R4~R11起始值为1~8,每次加操作后把R4~R11的内容放入SP栈中,SP初始设置为0x800。
最后把R4~R11用LDMFD指令清空赋值为0。
2.更改实验A中X、Y的值,观察执行结果。
实验二I/O接口实验
一、实验目的
1、掌握S3C44B0X芯片的I/O口控制寄存器的配置。
2、通过实验掌握ARM芯片使用I/O口控制LED显示。
3、了解ARM芯片中复用I/O口的使用方法。
二、实验设备
1、硬件:
EmbestEduKit-III实验平台,,ULINKUSB-JTAG仿真器套件,PC机。
2、软件:
μVisionIDEforARM集成开发环境,Windows98/2000/NT/XP。
三、实验内容
编写程序,控制实验平台的发光二极管LED1206和LED1207,使它们有规律地点亮和熄灭:
LED1206亮->LED1206关闭->LED1207亮->LED1206和LED1207全亮->LED1207关闭->LED1206关闭
四、实验原理
S3C44B0X芯片上共有71个多功能的输入输出管脚,它们分为7组I/O端口,每组端口都可以通过软件配置寄存器来满足不同系统和设计的需要。
在运行主程序之前,必须先对每一个用到的管脚的功能进行设置,如果某些管脚的复用功能没有使用,可以先将该管脚设置为I/O口。
该EmbestEduKit-III实验板上端口B的管脚PB9和PB10被设置为输出口,并且分别和LED1206、LED1207连接,参照电路设计。
如图,发光二极管LED1和LED2的正极与芯片