收藏 分销(赏)

ARM嵌入式实验报告.pdf

上传人:天**** 文档编号:4317908 上传时间:2024-09-05 格式:PDF 页数:10 大小:671.56KB
下载 相关 举报
ARM嵌入式实验报告.pdf_第1页
第1页 / 共10页
ARM嵌入式实验报告.pdf_第2页
第2页 / 共10页
ARM嵌入式实验报告.pdf_第3页
第3页 / 共10页
ARM嵌入式实验报告.pdf_第4页
第4页 / 共10页
ARM嵌入式实验报告.pdf_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、湖南工业大学湖南工业大学 电子信息电子信息 1203 联想联想 124017205XX实验一实验一 ARM 汇编指令使用实验汇编指令使用实验基本数学基本数学/逻辑运算逻辑运算一、实验目的一、实验目的1.初步学会使用 ARM ADS/Embest IDE for ARM 开发环境及 ARM 软件模拟器。2.通过实验掌握数据传送和基本数学/逻辑运算的 ARM 汇编指令的使用方法。二、实验设备二、实验设备1.硬件:PC 机。2.软件:ADS 1.2/Embest IDE 200X 集成开发环境。三、实验内容三、实验内容1熟悉 ADS 1.2/Embest IDE 200X 开发环境的使用,使用 LD

2、R/STR 和 MOV 等指令访问寄存器或存储单元,实现数据的加法运算。具体实验程序如下:/*armasm1a.s*/.EQU X,45 /*定义变量 X,并赋值为 45*/.EQU Y,64 /*定义变量 Y,并赋值为 64*/.EQU STACK_TOP,0X1000 /*定义栈顶 0X1000*/.GLOBAL _START.TEXT_START:/*程序代码开始标志*/MOVSP,#STACK_TOP MOV R0,#X /*X 的值放入 R0*/STR R0,SP/*R0 的值保存到堆栈*/MOV R0,#Y /*Y 的值放入 R0*/LDR R1,SP/*取堆栈中的数到 R1*/A

3、DDR0,R0,R1 STR R0,SPSTOP:B STOP /*程序结束,进入死循环*/.END2使用 ADD/SUB/LSL/LSR/AND/ORR 等指令,完成基本数学/逻辑运算。具体实验程序如下:/*armasm1b.s*/.EQUX,45/*定义变量 X,并赋值为 45*/.EQUY,64/*定义变量 Y,并赋值为 64*/.EQU Z,87/*定义变量 Z,并赋值为 87*/.EQUSTACK_TOP,0X1000/*定义栈顶 0X1000*/.GLOBAL _START.TEXT_START:/*程序代码开始标志*/MOV R0,#X /*X 的值放入 R0*/MOVR0,R0

4、,LSL#8/*R0 的值乘以 2 的 8 次方*/MOV R1,#Y /*Y 的值放入 R1*/ADDR2,R0,R1,LSR#1 /*R1 的值除以 2 再加上 R0 后的值放入 R2*/湖南工业大学湖南工业大学 电子信息电子信息 1203 联想联想 124017205XX MOVSP,#0X1000 STR R2,SP MOV R0,#Z /*Z 的值放入 R0*/ANDR0,R0,#0XFF/*取 R0 的低八位*/MOV R1,#Y /*Y 的值放入 R1*/ADDR2,R0,R1,LSR#1/*R1 的值除以 2 再加上 R0 后的值放入 R2*/LDRR0,SP/*Y 的值放入

5、R1*/MOVR1,#0X01 ORRR0,R0,R1 MOV R1,R2 /*Y 的值放入 R1*/ADD R2,R0,R1,LSR#1/*R1 的值除以 2 加上 R0 的值放入 R2*/STOP:B STOP /*程序结束,进入死循环*/.END四、实验操作步骤四、实验操作步骤1新建工程。先建立一个实验文件夹,如 EARMSYarmasm1;然后运行 Embest IDE 集成开发环境,选择 FileNew Workspace 菜单项,弹出一个对话框,输入工程名 armasm1a/armasmlb 等相关内容;最后单击 OK 按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此

6、时在工作区窗口将能打开该工作区和工程。2建立源文件。选择 FileNew 菜单项,弹出一个新的、没有标题的文本编辑窗口,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件 armasmla.s。3添加源文件。选择 ProjectAdd To ProjectFile 项或单击工程管理窗口中的相应右键快捷菜单命令,打开文件选择对话框,在工程目录下选择刚才建立的源文件 armasmla.s/armasmlb.s。4基本设置。选择 ProjectSettings菜单项或按下快捷键 Alt+F7,弹出工程设置对话框;在工程设置对话框中选择 Processor 属性页,按照使

