嵌入式ADS实验指导书.docx
- 文档编号:7917753
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:41
- 大小:1.35MB
嵌入式ADS实验指导书.docx
《嵌入式ADS实验指导书.docx》由会员分享,可在线阅读,更多相关《嵌入式ADS实验指导书.docx(41页珍藏版)》请在冰豆网上搜索。
嵌入式ADS实验指导书
实验一嵌入式微处理器系统的开发环境
一、实验环境
PC机一台
软件:
ADS1.2集成开发环境一套
二、实验目的
1.了解嵌入式系统及其特点;
2.熟悉嵌入式系统的开发环境和基本配置并能编写简单的汇编程序
三、实验容
1.嵌入式系统的开发环境、基本配置
2.使用汇编指令完成简单的加法实验
四、实验步骤
(1)在D:
\新建一个目录,目录名为experiment。
(2)点击WINDOWS操作系统的“开始|程序|ARMDeveloperSuitev1.2|CodeWarriorfor
ARMDeveloperSuite”启动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。
图1-4设置字体
(6)选择【Edit】->【DebugRelSettings…】,在DebugRelSettings对话框的左边选择ARMLinker项,设置地址。
点击“DebugRelSettings…”图标按钮,即可进行工程的地址设置、输出文件设置、编
译选项等,如图1-5所示。
在“ARMLinker”对话框设置连接地址,在“LanguageSettings”中设置各编译器的编译选项。
对于简单的软件调试,可以不进行连接地址的设置,直接点击工程窗口的“Make”图标按钮,即可完成编译连接。
若编译出错,会有相应的出错提示,双击出错提示行信息,编辑窗即会使用光标指出当前出错的源代码行,编译连接输出窗口如图1-6所示。
同样,您可以在【Project】菜单中找到相应的命令。
图1-5连接器选项设置
图1-6output选项卡
OUTPUT选项卡:
该选项卡用来控制连接器进行连接操作的类型。
其中Linktype选项组中的单选按钮确定使用的连接方式。
这里选择Simple,连接器将根据连接器选项中指定的地址映射方式,生成简单的ELF格式的映像文件,所生成的映像文件中的地址映射关系比较简单.当选择Simple连接类型时,需要设置下列的连接器选项,如图1-5所示。
ROBase文本框中填入0x40000000。
地址0x40000000是开发板上SDRAM的真实地址,是由系统的硬件决定的;RWBase文本框中填入0x40003000指的是系统可读写存的地址。
也就是说,在0x40000000-0x40003000之间是只读区域,存放程序的代码段,从0x40003000开始是程序的数据段。
Layout选项卡:
该选项卡在连接方式位Simple时有效,它用来安排一些输入段在映像文件中的位置。
Placeatbeginningofimage选项组用于指定将某个输入段放置在它所在的运行时域的开头。
包含复位异常中断处理程序的输入段通常放置在运行时域的开头。
这里,在Object/Symbol文本框中指定目标文件的名称init.o,在Section文本框中指定输入段的名称init,从而确定了init.s源文件中的init输入段位指定的输入段。
如图1-7所示。
图1-7Layout选项卡中连接器选项
(6)选择【Project】->【Make】,或者按下快捷键F7,将编译整个工程。
如图1-8所示为工程窗口中的图标按钮,通过这些图标按钮,可以快速的进行工程设置,编译连接,启动调试等等.它们从左到右分别为
图1-8工程窗口中的图标按钮
A)DebugRelSettings…
工程设置;
B)SynchronizeModificationDates
同步修改日期;
C)Make
编译连接;
D)Debug
启动ADX进行调试;
E)Run
启动ADX调试,并直接运行;
F)ProjectInspector
工程检查,查看和配置工程中源文件的信息;
对于简单的软件调试,直接点击工程窗口的”Make”图标按钮,即可完成编译.编译连接输出窗口如图1-9所示。
图1-9编译连接输出窗口
(7)选择【Project】->【Debug】,或者按下快捷键F5。
IDE环境就会启动AXD调试软件,接着可以执行单步、全速运行调试。
图1-10AXD调试窗口
注意:
本实验使用软件仿真,所以要在AXD中选择【Options】->【ConfigureTarget…】菜单,然后在ChooseTarget窗口中选用ARMUL软件仿真。
图1-11目标环境选择
五思考题
1.工程模板有何作用?
2.如何强行重新编译工程的所有文件?
(提示:
选择【Project】->【RemoveObjectCode…】删除工程中的*.obj文件)
六参考程序
AREAExample1,CODE,READONLY;声明代码段Example1
ENTRY;标识程序入口
CODE32;声明32位ARM指令
STARTMOVR0,#15;设置参数
MOVR1,#8
ADDSR0,R0,R1;R0=R0+R1
BSTART
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】重新加载映象文件)
七、参考程序
COUNTEQU0x40003100;定义一个变量,地址为0x40003100
AREAExample2,CODE,READONLY;声明代码段Example2
ENTRY;标识程序入口
CODE32;声明32位ARM指令
STARTLDRR1,=COUNT;R1<=COUNT
MOVR0,#0;R0<=0
STRR0,[R1];[R1]<=R0,即设置COUNT为0
LOOPLDRR1,=COUNT
LDRR0,[R1];R0<=[R1]
ADDR0,R0,#1;R0<=R0+1
CMPR0,#10;R0与10比较,影响条件码标志
MOVHSR0,#0;若R0大于等于10,则此指令执行,R0<=0
STRR0,[R1];[R1]<=R0,即保存COUNT
BLOOP
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|
IMPORTMAIN;declarethemain()intheCProg
AREAstart,CODE,READONLY
ENTRY
CODE32
Reset
LDRSP,=0x40003f00
;initialtheCcase
LDRR0,=|Image$$RO$$Limit|
LDRR1,=|Image$$RW$$Base|
LDRR3,=|Image$$ZI$$Base|
CMPR0,R1
BEQLOOP1
LOOP0
CMPR1,R3
LDRCCR2,[R0],#4
STRCCR2,[R1],#4
BCCLOOP0
LOOP1
LDRR1,=|Image$$ZI$$Limit|
MOVR2,#0
LOOP2
CMPR3,R1
STRCCR2,[R3],#4
BCCLOOP2
BMAIN
END
//mainfile
#defineuint8unsignedchar
#defineuint32unsignedint
#defineN100
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
#defineuint8unsignedchar
#defineuint32unsignedint
externuint32Add(uint32x,uint32y);
uint32sum;
voidMain(void)
{
sum=Add(5,4);
while
(1);
}
;Add.s
EXPORTAdd
AREAAddc,CODE,READONLY
ENTRY
CODE32
Add
ADDR0,R0,R1
MOVPC,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、可以单步运
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 ADS 实验 指导书