arm2410实验手册经典教程.docx
《arm2410实验手册经典教程.docx》由会员分享,可在线阅读,更多相关《arm2410实验手册经典教程.docx(39页珍藏版)》请在冰豆网上搜索。
arm2410实验手册经典教程
实验目录
实验一、熟悉realview开发环境2
1.1RealViewMDK软件开发环境简介2
1.1.1RealViewMDK的突出特性2
1.1.2产品模块介绍2
1.2RealView使用5
1.2.1创建一个工程5
1.2.1.1选择工具集5
1.2.1.2创建工程文件7
1.2.1.3选择设备7
1.2.2编译、链接工程8
1.2.2.1设置目标硬件的工具选项8
1.2.2.2增加连接控制文件9
1.2.2.3编译链接9
1.2.3程序调试10
1.2.4工程选项页概述11
实验二、ARM指令集12
2.1ARM汇编指令112
2.2ARM汇编指令220
2.3ARM汇编指令321
实验三23
3.1LDR/STM指令寻址实验23
3.2ARM汇编子函数调用25
3.3Thumb汇编指令练习25
3.4利用ARM汇编实现开发板LED灯控制25
实验四26
4.1简单C语言程序实验26
4.2汇编与C语言的相互调用实验26
4.3C语言中内联汇编程序实验27
4.4C语言中嵌入型汇编程序实验27
4.5SWI软中断实验28
4.6综合编程实验28
实验五、I/O及串口通信编程实验29
实验六、中断实验32
实验七、实时时钟实验32
实验八、看门狗控制实验33
实验九、PWM接口实验33
实验十、A/D转换实验33
实验十一、I2C串行通信实验34
实验一、熟悉realview开发环境
1.1RealViewMDK软件开发环境简介
RealViewMDK全称RealViewMDK中国版开发套件,源自德国Keil公司,被全球超过10万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的对各种嵌入式处理器的软件开发工具。
RealViewMDK集成了业内最领先的技术,包括µVision3集成开发环境与RealView编译器,支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20%。
1.1.1RealViewMDK的突出特性
菜鸟的阿拉伯飞毯—启动代码生成向导,自动引导,一日千里
高手的无剑胜有剑—软件模拟器,完全脱离硬件的软件开发过程
专家的哈雷望远镜—性能分析器,看得更远、看得更细、看得更清
未来战士的激光剑—Cortex-M3支持
业界最优秀的编译器—RealView编译器,代码更小,性能更高配备ULINK2仿真器—无需安装驱动
Flash编程模块—轻松实现Flash烧写
绝对的高性价比—国际品质,本土价格
1.1.2产品模块介绍
µVision3IDE
启动代码生成向导
设备模拟器
性能分析器
RealView编译器
MircoLib
RL-ARM(可选)
ULINK2仿真器
صVision3IDE
µVisionIDE在全球拥有庞大的用户群,超过10万开发工程师在使用Keil开发工具。
不管以前是用8位、16位MCU,还是现在改用ARM32位处理器,µVisionIDE简单易用,能让您立马上手。
图1.1µVision3IDE
صVision3IDE主要特性:
●功能强大的源代码编辑器;
●可根据开发工具配置的设备数据库;
●用于创建和维护工程的工程管理器;
●集汇编、编译和链接过程于一体的编译工具;
●用于设置开发工具配置的对话框;
●真正集成高速CPU及片上外设模拟器的源码级调试器;
●高级GDI接口,可用于目标硬件的软件调试和ULINK2仿真器的连接;
●用于下载应用程序到FlashROM中的Flash编程器;
●完善的开发工具手册、设备数据手册和用户向导。
Ø启动代码配置向导
µVision3IDE的启动代码配置向导将各个所需配置的功能模块以对话框方式展示,附加的提示说明,帮助你快速轻松的做出选择,生成完善的启动代码,免除手工写几百行汇编程序的痛苦。
图1.2配置启动代码
صVision3设备模拟器
µVision3设备模拟器的功能强大,能模拟整个MCU的行为。
使你在没有硬件或对目标MCU没有更深的了解的情况下,仍然可以立即开始开发软件。
高效指令集仿真
中断仿真片内外围设备仿真
ADC,DAC,EBI,Timers
UART,CAN,I2C…
外部信号和I/O仿真
图1.3设备模拟器
Ø性能分析器
性能分析器可给所有的MCU实现如程序运行时间统计、被调用次数统计、代码覆盖率统计等高端功能,而这些功能对于快速定位死区代码,帮助优化分析等起了关键的作用。
图1.4性能分析器
ØRealView编译器(RVCT)
RealViewMDK集成的RealView编译器(跟RVDS使用一样的编译器),是业界最优秀的编译器,它能使代码容量更小、执行效率更高;使应用程序运行更快、系统成本更低。
ØMicroLib
为进一步改进基于ARM处理器的应用代码密度,RealViewMDK采用了新型microlibC库(用于C的ISO标准运行时库的一个子集),并将其代码镜像降低最小以满足微控制器应用的需求。
MicrolibC库可将运行时库代码大大降低。
ØRealView实时库RL-ARM(可选)
ØULINK2仿真器
1.2RealView使用
1.2.1创建一个工程
µVision是一个标准的窗口应用程序,可以点击程序按钮开始运行。
为了创建一个新的µVision工程必须作如下处理:
∙选择工具集
∙创建工程文件
∙选择设备
1.2.1.1选择工具集
µVision可以使用ARMRealView编译工具、ARMADS编译器、GNUGCC编译器和KeilCARM编译器。
当使用GNUGCC编译器或ARMADS编译器时必须另外安装它们编译集。
实际使用的工具集可以在µVisionIDE的Project–Manage-Components,Environment,andBooks对话框的Folders/Extensions页(见下图)中选择。
图1.5选择工具集
∙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的安装路径。
GNU-Tool-Prefix文本框指定不同的GNU工具链。
下面是各种GNU版本的例子:
a)带uclib的GNUV3.22:
GNU-Tool-Prefix:
arm-uclibc-CygnusFolder:
C:
\Cygnus
b)带标准库的GNUARMV4:
GNU-Tool-Prefix:
arm-elf-CygnusFolder:
C:
\ProgramFiles\GNUARM\
∙Keil根目录的设置是基于µVision/ARM开发工具的安装目录的。
对于KeilARM工
具来说,工具组件的路径是在开发工具目录中配置的。
1.2.1.2创建工程文件
单击Project->New...->µVisionProject菜单项,µVision3将打开一个标准对话框,输入希望新建工程的名字即可创建一个新的工程,建议对每个新建工程使用独立的文件夹。
例如,这里先建立一个新的文件夹,然后选择这个文件夹作为新建工程的目录,输入新建工程的名字Project1,µVision将会创建一个以Project1.UV2为名字的新工程文件,它包含了一个缺省的目标(target)和文件组名。
这些内容在ProjectWorkspace->Files中可以看到。
1.2.1.3选择设备
在创建一个新的工程时,µVision要求为这个工程选择一款CPU。
选择设备对话框显示了µVision的设备数据库,只需要选择用户所需的微控制器即可。
例如,选择PhilipsLPC2106微控制器,这个选择设置了LPC2106设备的必要工具选项、简化了工具的配置。
图1.6选择设备
注意:
∙当创建一个新的工程时,µVision会自动为所选择的CPU添加合适的启动代码。
∙对于一些设备而言,µVision需要用户手动地输入额外的参数。
请仔细阅读这个对话框右边的信息,因为它可能包含所选设备的额外配置要求。
创建源文件以后,就可以将这个文件添加到工程中。
µVision提供了几种方法将源文件添加到工程中。
例如,在ProjectWorkspace->Files页的文件组上点击鼠标右键,然后在弹出的菜单中选择AddFiles菜单项,这时将打开标准的文件对话框,选择我们创建的asm或c文件即完成源文件的添加。
1.2.2编译、链接工程
1.2.2.1设置目标硬件的工具选项
µVision可以设置目标硬件的选项。
通过工具栏按钮或Project-OptionsforTarget菜单项打开OptionsforTarget对话框,在Target页中设置目标硬件及所选CPU片上组件的参数。
下图是LPC2106的一些参数设置。
图1.7设置目标硬件
下表描述了Target对话框的选项:
对话框项
描述
Xtal
设备的晶振(XTAL)频率。
大多数基于ARM的微控制器都使用片上PLL产生CPU时钟。
所以,一般情况下CPU的时钟与XTAL的频率是不同的。
Read/OnlyMemoryArea
配置片内、片外的ROM区地址以及大小
Read/WriteMemoryAreas
指定目标硬件的片内和片外的RAM区地址以及大小
CodeGeneration
旋转产生ARMcode还是Thumbcode
1.2.2.2增加连接控制文件
对于GNU和ARMADS/RealView工具链来说,链接器的配置是通过链接器控制文件实现的。
这个文件指定了ARM目标硬件的存储配置。
预配置的链接器控制文件在文件夹..\ARM\GNU或..\ARM\ADS中。
为了与目标硬件相匹配,用户可能会修改链接器控制文件,所以工程中的那个文件是预配置的连接控制文件的一个副本。
这个文件可以通过Project-OptionsforTarget对话框的Linker页添加到工程中。
图1.8设置linker选项
对于复杂的memorylayout分配方式,应该采用scatterfile,对于简单的工程,直接指定R/O和R/W的基地址即可。
1.2.2.3编译链接
一般来说,在新建一个应用程序的时候Options->Target页中的所有的工具和属性都要配置。
单击BuildTarget工具栏按钮将编译所有的源文件,链接应用程序。
当编译有语法错误的应用程序时,µVision将在OutputWindow->Build窗口中显示错误和警告信息。
单击这些信息行,µVision将会定位到相应的源代码处。
图1.9编译结果
源文件编译成功产生应用程序以后就可开始调试了,点击Debug->Start/Stopdebugsession(CtrlF5)即进入调试模式。
1.2.3程序调试
进入调试模式之后,可以选择单步、全速运行。
可以设置断点等常规的调试。
所有有关调试的操作都可以在Debug菜单下找到。
如下图所示为进入调试模式下时的界面。
图1.10simulator调试
常用的调试手段:
●单步、全速运行程序
●F10单步运行,F5全速运行。
●对于各种模式下的寄存器,可以在左边的窗口查看
●对于ARM的7种模式下的寄存器,都可以查看。
当处理器处于任何一种模式时,可以查看Current中所有的寄存器的值,处理器从一种状态改变到另外一种状态时,该模式下物理上独立的寄存器将会被用到。
●设置断点
●选中需要设置断点的行,然后F9即在改行设置断点,程序运行到此处就停止运行。
●查看变量的实时值
●对于local的变量,打开View->Watch&CallStackWindow,在此Window中,选择Localstab就可以查看所有的local变量。
●对于全局变量,选择Watchwindow中的Watch#1,加入你需要查看的变量就可以查看实时的全局变量的值。
●外设模块仿真
●因为我们选择的是Simulator,所以可以通过RealViewMDK强大的仿真功能来调试程序。
打开Peripheral->GPIO可以看到每一个GPIOpin的实时状态信息。
全速运行程序后,GPIO的状态就开始按照程序的控制开始变化。
1.2.4工程选项页概述
在Project-Options对话框页可以设置所有的工具选项。
所有的选项都保存在µVision工程文件中。
在ProjectWorkspace->Files窗口点击鼠标右键,在弹出的菜单中可以设置文件夹或单个文件的不同选项,这些选项在文件和文件夹选项中解释过。
在这种情况下,可能有附加的属性页及仅与所选项相关的对话框页。
下表概述了各种选项对话框的功能。
对话框页
描述
Device
从µVision的设备数据库中选择选择设备。
Target
为应用程序指定硬件环境。
Output
定义工具链的输出文件,在编译完成后运行用户程序。
Listing
指定工具链产生的所有列表文件。
C
设置C编译器的工具选项,例如代码优化和变量分配。
Asm
设置汇编器的工具选项,如宏处理。
Linker
设置链接器的相关选项。
一般来说,链接器的设置需要配置目标系统的存储分配。
设置链接器定义存储器类型和段的位置。
Debug
µVision调试器的设置。
Utilities
配置Flash编程实用工具。
实验二、ARM指令集
2.1ARM汇编指令1
【实验内容】
建立一个汇编工程,要求完成两个变量求和,编译通过后,调试结果。
【实验目的】
初步学会使用μVision3IDEforARM开发环境及ARM软件模拟器;
通过实验掌握简单ARM汇编指令的使用方法。
【实验步骤】
1、新建工程
首先在\就业班ARM课件\ARM实验\第1天\目录下建立文件夹命名为asm-00,运行μVision3IDE集成开发环境,选择菜单项Project–New…–μVisionProject,系统弹出一个对话框,按照图2-1所示输入相关内容。
点击“保存”按钮,将创建一个新工程asm00.Uv2。
图2-1
2、为工程选择CPU
新建工程后,要为工程选择CPU,如图2.2所示,在此选择SAMSUNG的S3C2410X
图2-2
3、添加启动代码
在图2-3中点“确定”后,会弹出一个对话框,问是否要添加启动代码。
如图2.3所示。
图2-3
由于本实验是简单的汇编实验,因此不需要启动代码。
选择否。
4、选择开发工具
要为工程选择开发工具,在Project-Manage-Components,EnvironmentandBooks-Folder/Extensions对话框的Folder/Extensions页内选择开发工具,如图2-4所示。
图2-4选择开发工具
从图中可以看到,有三个开发工具可选,在此选择RealViewCompiler。
5、建立源文件
点击菜单项File-New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。
编辑完后,保存文件asm1_a.s。
6、添加源文件
单击工程管理窗口中的相应右键菜单命令,选择AddFilesto…,会弹出文件选择对话框,在工程目录下选择刚才建立的源文件asm1_a.s。
如图2-5所示。
图2-5
7、工程配置
选择菜单项Project->OptionforTarget…,将弹出工程设置对话框,如图2-6所示。
对话框会因所选开发工具的不同而不同,在此仅对Target选项页、Linker选项页及Debug选项页进行配置。
Target选项页的配置如图2-6;Linker选项页的配置如图2-7;Debug选项页的配置如图2-8。
需要注意,后面的实验中在Debug选项页内需要一个初始化文件:
DebugINRam.ini。
此.INI文件用于设置生成的.AXF文件下载到目标中的位置,以及调试前的寄存器、内存的初始化等配置操作。
它是由调试函数及调试命令组成调试命令脚本文件。
图2-6基本配置Target
图2-7基本配置Linker
图2-8基本配置Debug
8、生成目标代码
选择菜单项Project-Buildtarget或快捷键F7,生成目标代码。
在此过程中,若有错误,则进行修改,直至无错误。
若无错误,则可进行下一步的调试。
9、调试
选择菜单项Debug-Start/StopDebugSession或快捷键Ctrl+F5,即可进入调试模式。
若没有目标硬件,可以用μVision3IDE中的软件仿真器。
如果使用MDK试用版,则在进入调试模式前,会有如下对话框弹出,如图2-9所示。
图2-9在软件仿真下调试程序
确定后即可调试了,做如下调试工作:
参看“asm-00”目录下的代码。
图2.10ARM汇编练习
---编译,链接。
Optionsfortarget“Target1”中设置如下:
Targettab
Linkertab
去掉“usememorylayoutfromtargetdialog”,R/OBase填0x0,R/WBase填0x4000000。
--进入调试模式,开始调试,并注意查看寄存器的值,检查计算结果是否正确。
注意:
汇编语言的源语句行的一般格式是:
{label}{instruction|directive|pseudoinstruction}{;comment}
即使没有标号,指令、伪指令和命令前面也必须有一个空白,例如一个空格或制表符。
源语句行的所有三部分都是可选的。
可以使用空行来使代码更具可读性。
对以上代码的解释:
段和AREA命令
段是独立的、命名的、不可分割的代码或数据序列。
一个代码段是生成一个应用程序的最低要求。
汇编或编译的输出可以包括:
∙一个或多个代码段。
它们通常是只读段。
∙一个或多个数据段。
它们通常是读写段。
它们可以是零初始化的(ZI)。
链接程序依照段位置规则,将每个段放在一个程序映像中。
在源文件中相邻的段,不一定要在应用程序映像中相邻。
在源文件中,用AREA命令来标记一个段的开始。
该命令对段进行命名并设置其属性。
属性放在名称后面,之间用逗号分隔。
ENTRY命令
ENTRY命令标记要执行的第一个指令。
在包含C代码的应用程序中,在C库的初始化代码中也包含一个入口点。
初始化代码和异常处理程序也包含入口点。
END命令
此命令指示汇编程序停止处理这个源文件。
每个汇编语言源模块必须以一行单独的END命令结束。
2.2ARM汇编指令2
【实验内容】
使用add/sub/lsl/lsr/and/orr等指令,完成基本算术/逻辑运算。
【实验目的】
初步学会使用μVision3IDEforARM开发环境及ARM软件模拟器;
通过实验掌握简单ARM汇编指令的使用方法。
【实验步骤】
参看“asm-01”目录下的代码
按照实验一的方法,新建一个project,名字为asm01;添加asm01.s文件到项目中。
帮助:
LDR指令:
LDR指令用于从内存中将一个32位的字读取到目标寄存器。
LDR指令根据所确定的地址模式将一个32位字读取到指令中的目标寄存器。
如果指令中的寻址方式确定的地址不是字对齐的,则读出的数值要进行循环右移。
所移位数为寻址方式确定的地址bits[1∶0]8的倍,也就是说处理器将取到的数值作为字的最低位处理。
如果设置了L位,则进行装载,否则进行存储。
如果设置了P位,则使用预先变址寻址,否则使用过后变址寻址。
如果设置了U位,则给出的偏移量被加到基址寄存器上,否则从中减去偏移量。
如果设置了B位,传送内存的一个字节,否则传送一个字。
这在助记符末尾添加后缀“B”,如MOVr7,r5变为MOVBr7,r5。
W位的解释依赖于使用的地址模式。
●对于预先变址寻址,设置W位强制把它用做地址转换的最终地址写回基址寄存器中(例如,传送的副作用是Rn:
=Rn+/-offset。
这在汇编器中表示为给指令加上后缀“!
”。
)。
●对于过后变址寻址,地址总是写回,设置W位指示在进行传送之前强制地址转换。
这在汇编器中表示为给指令加上后缀“T”。
●当PC作为LDR的目的寄存器时,从存储器取得的数据将被当作目标地址值,程序将跳转到目标地址开始执行。
指令的语法格式
LDR{},
它确定了指令编码中的I、P、U、W、Rn和位。
所有的寻址模式中,都会确定一个基址寄存器Rn。
指令举例
LDRr1,[r0,#0x12];将r0+12地址处的数据读出,保存到r1中(r0的值不变)
LDRr1,[r0];将r0地址处的数据读出,保存到r1中(零偏移)
LDRr1,[r0,r2];将r0+r2地址的数据读出,保存到r1中(r0的值不变)
LDRr1,[r0,r2,LSL#2];将r0+r2×4地址处的数据读出,保存到r1中(r0,r2的值不变)
LDRRd,label;label为程序标号,label必须是当前指令的±4KB范围内
LDRRd,[Rn],#0x04;Rn的值用作传输数据的存储地址。
在数据传送后,将偏移量0x04与
Rn相加,结果写回到Rn中。
Rn不允许是r15
STR指令:
STR指令用于将一个32位的字数据写入到指令中指定的内存单元。
指令的