7、用要求对目标板所用处理器进行设置。5生成目标代码。选择 BuildBuild armasmla 菜单项或按下快捷键 F7,生成目标代码。此步骤也可以通过单击工具栏上相应按钮来完成。6调试设置。选择选择 ProjectSettings菜单项或按下快捷键 Alt+F7,弹出工程设置对话框;在工程设置对话框中,若选择 Remote 页面则对调试设备模块进行设置;若选择 Debug 页面则对调试模块进行设置。7选择 DebugRemote Connect 连接软件仿真器,执行 Download 命令下载程序,并打开寄存器窗口。湖南工业大学湖南工业大学 电子信息电子信息 1203 联想联想 124017

8、205XX8打开存储器窗口,观察地址 0 x80000 x801F 的内容以及地址 0 xFF00 xFFF 的内容。9单步执行程序,并观察和记录寄存器与存储器值的变化。10结合实验内容和相关资料观察程序运行,通过实验加深理解 ARM 指令的使用。五、实验结果分析五、实验结果分析1.程序 1 用用来实现加法运算;程序 2 使用 ADD/SUB/LSL/AND/ORR 等指令,完成基本的数学/逻辑运算。2.通过记录程序 1 和程序 2 单步运行时有关寄存器与存储器的值,可以看出运行结果正确。湖南工业大学湖南工业大学 电子信息电子信息 1203 联想联想 124017205XX实验二实验二 ARM

9、 汇编指令使用实验汇编指令使用实验存储区数据块的传送存储区数据块的传送一、一、实验目的实验目的1熟悉 ARM ADS 1.2/Embest IDE for ARM 开发环境及 ARM 软件模拟器的使用。2通过实验掌握使用 LDM/STM、B、BL 等指令完成较为复杂的存储区访问和分支程序的方法,学习使用条件码,加强对 CPSR 的认识。二、实验设备二、实验设备1.硬件:PC 机。2.软件:ADS 1.2/Embest IDE 200X 集成开发环境。三、实验内容三、实验内容设计并调试一个存储区数据块的传送程序,具体数据块的传送要求为:将数据从源数据区 snum复制到目标数据区 dnum,数据的

10、个数 num 假定为 20,复制时以 8 个字为单位进行,对于最后不足8 个字的数据,以字为单位进行复制。用 ARM 汇编语言设计该数据块复制程序的设计思想如下:先将源数据区的起始地址、目标数据区的起始地址以及数据个数赋给选定的寄存器 R0、R1、R2,再根据每次批量/单个复制数据的个数R3 确定用于数据复制的中间寄存器 R4R11,之后先将源数据区的若干个数据批量装载到中间寄存器中,再将中间寄存器的数据批量存储到目的数据存储区,随后进行数据是否复制完毕的判断,若未复制完毕,则修改有关操作数据地址,并重复前面的数据复制操作,否则,终止操作,程序结束。程序如下:.GLOBAL _START.TE

11、XT.EQU NUM,20 /*定义需要复制的字数据个数 NUM 为 20*/_START:LDR R0,=SRC /*将 R0 指向源数据区的起始地址*/LDR R1,=DST /*将 R1 指向源数据区的起始地址*/MOV R2,#NUM /*将需要复制的字数据个数存放在 R2 中*/MOV SP,#0X400 /*将堆栈指针 SP 指向#0X400*/BLKCOPY:MOVS R3,R2,LSR#3 /*R2 的值除以 8 的结果存入 R3*/BEQ COPYWORDS /*若 Z=1,则转 COPYWORDS*/STMFD SP!,R4-R11 /*将 R4R11 的内容存入堆栈进行保

12、护*/OCTCOPY:LDMIA R0!,R4-R11 /*从源数据区装载 8 个字数据到 R4R11*/STMIA R1!,R4-R11 /*将 R4R11 中的 8 个字数据存入目的数据区*/SUBS R3,R3,#1 /*每复制一次 R3 减 1*/BNE OCTCOPY /*若 R3 不等于 0,则转移到 OCTCOPY*/LDMFD SP!,R4-R11 /*将堆栈内容恢复到 R4R11*/COPYWORDS:湖南工业大学湖南工业大学 电子信息电子信息 1203 联想联想 124017205XX ANDS R2,R2,#7 /*计算需复制的奇数个字的个数*/BEQ STOP /*若

