ARM嵌入式开发基础实践.docx

上传人:b****3 文档编号:5356816 上传时间:2022-12-15 格式:DOCX 页数:16 大小:567.11KB
下载 相关 举报
ARM嵌入式开发基础实践.docx_第1页
第1页 / 共16页
ARM嵌入式开发基础实践.docx_第2页
第2页 / 共16页
ARM嵌入式开发基础实践.docx_第3页
第3页 / 共16页
ARM嵌入式开发基础实践.docx_第4页
第4页 / 共16页
ARM嵌入式开发基础实践.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

ARM嵌入式开发基础实践.docx

《ARM嵌入式开发基础实践.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式开发基础实践.docx(16页珍藏版)》请在冰豆网上搜索。

ARM嵌入式开发基础实践.docx

ARM嵌入式开发基础实践

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软件仿真,单步,全速运行程序,设置断点,打开寄存器窗口(ProcessorRegisters)监视R0,R1的值,打开存储器观察窗口(Memory)监视0x30003100上的值。

 

【实践设备】

硬件:

PC机一台。

软件:

Windows98/XP/2000系统,ADS1.2集成开发环境。

 

【实践过程】(实践步骤、记录、数据、分析)

1.启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程arm1.mcp。

2.建立汇编源文件arm1.s,编写实验程序,然后添加到工程中。

3.设置工程连接地址ROBase为0x30000000,RWBase为0x30003000,设置options

中的调试口地址Imageentrypoint为0x30000000。

4.编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。

5.打开寄存器窗口(ProcessorRegisters),选择Current项监视R0,R1的值。

打开存储器观察窗口(Memory),设置观察地址为0x30003100,显示方式Size为32Bit,监视0x30003100地址上的值。

说明:

在Memory窗口中点击鼠标右键,Size项中选择显示格式为8bit,16bit,32bit。

设置寄存器显示格式与之类似。

使用鼠标左键选择某一个寄存器,然后点击鼠标右键,

Format项中选择显示格式Hex,Decimal等等。

6.可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行。

时观察寄存器和0x30003100地址上的值。

 

【实践程序分析】

COUNTEQU0x30003100;定义变量COUNT的基地址

AREAExample1,CODE,READONLY;声明代码段Example1为只读

ENTRY;标识程序入口

CODE32;声明32位ARM指令

STARTLDRR1,=COUNT;将0X30003100赋给R1

MOVR0,#0;执行R0=0

STRR0,[R1];存储R0寄存器的数据到R1指向的存储单元

LOOPLDRR1,=COUNT;将0X30003100赋给R1

LDRR0,[R1];将R1中的数值作为地址,取出此地址中的数据保存到R0中

ADDR0,R0,#1;执行R0=R0+1

CMPR0,#10;将R0与10进行比较

MOVHSR0,#0;若R0大于等于10,则R0=0

STRR0,[R1];存储R0寄存器的数据到R1指向的地址单元

BLOOP;跳转到LOOP

END;汇编文件结束

 

【实践小结】

通过本实践,我熟悉了ADS1.2软件开发环境,掌握了ARM920T汇编指令的用法,并能编写简单的汇编程序,还掌握了指令的条件执行和使用LDR/STR指令完成存储器的访问。

 

ARM实践2:

汇编程序设计2

 

【实践目的】

1.掌握ARM乘法指令的使用方法;

2.了解子程序编写及调用。

 

【实践内容】

使用STMFD/LDMFD,MUL指令编写一个整数乘方的子程序,然后使用BL指令调

用子程序计算Xn的值。

 

【实践设备】

硬件:

PC机一台。

软件:

Windows98/XP/2000系统,ADS1.2集成开发环境。

 

【实践过程】(实践步骤、记录、数据、分析)

1.启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程arm2.mcp。

2.建立汇编源文件arm2.s,编写实验程序,然后添加到工程中。

3.设置工程连接地址ROBase为0x30000000,RWBase为0x30003000,设置调试口地址Imageentrypoint为0x30000000。

4.编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。

5.打开寄存器窗口(ProcessorRegisters),选择Current项监视寄存器R0,R1,R13(SP)和R14(LR)的值。

