已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电气与信息工程学院实践基地 实践报告XXXX学院综合性实践报告实践项目名称ARM嵌入式开发基础实践所属课程名称ARM工程实践 实 践 日 期班 级学 号姓 名成 绩电气与信息工程学院实践基地ARM实践1:汇编程序设计1【实践目的】1熟悉ADS1.2 软件开发环境;2掌握ARM920T 汇编指令的用法,并能编写简单的汇编程序;3掌握指令的条件执行和使用LDR/STR 指令完成存储器的访问。【实践内容】1使用LDR 指令读取0x30003100 上的数据,将数据加1,若结果小于10,则使用STR 指令把结果写回原地址,若结果大于等于10,则把0 写回原地址。2 使用ADS1.2 软件仿真,单步,全速运行程序,设置断点,打开寄存器窗口(Processor Registers)监视R0,R1 的值,打开存储器观察窗口(Memory)监视0x30003100 上的值。【实践设备】硬件:PC 机一台。软件:Windows98/XP/2000 系统,ADS1.2 集成开发环境。【实践过程】(实践步骤、记录、数据、分析)1启动ADS1.2,使用ARM Executable Image 工程模板建立一个工程arm1.mcp。2建立汇编源文件arm1.s,编写实验程序,然后添加到工程中。3设置工程连接地址RO Base 为0x30000000,RW Base 为0x30003000,设置options中的调试口地址Image entry point 为0x30000000。4编译连接工程,选择Project|Debug,启动AXD 进行软件仿真调试。5打开寄存器窗口(Processor Registers),选择Current 项监视R0,R1 的值。打开存储器观察窗口(Memory),设置观察地址为0x30003100,显示方式Size 为32Bit,监视0x30003100 地址上的值。说明:在Memory 窗口中点击鼠标右键,Size 项中选择显示格式为8bit,16bit,32bit。设置寄存器显示格式与之类似。使用鼠标左键选择某一个寄存器,然后点击鼠标右键,Format 项中选择显示格式Hex,Decimal 等等。6可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行。这时观察寄存器和0x30003100 地址上的值。【实践程序分析】COUNT EQU 0x30003100 ;定义变量COUNT的基地址 AREA Example1,CODE,READONLY ;声明代码段Example1为只读 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START LDR R1,=COUNT ;将0X30003100赋给R1 MOV R0,#0 ;执行R0=0 STR R0,R1 ;存储R0寄存器的数据到R1指向的存储单元LOOP LDR R1,=COUNT ;将0X30003100赋给R1 LDR R0,R1 ;将R1中的数值作为地址,取出此地址中的数据保存到R0中 ADD R0,R0,#1 ;执行R0=R0+1 CMP R0,#10 ;将R0与10进行比较 MOVHS R0,#0 ;若R0大于等于10,则R0=0 STR R0,R1 ;存储R0寄存器的数据到R1指向的地址单元 B LOOP ;跳转到LOOP END ;汇编文件结束【实践小结】通过本实践,我熟悉了ADS1.2 软件开发环境,掌握了ARM920T 汇编指令的用法,并能编写简单的汇编程序,还掌握了指令的条件执行和使用LDR/STR 指令完成存储器的访问。ARM实践2:汇编程序设计2【实践目的】1掌握ARM 乘法指令的使用方法;2了解子程序编写及调用。【实践内容】使用 STMFD/LDMFD,MUL 指令编写一个整数乘方的子程序,然后使用BL 指令调用子程序计算X n 的值。【实践设备】硬件:PC 机一台。软件:Windows98/XP/2000 系统,ADS1.2 集成开发环境。【实践过程】(实践步骤、记录、数据、分析)1启动ADS1.2,使用ARM Executable Image 工程模板建立一个工程arm2.mcp。2建立汇编源文件arm2.s,编写实验程序,然后添加到工程中。3设置工程连接地址RO Base 为0x30000000,RW Base 为0x30003000,设置调试口地址Image entry point 为0x30000000。4编译连接工程,选择Project|Debug,启动AXD 进行软件仿真调试。5打开寄存器窗口(Processor Registers),选择Current 项监视寄存器R0,R1,R13(SP)和R14(LR)的值。6打开存储器观察窗口(Memory),设置观察地址为0x30003EA0,显示方式Size 为32Bit,监视从0x30003F00 起始的满递减堆栈区。7单步运行程序,跟踪程序执行的流程,观察寄存器值的变化和堆栈区的数据变化,判断执行结果是否正确。8调试程序时,更改参数X 和n 来测试程序,观察是否得到正确的结果。例如:先复位程序,接着单步执行到“BL POW”指令,在寄存器窗口中将R0,R1 的值进行修改,然后继续运行程序。说明:用鼠标双击寄存器窗口的寄存器,即可修改寄存器的值。输入数据可以是十进制数(如136,198),也可以是十六进制数(如0x123,0xF0),输入数据后回车确定。【实践程序分析】X EQU 9 ;初始化X为9N EQU 8 ;初始化N为8 AREA Example3,CODE,READONLY ;生明代码段Example3为只读 ENTRY ;标识程序入口路 CODE32 ;声明32位ARM指令START LDR SP,=0x30003F00 ;把0x30003F00 赋给SP(R13) LDR R0,=X ;把9赋给R0 LDR R1,=n ;把8赋给R1 BL POW ;跳转到POW,并把下一条指令地址存入到R14中HALT B HALT ;等待跳转POW STMFD SP!,R1-R12,LR ;将R1-R12入栈,满递减堆栈 MOVS R2,R1 ;将R1赋给R2,并影响标志位 MOVEQ R0,#1 ;若Z=1,则R0=1 BEQ POW_END ;若Z=1,跳转到POW_END MOV R1,R0 ;将R0中值赋给R1 SUBS R2,R2,#1 ;将R2-1的只赋给R2 BEQ POW_ENDPOW_L1 BL DO_MUL ;跳转到DO-MUL,并把下一条指令地址存入R14中 SUBS R2,R2,#1 ;将R2-1的值赋给R2,并影响标志位 BNE POW_L1 ;若Z=0,跳转到POW_L1POW_END LDMFD SP!,R1-R12,PC ;数据出栈,存入到R1-R12,PC中DO_MUL MUL R0,R1,R0 ;把R1*R0的值赋给R0 MOV PC,LR ;LR中的值赋给PC END ;汇编结束【实践小结】通过本实践,我掌握了ARM 乘法指令的使用方法,了解了子程序的编写及调用。ARM实践3:C语言程序设计1【实践目的】通过实验了解使用 ADS1.2 编写C 语言程序,并进行调试。【实践内容】编写一个汇编程序文件和一个 C 程序文件,汇编程序的功能是初始化堆栈指针和初始化C 程序的运行环境,然后跳转到C 程序运行,这就是一个简单的启动程序.C 程序使用加法运算来计算1+2+3+(N-1)+N 的值(N0)。【实践设备】硬件:PC 机一台。软件:Windows98/XP/2000 系统,ADS1.2 集成开发环境。【实践过程】(实践步骤、记录、数据、分析)1启动ADS1.2,使用ARM Executable Image 工程模板建立一个工程c1.mcp。2建立汇编源文件Startup.s 和c1.c,编写实验程序,然后添加到工程中。3设置工程连接地址RO Base 为0x30000000,RW Base 为0x30003000,设置调试口地址Image entry point 为0x30000000。4设置位于开始位置的起始代码段。5编译连接工程,选择Project|Debug,启动AXD 进行软件仿真调试。6在Startup.s 的”B Main”处设置断点, 然后全速运行程序。7程序在断点处停止,单步运行程序,判断程序是否跳转到C 程序中运行。8选择Processor Views | Variables 打开变量观察窗口,观察全局变量的值,单步/全速运行程序,判断程序的运算结果是否正确。【实践程序分析】#define uint8 unsigned char ;定义一个无符号字符常量uint8#define uint32 unsigned int ;定义一个无符号整形常量unint32#define N 100 ;定义一个常量N=100(宏定义,100用N代替)uint32 sum; ;定义sum为无符号整型常量(声明一个unsigned int型的变量sum)void Main(void) ;主函数uint32 i; ;定义无符号整型常量i(声明一个unsigned int型的变量i) sum=0; ;sum初始值为0 for(i=0;i=N;i+) ;i在N内自增加1(i从0开始,i=N时循环成立) sum+=i; ;把sum+i赋给sum while(1); ;为真循环 IMPORT |Image$RO$Limit | ;R0输出段存储区域界限 IMPORT |Image$RW$Base | ;RW输出段运行时起始地址 IMPORT |Image$ZI$Base | ;ZI输出段运行时起始地址 IMPORT |Image$ZI$Limit | ;ZI输出段存储区域界限 IMPORT Main ;主函数 AREA Start,CODE,READONLY ;声明代码段start,为只读 ENTRY ;程序入口 CODE32 ;声明32位ARM指令Reset LDR SP,=0x40003f00 ;将0x40003f00赋给SP LDR R0,=|Image$RO$Limit| ;将R0输出段存储区域界限赋给R0 LDR R1,=|Image$RW$Base | ;将RW输出段运行时起始地址赋给R1 LDR R3,=|Image$ZI$Base | ;将ZI输出段运行时起始地址赋给R3 CMP R0,R1 ;比较R0和R1,相等Z=1,反之Z=0 BEQ LOOP1 ;若Z=1,则跳到LOOP1LOOP0 CMP R1,R3 ;比较R1和R3,若R1R3,C=0 LDRCC R2,R0,#4 ;若C=0,读取R0地址单元内容并且存入R2,且R0=R0+4 STRCC R2,R1,#4 ;若C=0,读取R2中的数据存入R1,且R1=R1+4 BCC LOOP0 ;若C=0,跳转到LOOP0LOOP1 LDR R1,=|Image$ZI$Limit| ;将ZI输出段存储区域赋给R1 MOV R2,#0 ;把0赋给R2LOOP2 CMP R1,R3 ;比较R1和R3,若R1R3,C=0 STRCC R2,R3,#4 ;若C=0,将R2中数据保存到内存单元R3中,且R3=R3+4 BC LOOP2 ;若C=0,跳转到LOOP2 B Main ;跳转到主程序 END ;汇编结束【实践小结】通过本实践,我了解了如何使用 ADS1.2 编写C 语言程序,还学会了如何进行调试。ARM实践4:C语言程序设计2【实践目的】掌握在 C 语言程序中调用汇编程序,了解ATPCS 基本规则。【实践内容】在C程序调用汇编子程序,实现两个整数的加法运算。汇编子程序的原型为:unit32 Add(unit32 x,unit32 y)其中, unit32已定义为unsigned int。【实践设备】硬件:PC 机一台。软件:Windows98/XP/2000 系统,ADS1.2 集成开发环境。【实践过程】(实践步骤、记录、数据、分析)1启动ADS1.2,使用ARM Executable Image 工程模板建立一个工程c2.mcp。2建立汇编源文件Startup.S , Add.S 和c2.c,编写实验程序,然后添加到工程中。3设置工程连接地址RO Base 为0x30000000,RW Base 为0x30003000,设置调试口地址Image entry point 为0x30000000。4设置工程连接选项,位于开始位置的起始代码段设置为Startup.o 的Start 段。5编译连接工程,选择Project|Debug,启动AXD 进行软件仿真调试。6在c1 .c 文件中的调用Add()的代码处设置断点, 然后全速运行程序。7程序在断点处停止,使用Step In 单步运行程序,观察程序是否跳转到汇编程序中Add.s 运行。8选择Processor Views | Variables 打开变量观察窗口,观察全局变量的值,单步/全速运行程序, 判断程序的运算结果是否正确。【实践程序分析】#define uint8 unsigned char ;定义一个无符号字符常量uint8#define uint32 unsigned int ;定义一个无符号整型常量uint32extern uint32 Add(uint32 x,uint32 y) ;声明子程序Add为一个无符号整型常量,它为2个无符号整型常量x,y的和uint32 sum; ;定义sum为无符号整型常量 void Main(void) ;无返回主程序 sum=Add(555,168); ;sum等于555+168 while(1); ;为真循环 EXPORT Add ;声明子程序Add方便调用AREA Start,CODE,READONLY ;声明代码段start,为只读ENTRY ;程序入口CODE32 ;声明32位ARM指令Add ADD R0,R0,R1 ;将R0+R1值赋给R0 MOV PC,LR ;将LR值赋给PCEND ;汇编结束【实践小结】通过本实践,我掌握了在 C 语言程序中如何调用汇编程序,了解了ATPCS 的基本规则。ARM实践5:无仿真器下载运行【实践目的】1熟悉ADS 软件的基本配置;2通过实验掌握无仿真器时程序下载及运行的方法。【实践内容】1学习如何在ADS 集成开发环境中编译生成二进制(BIN)文件;2掌握如何利用超级终端在无仿真器的情况下进行程序的下载及运行。【实践设备】1ARM2410 嵌入式开发板;2软件:PC 机操作系统Win98、Win2000 或WinXP,ADS1.2 集成开发环境,超级终端通讯程序。【实践过程】(实践步骤、记录、数据、分析)1. 打开项目“LEDARY”,单击 Debugrel Setting按钮。2. 在 Debugrel Settings中包括 6 个面板,这里我们选择如下面板设置相关的生成选项。(1)设置生成目标的基本选项(Target Settings);(2) 连接器的选项设置(Linker)在 Target Settings Panels列表中选择 Linker选项,再在其下选择ARM Linker,即可得到连接器的选项设置对话框;(3)在Target Settings Panels列表中选择 Linker选项,再在其下选择 ARM fromELF,即可得到连接器的选项设置对话框。这里output format选择 Plain binary,Output file name输入相应的路径即文件名:D:Program FilesARMADSv1_2ExamplesLEDARY2410LEDARY.bin。 修改完一项设置的时候,需要按一下 APPLY,这样在下面显示栏里面看到更新过的设置。至此已经完成了DebugRel Settings的所有设置,点击 OK保存。3点击 Make按钮,即可在所设置的文件夹下面得到 2410LEDARY.bin文件。如果有ERROR提示 2410init.o的路径不正确,可以在PROJECT选项里面单击Remove Object Code。还可以修改代码,以显示不同的灯闪效果,保持其他设置不变,单击 Make重新生成.bin文件,注意.bin 文件的路径。至此,我们已经详细介绍了如何编译得到可以下载到开发板上RAM并且运行的 BIN文件。4. 连接好实验箱电源,并将计算机的串口接到开发板的UART0上,将SW1拨至 R,SW4拨至LEFT。 5运行超级终端,选择正确的串口号,并将串口设置为:波特率(115200)、奇偶校验(None)、数据位数(8)和停止位(1),无流控,打开串口。 6启动实验箱,在超级终端出现“按 ENTER键进入 BIOS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创业服务协议合同范本
- 农民农药化肥合同范本
- 农村柴火购买合同范本
- 制作合同更改协议范本
- 伐木工地住宿合同范本
- 县级医院集体合同范本
- 代广告位运营合同范本
- 劳务合同劳动合同范本
- 合伙承包山林合同范本
- 修车赔偿解协议书范本
- 2025工程机械设备租赁合同书
- 2025年南平武夷新区城市发展集团有限公司下半年社会招聘28人考试参考试题及答案解析
- 2025四川甘孜州招聘警务辅助人员33人考试模拟试题及答案解析
- 2025年企业食品安全管理人员培训考核试题及解析(公共篇)
- 2025年新闻记者资格证及新闻写作相关知识考试题库(附含答案)
- 孕前优生及优生知识培训课件
- 小学数学集体备课基本流程
- 2025年10月份上海市普陀区九年级语文上学期月考试卷解析及答案
- 2025年上海市绿化和市容管理局部分直属事业单位公开招聘考试参考试题及答案解析
- 2025上海崇明区东滩建设集团有限公司招聘4人考试参考试题及答案解析
- 人工智能行业2025年人才需求结构与培养方案可行性研究报告
评论
0/150
提交评论