13、R2=0 则停止*/WORDCOPY:LDR R3,R0,#4 /*将源数据区的一个字装载至 R3*/STR R3,R1,#4 /*将 R3 中的数据存到目的数据区*/SUBS R2,R2,#1 /*数据传输控制计数器减 1*/BNE WORDCOPY/*若 R2 不等于 0,则转移到 WORDCOPY*/STOP:B STOP.LTORGSRC:/*源数据区起始地址标号*/.LONG 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4DST:/*目的数据区起始地址标号*/.LONG 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.E

14、ND四、实验操作步骤四、实验操作步骤1新建工程。先建立一个实验文件夹,如 EARMSYarmasm2;然后运行 Embest IDE 集成开发环境,选择 FileNew Workspace 菜单项,弹出一个对话框,输入工程名 ARMcode 等相关内容;最后单击 OK 按钮,将创建一个新工程,同时创建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程。2建立源文件。选择 FileNew 菜单项,弹出一个新的、没有标题的文本编辑窗口,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件 armasm2.s。3添加源文件。选择 ProjectAdd To P

15、rojectFile 项,或单击工程管理窗口中的相应右键快捷菜单命令,打开文件选择对话框,在工程目录下选择刚才建立的源文件 armasm2.s。4基本设置。选择 ProjectSettings菜单项或按下快捷键 Alt+F7,弹出工程设置对话框;然后在工程设置对话框中,选择 Processor 属性页,对目标板所用处理器进行设置。5生成目标代码。选择 BuildBuild armasm2 菜单项或按下快捷键 F7,生成目标代码。也可以单击工具栏上的相应按钮来完成。6调试设置。选择 ProjectSettings菜单项或按下快捷键 Alt+F7,弹出工程设置对话框;在工程设置对话框中,若选择 R

16、emote 页面则对调试设备模块进行设置;若选择 Debug 页面,则对调试模块进行设置。湖南工业大学湖南工业大学 电子信息电子信息 1203 联想联想 124017205XX7选择 DebugRemote Connect 连接软件仿真器,执行 Download 命令下载程序,并打开寄存器窗口。8打开存储器窗口,观察地址 0 x80540 x80A0 的内容以及地址 0 x80A40X80F0 的内容。9单步执行程序并观察和记录寄存器与存储器值的变化,注意观察步骤 8 的地址中的内容变化。当执行 STMFD、LDMFD、LDMIA 和 STMIA 指令时,注意观察其后面的参数所指的地址段或寄存

17、器段的内容变化。10结合实验内容和相关资料观察程序运行,通过实验加深理解 ARM 指令的使用。五、实验结果分析五、实验结果分析执行-START 之后:R0:0X00008054 R1:0X000080a4 R2:0X00000014 SP:0X00004000执行 STMIA R1!,R4R11后:R0:0X00008074 R1:0X000080a4 R4R11:0X000000010X00000008执行 LDMFD 之后:SP:0X000004000 R4R11:0X000000000X000000000实验最终完成了将数据从源数据区 snum 复制到目标数据区 dnum。湖南工业大学湖

18、南工业大学 电子信息电子信息 1203 联想联想 124017205XX实验三实验三 汇编语言与汇编语言与 C 语言的相互调用实验语言的相互调用实验随机数发生器随机数发生器一、一、实验目的实验目的1阅读实验程序,观察处理器启动过程,学会使用 ADS1.2/Embest IDE 辅助信息窗口来分析判断调试过程和结果。2学会在 ADS1.2/Embest IDE 中编写、编译与调试汇编语言和 C 语言相互调用的程序。二、实验设备二、实验设备1.硬件:PC 机。2.软件:ADS 1.2/Embest IDE 200X 集成开发环境。三、实验内容三、实验内容使用汇编语言设计一个产生随机数的函数,然后通

19、过 C 语言来调用该函数产生一系列随机数,并存放到数组中。程序如下。1randtest.c 源代码源代码/*随机数产生测试例子,程序通过调用 random.s 中的函数 randomnumber 来生成随机数*/#include extern unsigned int randomnumber(void);int main()int i;int nTemp;unsigned int random10;for(i=0;i 10;i+)nTemp=randomnumber();randomi=nTemp;return(0);2init.s 源代码源代码/*系统初始化程序,用于硬件初始化设置,并转入

20、外部的随机数产生主函数 main()*/#程序入口,ARM 汇编#.ARM.GLOBAL _START.TEXT_START:B RESET_HANDLERUNDEFINED_HANDLER:B UNDEFINED_HANDLER湖南工业大学湖南工业大学 电子信息电子信息 1203 联想联想 124017205XXSWI_HANDLER:B SWI_HANDLERPREFETCH_HANDLER:B PREFETCH_HANDLERABORT_HANDLER:B ABORT_HANDLER NOP/*RESERVED VECTOR*/IRQ_HANDLER:B IRQ_HANDLERFIQ_H