6.打开存储器观察窗口(Memory),设置观察地址为0x30003EA0,显示方式Size为

32Bit,监视从0x30003F00起始的满递减堆栈区。

7.单步运行程序,跟踪程序执行的流程,观察寄存器值的变化和堆栈区的数据变化,

判断执行结果是否正确。

8.调试程序时,更改参数X和n来测试程序,观察是否得到正确的结果。

例如:

复位程序,接着单步执行到“BLPOW”指令,在寄存器窗口中将R0,R1的值进行修改,然后继续运行程序。

说明:

用鼠标双击寄存器窗口的寄存器,即可修改寄存器的值。

输入数据可以是十进

制数(如136,198),也可以是十六进制数(如0x123,0xF0),输入数据后回车确定。

 

【实践程序分析】

 

XEQU9;初始化X为9

NEQU8;初始化N为8

AREAExample3,CODE,READONLY;生明代码段Example3为只读

ENTRY;标识程序入口路

CODE32;声明32位ARM指令

STARTLDRSP,=0x30003F00;把0x30003F00赋给SP(R13)

LDRR0,=X;把9赋给R0

LDRR1,=n;把8赋给R1

BLPOW;跳转到POW,并把下一条指令地址存入到R14中

HALTBHALT;等待跳转

POWSTMFDSP!

{R1-R12,LR};将R1-R12入栈,满递减堆栈

MOVSR2,R1;将R1赋给R2,并影响标志位

MOVEQR0,#1;若Z=1,则R0=1

BEQPOW_END;若Z=1,跳转到POW_END

MOVR1,R0;将R0中值赋给R1

SUBSR2,R2,#1;将R2-1的只赋给R2

BEQPOW_END

POW_L1BLDO_MUL;跳转到DO-MUL,并把下一条指令地址存入R14中

SUBSR2,R2,#1;将R2-1的值赋给R2,并影响标志位

BNEPOW_L1;若Z=0,跳转到POW_L1

POW_ENDLDMFDSP!

{R1-R12,PC};数据出栈,存入到R1-R12,PC中

DO_MULMULR0,R1,R0;把R1*R0的值赋给R0

MOVPC,LR;LR中的值赋给PC

END;汇编结束

 

【实践小结】

通过本实践,我掌握了ARM乘法指令的使用方法,了解了子程序的编写及调用。

 

ARM实践3:

C语言程序设计1

【实践目的】

通过实验了解使用ADS1.2编写C语言程序,并进行调试。

 

【实践内容】

编写一个汇编程序文件和一个C程序文件,汇编程序的功能是初始化堆栈指针和初始化C程序的运行环境,然后跳转到C程序运行,这就是一个简单的启动程序.C程序使用加法运算来计算1+2+3+…+(N-1)+N的值(N>0)。

 

【实践设备】

硬件:

PC机一台。

软件:

Windows98/XP/2000系统,ADS1.2集成开发环境。

 

【实践过程】(实践步骤、记录、数据、分析)

1.启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程c1.mcp。

2.建立汇编源文件Startup.s和c1.c,编写实验程序,然后添加到工程中。

3.设置工程连接地址ROBase为0x30000000,RWBase为0x30003000,设置调试口地址Imageentrypoint为0x30000000。

4.设置位于开始位置的起始代码段。

5.编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。

6.在Startup.s的”BMain”处设置断点,然后全速运行程序。

7.程序在断点处停止,单步运行程序,判断程序是否跳转到C程序中运行。

8.选择ProcessorViews|Variables打开变量观察窗口,观察全局变量的值,单步/全速运行程序,判断程序的运算结果是否正确。

 

【实践程序分析】

#defineuint8unsignedchar;定义一个无符号字符常量uint8

#defineuint32unsignedint;定义一个无符号整形常量unint32

#defineN100;定义一个常量N=100(宏定义,100用N代替)

uint32sum;;定义sum为无符号整型常量(声明一个unsignedint型的变量sum)

voidMain(void);主函数

