嵌入式系统体系结构实验指导书.docx
- 文档编号:27033346
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:49
- 大小:1.33MB
嵌入式系统体系结构实验指导书.docx
《嵌入式系统体系结构实验指导书.docx》由会员分享,可在线阅读,更多相关《嵌入式系统体系结构实验指导书.docx(49页珍藏版)》请在冰豆网上搜索。
嵌入式系统体系结构实验指导书
嵌入式系统体系结构
实验指导书
华东交通大学信息工程学院计算机系
目录
实验一ARMASD集成开发环境练习3
实验二ARM汇编指令实验18
实验三ARM汇编语言程序设计实验
(一)21
实验四ARM汇编语言程序设计实验
(二)23
实验五ARM汇编与C语言混合程序设计实验27
实验六ARM的串行口实验31
实验七键盘及LED驱动实验34
实验八LCD与触摸屏程序设计37
实验一ARMASD集成开发环境练习
一、实验目的
熟悉ARMASD1.2开发环境,并学会ADS1.2环境下工程的仿真、调试及配置方法。
使用ASD编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
二、实验内容
本次实验使用ARMASD1.2集成开发环境。
新建一个基于简单的工程文件,并编译这个工程文件。
学习ADS1.2环境下工程的仿真、调试及配置方法。
学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。
三、预备知识
C语言的基础知识、程序调试的基础知识和方法。
四、实验设备及工具(包括软件调试工具)
硬件:
PC机Pentium100以上。
软件:
PC机Windows操作系统、ARMASD1.2集成开发环境、AXD
五、实验步骤
(一)ASD1.2集成开发环境的使用
1.新建工程
现在可以通过“开始”—“程序”—“ARMDeveloperSuitev1.2”—“CodeWarriorforARMDeveloperSuite”来打开开发软件了,如图1-14所示。
图1-14
启动MetrowerksCodeWarriorforARMDeveloperSuitev1.2后界面如图1-15所示。
图1-15
在CodeWarrior中新建一个工程的方法有两种,可以在工具栏中单击“New”按钮,如图1-16所示。
也可以在“File”菜单中选择“New。
。
。
”菜单,如图1-17所示。
图1-16
图1-17
这样打开一个如图1-18所示的窗口。
该窗口有Project、File和Objict三个选项卡,现在我们新建工程,故选Project选项卡。
这个对话框中为用户提供了7种可选择的工程类型。
此7种工程类型已经在图中标出,大家熟悉一下。
这里我们选择第一种ARMExecutableImage工程类型,在“Projectname:
”下输入工程名,如test,点击“Location:
”文本框的“Set..”按钮,浏览选择想要将该工程保存的路径。
如存放在E盘的armtest文件夹中,进入E盘后按照图1-19,图1-20的步骤完成。
图1-18
图1-19
图1-20
改完名后,双击armtest文件夹再点击“保存”按钮,就会出现图1-21所示界面,此时点击“确定”按钮即可建立一个新的名为test的工程,这时会出现test.mcp的窗口,如图1-22所示。
图1-21
图1-22
此时点击“最大化”按钮可以将test.mcp窗口扩大,如图1-23所示。
图1-23
2.设置目标及其参数
开发环境要经过设置才能与试验箱配套使用。
在工具栏中有一个用于选择目标的下拉列表框,如图1-24圈中所示。
新建工程的默认目标是DebugRel,另外还有两个可选择的目标,分别是Debug和Release,他们的含义如下:
DebugRel:
生成目标时,为每一个源文件生成调试信息;
Release:
生成目标时,不生成调试信息;
Debug:
生成目标时,为每一个源文件生成最完全的调试信息。
图1-24
这里选择Debug,接下来对Debug目标进行参数设置。
单击工具栏上的设置按钮
或使用Edit—DebugSettings菜单命令打开设置对话框,如图1-25所示,设置框如图1-26所示。
图1-25
图1-26
在DebugSetting对话框中需要设置的内容比较多。
设置方法是首先在左侧的树形目录中选中需要设置的对象,然后在右侧面板中进行相应的设置。
下面对经常使用的设置选项进行介绍。
(1)目标设置(TargetSetting)
在树形目录中选中Target—TargetSetting项,在右侧面版的Post-linker下拉表框中选择ARMfromElF,使得工程连接后通过fromElF产生二进制代码,使其可以烧写到ROM中。
方法如图1-27所示。
图1-27
(2)语言设置(LanguageSettings)
开发语言有汇编、C、C++及其混合语言等。
我们在开发前要对其设置,这里主要是对其硬件(架构或处理器)的支持设置,如我们实验是在采用S3C2410处理器的试验箱中开发的,所以在右侧面板ArchitectureorProcesser(架构或处理器)下拉列表框中选择ARM920T。
具体设置方法是先选中树形目录中LanguageSettings下的开发语言,然后在本语言对应的右侧面板的ArchitectureorProcesser下拉列表框中选择ARM920T,其他选项保持默认。
注意,在开发中用到的语言都要进行这样设置。
汇编语言的设置过程如图1-28所示,其他语言设置方法与此一样。
图1-28
(3)链接器设置(Linker)
在左侧的树形目录中选中Linker—ARMLinker,出现链接器的设置对话框,如图1-29所示。
此处设置很重要,详细介绍一下各个选项卡的设置方法。
1)Output选项卡:
如图1-29所示。
其中Linktype选项中为链接器提供3种链接类型:
Partial:
表示链接器只进行部分链接,链接后的目标文件可以作为以后
进一步链接的输入文件;
Simple:
表示链接器将生成简单的ELF格式的映像文件,地址映射关系
在Simpleimage选项区域中设置;
Scattered:
表示链接器将生成复杂的ELF格式的映像文件,地址映射关系在Scatter格式的文件中指定。
这里我们选择常用的Simple类型,选择Simple后,在其右侧Simple
image选项区域中包含ROBase和RWBase两个文本框。
ROBase:
用来设置程序代码存放的起始地址。
RWBase:
用来设置程序数据存放的起始地址。
这两项的地址均由硬件决定,并应该在SDRAM的地址范围内。
本实验箱使用的是64MSDRAM,其地址范围是0x30000000—0x33FFFFFF,故采用首地址作为程序代码的存放的首地址,即在ROBase文本框中输入0x30000000,RWBase文本框用户自定义,只要保证在SDRAM地址空间内,并且是字对齐即可,这里我们可以输入0x31000000。
此处的设置也就是说在地址为0x30000000--0x31000000之间是只读区域,用来存放程序代码,从0x31000000开始用来存放程序数据。
图1-29
2)Option选项卡:
如图1-30所示。
本选项卡只对Imageentrypoint进行设置,该项是程序代码的入口地址。
如果程序在SDERAM中运行,针对本试验箱可选择的地址范围0x30000000--0x31000000。
通常程序代码的入口地址与ROBase中程序代码的首地址相同,这里为0x30000000。
其他默认即可。
图1-30
3)Layout选项卡:
如图1-31所示。
该选项卡在链接方式为Simple时有效,他用来安排一些输入段在映像文件中的位置。
即在Placeatbeginningofimage区域中Object/Symbol文本框中填写启动程序的目标文件名init.o和Section文本框中填写程序入口起始段的标号Init。
其作用是通知编译器,整个项目从该段开始执行。
图1-31
如果希望将编译后生成的二进制文件放到指定文件夹,可以在左侧的树形目录中选中Linker—ARMfrpmELF进行设置,如图1-32所示。
此框如为空,将默认在工程目录下生成二进制文件。
该二进制文件可用于以后下载到Flash(试验箱等硬件)中执行。
图1-32
至此,对DebugSettings的设置基本完成,单击Apply--OK按钮,保存设置。
为了避免以后每次新建工程再这样设置,我们可以将该新建的空工程作为模板保存起来。
方法是:
在ADS1.2的安装目录的Stationary文件夹下新建一个适合模板的目录名,如S3C2410ARMExecutableImage;然后将刚设置好的工程文件以一个适合的名字如S3C2410ARM.mcp另存到该模板目录中即可。
以后使用File--New。
。
。
菜单命令新建工程时就可以在弹出的New对话框中看到S3C2410ARMExecutableImage工程模板,如图1-33所示。
选用该模板创建工程就可以免去设置过程,直接向工程中添加文件、进行编码就可以了。
图1-32
3.向工程中添加源文件
工程创建、设置好以后就会出现test.mcp的窗口,该窗口包含File、LinkOrder和Targets三个选项卡,如图1-33所示。
默认情况下显示的是File选项卡,此时可以通过执行Project—AddFile..菜单命令把与工程有关的所有源文件加入到该工程,如图1-34。
或者通过鼠标右击空白处弹出的快捷菜单AddFile..来完成,如图1-25所示。
图1-33
图1-34
图1-35
对于本次试验,没有源文件可用,首先需要新建源文件。
这里以新建文件类型为C语言文件,文件名为led.c为例向大家说明一下过程。
选择File--New。
。
。
菜单命令,如图1-36所示。
在弹出的窗口中选择File选项卡;在Filename文本框中输入新建文件的文件名led.c,注意:
文件名后缀与要使用的开发语言种类有关,如用C语言开发时文件名后缀为.c,汇编语言开发时文件名后缀为.s;在Location文本框中输入文件的保存位置E:
\armtes\test;选中AddtoProject复选框;在Project下拉列表框中选择将文件添加到的工程test。
mcp;在Targets复选框中选中文件要添加的目标Debug,过程如图1-37所示。
单击确定即可将新建的文件添加到工程中,文件添加到工程后的窗口如图1-38所示。
接下来只需在新建文件中进行编码、保存即可,如图1-39所示。
注意:
此时MetrowerksCodeWarriorforARMDeveloperSuitev1.2窗口中包含工程和文件两个窗口,如图1-40所示。
我们需要点击相应的最小化或向下还原按钮来进行切换。
如图1-38和图1-39中圈中所示。
图1-36
图1-37
图1-38
图1-39
图1-40
工程创建好以后,接下来就是对其进行编译和链接。
选择MetrowerksCodeWarriorforARMDeveloperSuitev1.2窗口的“Project”—“Make”菜单命令或点击按钮
来完成编译和链接。
如果有错误或警告,窗口如图1-41所示,用户可根据提示更改程序。
图1-41
如果没有语法错误,将在工程所在目录下生成一个名为“工程名_data”的文件夹。
如本例的工程名为test.mcp,生成的文件夹名为test_data。
在该文件夹下,针对不同类型的目标将生成多个文件夹。
本例中由于使用的是Debug目标,因此生成的最终文件都在Debug文件夹下。
进入Debug文件夹会看到编译、链接后生成的映像文件(xxx.axf)和二进制文件(xxx.bin)。
映像文件用于调试,二进制文件用于烧写到Flash中运行。
(二)、ADS1.2环境下工程的仿真、调试及配置方法
通过“开始菜单”—“ARMDeveloperSuitev1.2”—“AXDDebugger”来打开调试软件,如图1-42所示。
图1-42
如果程序代码没有错误或警告,也可以点击MetrowerksCodeWarriorforARMDeveloperSuitev1.2窗口的Project—Debug菜单命令或点击
按钮或点击工程窗口的
按钮来直接调出AXD调试窗口,方法如图1-43和图1-44所示。
图1-43
图1-44
AXD调试窗口如图1-45所示。
图1-45
第一次使用需要对AXD进行配置,具体方法如下:
初次运行AXD,左侧的目标平台为ARM7TDMI。
试验箱采用的CPU为ARM920,所以需要配置AXD使之匹配。
方法为点击AXD窗口的Options—ConfigureTarget菜单命令,如图1-46。
图1-46
ConfigureTarget窗口如图1-47所示。
在图1-47中,Target栏代表不同的目标CPU。
“ADP”和“ARMUL”是缺省的设置。
选择ARMUL,表示使用软件仿真,此时PC机可以不连接任何目标板,ARM系统中CPU的行为完全由软件模拟。
我们使用软件仿真,故选择ARMUL。
图1-47
要设置CPU类型需双击ARMUL,然后在出现的设置对话框中点Processor区域中的Variant下拉菜单,找到ARM920T并选中,然后点击Ok--Ok即可。
设置过程如图1-48所示。
图1-48
设置好的AXD界面左侧就会显示ARM920T了。
现在可以向AXD调试软件中添加工程的映像文件了。
方法为点击AXD窗口的File—LoadImage菜单命令选择要加载的映像文件(后缀为.axf),如图1-49所示。
图1-49
加载完映像文件就可以对程序代码进行调试了。
下面介绍一下AXD界面的一些常用的工具和窗口。
AXD界面如图1-50所示。
图1-50
实验二ARM汇编指令实验
一、实验目的
1.掌握ARM数据处理指令的用法
2.了解ARM汇编指令灵活的第二操作数,编写简单的汇编程序
二、实验内容
1.用MOV和MVN指令访问ARM通用寄存器
2.使用ADD、SUB、AND、ORR、CMP和TST指令完成数据的加减运算及逻辑运算。
3.用ADS1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegister)监视运算值,打开存储器观察窗口(Memory)监视0x40003100地址处的值。
三、预备知识
1、用ARMADS集成开发环境,编写和调试程序的基本过程。
2、ARM指令的使用
四、实验设备及工具(包括软件调试工具)
硬件:
PC机Pentium100以上。
软件:
PC机Windows操作系统、ARMASD1.2集成开发环境、AXD
五、实验步骤
1.启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程。
如SY2
2.建立汇编源文件Test2.s,然后加入工程中。
3.编译、连接工程,选择ProjectDebug,启动AXD软件仿真调试。
4.打开寄存器窗口,监视寄存器的值。
5.可以单步运行程序,可以设置、取消断点,或者全速运行,停止运行,调试时观察寄存器的值,运行结果见图2-1。
图2-1ARM实验2的运行结果
六、实验参考程序
XEQU11
YEQU8
BIT23EQU(1<<23);BIT23=0X00800000
AREAtest2,CODE,READONLY
ENTRY
CODE32
START
;MOV,ADD,R8=R3=X+Y
MOVR0,#X
MOVR1,#Y
ADDR3,R0,R1
MOVR8,R3
;MVN,SUB,R5=0X5FFFFFF8-R8*8
MVNR0,#0XA0000007
SUBR5,R0,R8,LSL#3
;CMP,5*Y/2>2*X?
R5=R5&0XFFFF0000,R5=R5|0X000000FF
MOVR0,#Y
ADDR0,R0,R0,LSL#2
MOVR0,R0,LSR#1
MOVR1,#X
MOVR1,R1,LSL#1
CMPR0,R1
LDRHIR2,=0xFFFF0000
ANDHIR5,R5,R2
ORRLSR5,R5,#0x000000FF
;TST,BIC:
BIT23=1?
BIT6=0:
1
TSTR5,#BIT23
BICNER5,R5,#0x00000040
BSTART
END
实验三ARM汇编语言程序设计实验
(一)
一、实验目的
1.掌握ADS1.2集成开发环境
2.了解ARM汇编指令用法,并能够编写简单的汇编程序
3.掌握指令的条件执行,掌握LDR/STR指令,完成存储器的访问
二、实验内容
1.用LDR指令读取0x40003100地址上的数据,将该数据加1,若结果大于10,则使用STR指令将结果写入原地址,否则,将把0写入原地址。
2.用ADS1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegister)监视R0、R1的值,打开存储器观察窗口(Memory)监视0x40003100地址处的值。
三、预备知识
1、用ARMADS集成开发环境,编写和调试程序的基本过程。
2、ARM指令的使用
四、实验设备及工具(包括软件调试工具)
硬件:
PC机Pentium100以上。
软件:
PC机Windows操作系统、ARMASD1.2集成开发环境、AXD
五、实验步骤
1.启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程。
如SY3
2.建立汇编源文件Test3.s,加入工程中。
3.设置工程连接地址R0Base0x40000000,RWBase0x40003000。
4.编译、连接工程,选择ProjectDebug,启动AXD软件仿真调试。
5.打开寄存器窗口,监视R0、R1的值,设置观察地址0x40003100,显示方式为32bit,监测0x40003100上的值。
6.可以单步运行程序,可以设置、取消断点,或者全速运行,停止运行,调试时观察寄存器0x40003100上的值,运行结果见图3-1。
图3-1ARM实验3的运行结果
六、实验参考程序
COUNTEQU0X40003100
AREATEST3,CODE,READONLY
ENTRY
CODE32
START
LDRR1,=COUNT
MOVR0,#0
STRR0,[R1]
LOOP
LDRR1,=COUNT
LDRR0,[R1]
ADDR0,R0,#1
CMPR0,#10
MOVHSR0,#0
STRR0,[R1]
BLOOP
END
实验四ARM汇编语言程序设计实验
(二)
一、实验目的
1.掌握ADS1.2集成开发环境
2.掌握如何使用ARM的MRS/MSR指令实现工作模式切换
二、实验内容
1.使用ARM的MRS/MSR指令实现工作模式切换,并初始化堆栈指针
2.观察ARM控制器在工作模式下的寄存器的区别。
三、预备知识
1、用ARMADS集成开发环境,编写和调试程序的基本过程。
2、ARM指令的使用
四、实验设备及工具(包括软件调试工具)
硬件:
PC机Pentium100以上。
软件:
PC机Windows操作系统、ARMASD1.2集成开发环境、AXD
五、实验步骤
1.启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程。
如SY4
2.建立汇编源文件Test4.s,然后加入工程中。
3.设置工程连接地址R0Base0x40000000,RWBase0x40003000。
设置调试入口地址ImageEntrypoint为0x40000000。
4.编译、连接工程,选择ProjectDebug,启动AXD软件仿真调试。
5.打开寄存器窗口,监视寄存器的值,选择current项监视各个寄存器上的值。
6.可以单步运行程序,可以设置、取消断点,或者全速运行,停止运行,调试时观察寄存器CPSR、SPSR、R13、R14和R15的值,运行观察见图4-1。
图4-1ARM实验4的运行观察结果
注意:
CPSR寄存器的显示方式如图4-1所示,显示分两个部分,一是各个运算标志位,二是工作模式显示。
(1)运算标志位NZCV:
显示为大写字母,表示结果为1,否则为0。
(2)中断标志位IF:
I为IRQ中断禁止位,F为FIQ中断禁止位。
(3)工作模式位:
包括User、Fiq、Irq、SVC、Abort、Undef和SYS。
六、实验参考程序
;thestacklengthisbeingdefined
USR_STACK_LENGTHEQU64
SVC_STACK_LENGTHEQU0
FIQ_STACK_LENGTHEQU16
IRQ_STACK_LENGTHEQU64
ABT_STACK_LENGTHEQU0
UND_STACK_LENGTHEQU0
AREAMODE1,CODE,READONLY
ENTRY
CODE32
STARTMOVR0,#0
MOVR1,#1
MOVR2,#2
MOVR3,#3
MOVR4,#4
MOVR5,#5
MOVR6,#6
MOVR7,#7
MOVR8,#8
MOVR9,#9
MOVR10,#10
MOVR11,#11
MOVR12,#12
BLinit_stack;initstackpointerineverymode
;enabletheIRQ
MRSR0,CPSR;R0<--CPSR
BICR0,R0,#0X80
MSRCPSR_cxsf,R0;CPSR<--R0
;switchtousrmode
MSRCPSR_c,#0xd0
MRSR0,CPSR
;swicthtosvcmode
MSRCPSR_c,#0xdf
MRSR0,CPSR
HALTBHALT
;INITSTACK
init_stack
MOVR0,LR
;Setupthesvcstack
MSRCPSR_c,#0xd3
LDRSP,StackSvc
;SetuptheIrqstack
MSRCPSR_c,#0xd2
LDRSP,StackIrq
;SetuptheFiqstack
MSRCPSR_c,#0xd1
LDRSP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 体系结构 实验 指导书