21、ANDLER:B FIQ_HANDLERRESET_HANDLER:LDRSP,=0X00002000 .EXTERN MAIN LDR R0,=MAIN MOV LR,PC BX R0#-LOOP FOR EVEREND:B END.GLOBAL _GCCMAIN_GCCMAIN:MOV PC,LR .END 3random.s 源代码源代码#这是一个使用 33 位反馈移位寄存器产生伪随机数的函数产生器 RANDOMNUMBER#AREA|Random$code|,CODE,READONLY .GLOBAL RANDOMNUMBERRANDOMNUMBER:#ON EXIT:#A1=32 伪

22、随机数的低位数据#A2=32 伪随机数的高位数据 LDR IP,SEEDPOINTER LDMIA IP,A1,A2 TST A2,A2,LSR#1 MOVS A3,A1,RRX ADC A2,A2,A2 EOR A3,A3,A1,LSL#12 EOR A1,A3,A3,LSR#20 STMIA IP,A1,A2 MOV PC,LRSEEDPOINTER:.LONG SEED.DATA .GLOBAL SEEDSEED:.LONG 0X55555555 .LONG 0X55555555#END4链接脚本文件链接脚本文件 ldscript 参考源代码参考源代码SECTIONS湖南工业大学湖南工业

23、大学 电子信息电子信息 1203 联想联想 124017205XX.=0 x0;.text:*(.text).data:*(.data).rodata:*(.rodata).bss:*(.bss)链接脚本程序主要是描述编写的文件中的各个部分如何摆放在输出文件中,并控制这些文件如何定位这些输出文件。链接脚本文件必须以关键词 SECTIONS 开始,紧接着式大括号,后面是所有需要输出地描述部分,最后是闭括号收尾,并且全部使用半角符号。本 ldscript 文件中各语句的含义是:“.=0 x0”为将当前地址计数器指向 0 x0,“.text:*(.text)”为程序代码必须放在当前的地址计数器指向的

24、 0 x0 处,“.data:*(.data)”为已经初始化的数据必须放在当前的地址计数器指向的地方(紧接 text 区域后),“.rodata:*(.rodata)”为只读数据必须放在当前的地址计数器指向的地方(紧接 data 区域后),“.bss:*(.bss)”为未初始化的数据必须放在当前的地址计数器指向的地方(紧接 rodata 区域后)。四、实验操作步骤四、实验操作步骤1创建新的工程,工程名为 armcasm。2 按照参考程序编写源代码文件,并分别保存为 randtest.c、init.s、random.s 和 ldscript,然后把它们加入工程中。3按照编译汇编器设置链接器设置调

25、试器设置的顺序来设置新工程,并编译、链接工程。4下载调试文件,并打开 Memrory/Register/Watch/Variable/Call Stack 窗口,单步执行程序。通过以上窗口,跟踪程序运行,观察分析并记录运行结果,通过实验学会使用 ADS1.2/Embest IDE 来进行应用程序的开发与调试。五、实验总结与心得五、实验总结与心得学期开始,我们开始学习嵌入式系统及应用,由于初次接触嵌入式系统,感觉蛮难的,很多的概念都学的比较模糊,面对课本,有时候总感觉茫然,无从下手,但实验帮助我们理解了很多之前没理解的概念,使我们对于嵌入式知识有了一个更深的了解。在了解了基础知识之后,我开始进行

26、上机操作,当然,其中遇到很多的难题,很多东西都是第一次接触,即使有老师在旁边指导操作,也需要自己去摸索练习。其中的困难也可想而知。然而坚持就是胜利,牙一咬眼一闭坚持做下去,而通过本次实验,我感觉收获还是蛮多的。可能我对于嵌入式的知识学习的还是不太多,但是这之外的东西收获颇丰。它让我学会了如何通过自己的努力去湖南工业大学湖南工业大学 电子信息电子信息 1203 联想联想 124017205XX认知一个新事物,更重要的是端正自己的学习态度,只有真正下功夫去学习,才能有收获,正所谓“一份耕耘,一份收获。”没有付出,何谈回报呢?再者,通过本次实验,我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程。当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。当然,在这其中,我也发现自己的许多不足之处,由于学期伊始我没有好好学习,才落到如此地步,这也可以说是一个教训吧!我相信在以后的学习工作中,我一定会端正自己的学习态度,一丝不苟的去对待每一件事。只有做好足够的准备,才能事半功倍!

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服