{uint32i;;定义无符号整型常量i(声明一个unsignedint型的变量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输出段存储区域界限

IMPORTMain;主函数

AREAStart,CODE,READONLY;声明代码段start,为只读

ENTRY;程序入口

CODE32;声明32位ARM指令

ResetLDRSP,=0x40003f00;将0x40003f00赋给SP

LDRR0,=|Image$$RO$$Limit|;将R0输出段存储区域界限赋给R0

LDRR1,=|Image$$RW$$Base|;将RW输出段运行时起始地址赋给R1

LDRR3,=|Image$$ZI$$Base|;将ZI输出段运行时起始地址赋给R3

CMPR0,R1;比较R0和R1,相等Z=1,反之Z=0

BEQLOOP1;若Z=1,则跳到LOOP1

LOOP0CMPR1,R3;比较R1和R3,若R1

LDRCCR2,[R0],#4;若C=0,读取R0地址单元内容并且存入R2,且R0=R0+4

STRCCR2,[R1],#4;若C=0,读取R2中的数据存入R1,且R1=R1+4

BCCLOOP0;若C=0,跳转到LOOP0

LOOP1LDRR1,=|Image$$ZI$$Limit|;将ZI输出段存储区域赋给R1

MOVR2,#0;把0赋给R2

LOOP2CMPR1,R3;比较R1和R3,若R1

STRCCR2,[R3],#4;若C=0,将R2中数据保存到内存单元R3中,且R3=R3+4

BCLOOP2;若C=0,跳转到LOOP2

BMain;跳转到主程序

END;汇编结束

 

【实践小结】

通过本实践,我了解了如何使用ADS1.2编写C语言程序,还学会了如何进行调试。

 

ARM实践4:

C语言程序设计2

【实践目的】

掌握在C语言程序中调用汇编程序,了解ATPCS基本规则。

【实践内容】

在C程序调用汇编子程序,实现两个整数的加法运算。

汇编子程序的原型为:

unit32Add(unit32x,unit32y)其中,unit32已定义为unsignedint。

【实践设备】

硬件:

PC机一台。

软件:

Windows98/XP/2000系统,ADS1.2集成开发环境。

 

【实践过程】(实践步骤、记录、数据、分析)

1.启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程c2.mcp。

2.建立汇编源文件Startup.S,Add.S和c2.c,编写实验程序,然后添加到工程中。

3.设置工程连接地址ROBase为0x30000000,RWBase为0x30003000,设置调试口地址Imageentrypoint为0x30000000。

4.设置工程连接选项,位于开始位置的起始代码段设置为Startup.o的Start段。

5.编译连接工程,选择Project|Debug,启动AXD进行软件仿真调试。

6.在c1.c文件中的调用Add()的代码处设置断点,然后全速运行程序。

7.程序在断点处停止,使用StepIn单步运行程序,观察程序是否跳转到汇编程序中

Add.s运行。

8.选择ProcessorViews|Variables打开变量观察窗口,观察全局变量的值,单步/全速运行程序,判断程序的运算结果是否正确。

 

【实践程序分析】

 

#defineuint8unsignedchar;定义一个无符号字符常量uint8

#defineuint32unsignedint;定义一个无符号整型常量uint32

externuint32Add(uint32x,uint32y);声明子程序Add为一个无符号整型常量,它为2个无符号整型常量x,y的和

uint32sum;;定义sum为无符号整型常量

voidMain(void);无返回主程序

{sum=Add(555,168);;sum等于555+168

while

(1);;为真循环

}

 

EXPORTAdd;声明子程序Add方便调用

AREAStart,CODE,READONLY;声明代码段start,为只读

ENTRY;程序入口

CODE32;声明32位ARM指令

AddADDR0,R0,R1;将R0+R1值赋给R0

MOVPC,LR;将LR值赋给PC

END;汇编结束

 

【实践小结】

通过本实践,我掌握了在C语言程序中如何调用汇编程序,了解了ATPCS的基本规则。

 

ARM实践5:

无仿真器下载运行

【实践目的】

1.熟悉ADS软件的基本配置;

2.通过实验掌握无仿真器时程序下载及运行的方法。

 

【实践内容】

1.学习如何在ADS集成开发环境中编译生成二进制(BIN)文件;

2.掌握如何利用超级终端在无仿真器的情况下进行程序的下载及运行。

 

【实践设备】

1.ARM2410嵌入式开发板;

2.软件:

PC机操作系统Win98、Win2000或WinXP,ADS1.2集成开发环境,超级

终端通讯程序。

 

【实践过程】(实践步骤、记录、数据、分析)

1.打开项目“LEDARY”,单击DebugrelSetting按钮。

2.在DebugrelSettings中包括6个面板,这里我们选择如下面板设置相关的生成选项。

(1)设置生成目标的基本选项(TargetSettings);

(2)连接器的选项设置(Linker)在TargetSettingsPanels列表中选择Linker选项,再在其下选择ARMLinker,即可得到连接器的选项设置对话框;

(3)在TargetSettingsPanels列表中选择Linker选项,再在其下选择ARMfromELF,即可得到连接器的选项设置对话框。

这里outputformat选择Plainbinary,Outputfilename输入相应的路径即文件名:

D:

\ProgramFiles\ARM\ADSv1_2\Examples\LEDARY\2410LEDARY.bin。

修改完一项设置的时候,需要按一下APPLY,这样在下面显示栏里面看到更新过的设置。

至此已经完成了DebugRelSettings的所有设置,点击OK保存。

3.点击Make按钮,即可在所设置的文件夹下面得到2410LEDARY.bin文件。

如果有

ERROR提示2410init.o的路径不正确,可以在PROJECT选项里面单击RemoveObjectCode…。

还可以修改代码,以显示不同的灯闪效果,保持其他设置不变,单击Make

重新生成.bin文件,注意.bin文件的路径。

至此,我们已经详细介绍了如何编译得到可以下载到开发板上RAM并且运行的BIN文件。

4.连接好实验箱电源,并将计算机的串口接到开发板的UART0上,将SW1拨至R,

SW4拨至LEFT。

5.运行超级终端,选择正确的串口号,并将串口设置为:

波特率(115200)、奇偶校

验(None)、数据位数(8)和停止位

(1),无流控,打开串口。

6.启动实验箱,在超级终端出现“按ENTER键进入BIOS...2”提示,按照提示按ENTER进入BIOS,选择――“下载文件到RAM运行”这一项,键入回车,提示输

入下载地址,直接按回车以使用默认地址(ROBase)[0x31000000],按回车,出现提示“请使用超级终端(XMODEM)发送文件。

开始下载...”。

7.点击超级终端的“传送”菜单,在下拉菜单中选择“发送文件”,选择我们刚刚编

译好的2410LEDARY.bin进行发送,其中传输协议选择1KXmodem。

8.当出现是否运行下载的程序的提示时,敲入Y键,即可看到开发板上8×8发光二极管跑马灯。

 

【实践程序分析】

voidMain(void)

{inti;

Port_Init();//初始化I/O

while

(1)

{Led_Display(0x0f);//灯亮

for(i=0;i<0xfffff;i++);//延迟

Led_Display(0x00);//灯灭

for(i=0;i<0xfffff;i++);//延迟

}

}

 

【实践小结】

通过本实践,我熟悉了ADS软件的基本配置,掌握了无仿真器时程序下载及运行的方法。

 

【实践总结】

在这次工程实践中,我学会了关于ARM的许多知识。

与同学的配合下,我们实现了许多在原有程序上的变化,在学习中得到了乐趣。

同时我们要感谢老师与学校给我们这次实践的机会,这在我们以后的学习和生活中的用处是无穷的。

最后,感谢同学们在这几天当中对我的帮助及老师对我耐心的辅导,让我再这次工程实训中受益匪浅

 

指导教师评语及成绩:

评语:

 

实践目的是否明确:

明确□基本明确□一般□较差□

实践原理阐述是否准确:

准确□基本准确□一般□较差□

实践方案设计是否合理:

合理□基本合理□一般□较差□

实践过程记录是否详细:

详细□较详细□一般□较差□

小结内容是否充实:

充实□较充实□一般□较差□

 

成绩:

优□良□中□及格□不及格□

教师签字:

批阅日期:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1