第一篇:川大电气学院自动化嵌入式实验报告
嵌入式系统实验报告
嵌入式实验报告
嵌入式实验报告
一、实验名称:汇编指令实验以及程序下载运行实验
二、实验器材:ARM2410嵌入式开发板。
PC机操作系统Win98、Win2000、WinXP。
AD1.2集成开发环境。超级终端通讯程序。
三、实验目的:
1.了解ARM2410基本原理并且掌握基本的程序运行下载技巧 2.熟悉ADS1.2 软件开发环境;
3.掌握ARM920T 汇编指令的用法,并能编写简单的汇编程序; 4.掌握指令的条件执行和使用LDR/STR 指令完成存储器的访问。
四、实验内容:
1、汇编语言实验: 实验步骤:
① 启动ADS1.2,使用ARM Executable Image工程模板建立一个工程arm.mcp ② 建立汇编源文件arm1.s,编写实验程序,然后添加到工程中。③ 设置工程连接地址RO Base为0x3000000,RW Base为0x30003000,设置options中的调试地址 Image entry point 为0x30000000。④ 编译连接工程,选择Project-Debug,启动AXD进行软件仿真调试。⑤ 打开寄存器串口,选择Current监视R0,R1的值。打开存储器观察窗口,设置观察地址为0x30003100,显示方式Size为32Bit,监视0x30003100地址上的值。实验程序:
① 观察寄存器和0x30003100地址上值的变化
第1页
嵌入式实验报告
COUNT EQU 0x30003100
AREA Example1,CODE,READONLY
ENTRY
CODE32 START LDR R1,=COUNT
MOV R0,#0
STR R0,[R1] LOOP LDR R1,=COUNT
LDR R0,[R1]
ADD R0,R0,#1
CMP R0,#10
MOVHS R0,#0
STR R0,[R1]
B LOOP
END ② n个X相乘 X EQU 9 N EQU 8
ARAE EXAMPLE3 CODE, READONLY
ENTRY
CODE32 START LDR SP,=0x30003F00
第2页
嵌入式实验报告
LDR R0,=X
LDR R1,=N
BL POW HALT B HALT POW
STMFD SP!,{R1-R2,LR}
MOVS R2,R1
MOVEQ R0,#1
BEQ POW_END
MOV R1,R0
SUB R2,R2,#1 POW_L1 BL DO_MUL
SUBS R2,R2,#1
BNE POW_L1 POW_END LDMFD SP!,{R1-R12,PC} DO_MUL MUL R0,R1,R0
MOV PC,LR
END
第3页
嵌入式实验报告
③ 计算1+2+3+…+(N-1)+N 的值(N>0)IMPORT |Image$$RO$$Limit| IMPORT |Image$$RW$$Base| IMPORT |Image$$ZI$$Base| IMPORT |Image$$ZI$$Limit| IMPORT Main AREA Start,CODE,READONLY ENTRY
第4页
嵌入式实验报告
CODE32 Reset LDR SP,=0x40003f00 LDR R0,=|Image$$RO$$Limit| LDR R1,=|Image$$RW$$Base| LDR R3,=|Image$$ZI$$Base| CMP R0,R1 BEQ LOOP1 LOOP0 CMP R1,R3 LDRCC R2,[R0],#4 STRCC R2,[R1],#4 BCC LOOP0 LOOP1 LDR R1,=|Image$$ZI$$Limit| MOV R2,#0 LOOP2 CMP R3,R1 STRCC R2,[R3],#4 BCC LOOP2 B Main END 实验截图:
第5页
嵌入式实验报告
第6页
嵌入式实验报告
2、程序下载运行实验 实验步骤:
① 接好试验箱电源,并将计算机的串口接到开发板上。② 运行超级终端,选择正确的串口号。
③ 开起试验箱,在超级终端出现“按ENTER键进入BIOS… 2”提示 ④ 按照提示按ENTER进入BIOS,选择--“下载文件到ARM运行”这一项,键入回车,出现提示“请使用超级终端发送文件。
⑤ 点击超级终端的“传送”菜单,在下拉菜单中选择“发送文件”,选择编译好的文件进行发送。
⑥ 当出现是否运行下载的程度的提示时,键入Y。
第7页
嵌入式实验报告
用ADS1.2集成开发环境对程序进行编译可生成.bin文件,先生成文本文件,再通过编码转换工具转化成bin文件。
五、I/O 接口实验 实验步骤:
1.参照模板,新建一个工程GPIO.mcp,添加相应的文件,并修改GPIO的工程设置;
2.创建Main.c 文件,并加入到工程文件GPIO.mcp中; 3.为Main.c 文件的主任务maintask 添加如下的语句:
#define GPIOLED_MARK(Led)(rGPBDAT =(rGPBDAT & ~0x1e0)|(~(Led & 0x1e0)))void APP_vMain(void){ CONSOL_Printf(“n [GPIOLED 实验]n”);
while(1){ GPIOLED_MARK(GPIOLED0);// 灯亮 DelayLoop(2500);//延迟250ms GPIOLED_MARK(GPIOLED1);DelayLoop(2500);GPIOLED_MARK(GPIOLED2);DelayLoop(2500);GPIOLED_MARK(GPIOLED3);DelayLoop(2500);}
第8页
嵌入式实验报告
4.编译GPIO工程;
5.下载程序并运行,观察结果。
6.注意接上仿真器,并保持 S1至右侧,程序从线性 Flash启动。本指导书附带的光
盘里面的Sample 目录下的程序可以直接运行,打开相应的.mcp 文件,在Targets 中选择
DebugRel即可。读者也可以修改程序,以观察不同的实验效果,这里要选择 Debug,调用 AXD来调试,并注意Debug 中的设置(可以参考Samples的程序中DebugRel下的相应设置)。
直接Copy其中的程序修改并Debug,有可能出现Error提示错误,这时可以重新建立工程,加入.c 等文件,或者在 PROJECT 选项里面单击 Remove Object Code„,再重新
Debug/DebugRel。
五、心得体会:
在嵌入式的学习过程中让我了解了什么是嵌入式系统。它就是以应用为中心以计算机技术为基础软硬件可定制适用于不同应用场合对功能、可靠性、成本、体积、功耗有严格要求的计算机系统。他一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统、用户应用程序四个部分组成用于实现对其他设备的控制、监视或管理功能。嵌入式系统已经应用于科学研究、工业控制、军事技术、交通通信、医疗卫生、消费娱乐等领域人们日常使用的手机、PDA、汽车、智能家电、GPS等均是嵌入式系统的典型代表。
学期开始,我开始学习《嵌入式系统》,由于初次接触嵌入式系统,感觉蛮难的,所以收获不是很大,慢慢自己通过查资料等了解到了嵌入式的一些基本知识及应用领域。嵌入式系统是以应用为中心,以微电子技术、控制技术、计算机技术和通讯技术为基础,强调软硬件的协同性、整合性和可剪裁性,并能满足目标应用对功能、可靠性、成本、体积、功耗等方面有严格要求的一种专用计算机系统。嵌入式微处理器对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核的执行时间减少到最低限度。具有功能很强的临界存储区保护功能。这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保
第9页
嵌入式实验报告
护功能,同时也有利于软件诊断。可扩展的处理器结构,以便能迅速地开发出满足各种应用需求的高性能嵌入式微处理器。嵌入式微处理器内部通常包含专用调试电路,外部有JTAG边界扫描接口供调试下载使用。
在了解了基础知识之后,开始进行上机操作,当然,其中遇到很多的难题,很多东西都是第一次接触,完全要凭借自己去摸索练习。其中的困难可想而知。然而坚持就是胜利,牙一咬眼一闭坚持做下去,而通过本次实验,我感觉收获还是蛮多的。通过实验和理论课的学习,让我进一步地加深了对嵌入式系统的认识,对其软硬件的特点都有了一定的了解。了解了ARM微处理器在工业控制领域、无线通讯领域、网络应用、消费类电子产品、成像和安全产品等领域的应用。通过实验也让我对自己提出了新的要求,在拥有基本知识的情况下,对嵌入式系统进行更加深入的学习和研究。
第10页
第二篇:嵌入式实验报告
实验一 ARM汇编语言程序设计
一、实验目的
1.了解IAR Embedded Workbench 集成开发环境 2.掌握ARM汇编指令程序的设计及调试
二、实验设备
1.PC操作系统WIN98或WIN2000或WINXP,ADSI.2集成开发环境,仿真驱动程序
三、实验内容
1.熟悉IAR Embedded Workbench 集成开发环境
2.理解下列程序,新建工程,加入下面的程序,并观察实验结果,解释程序实现的功能
分析:该程序实现的功能是程序功能:Y = A*B+C*D+E*F 程序代码:
AREA Examl, CODE,READONLY;定义一个代码段 ENTRY
;程序入口
MOV R0,#0;设置R0寄存器的值为0 MOV R8,#0;设置R8寄存器的值为0 ADR R2,N;将R2寄存器的值设为数据域N的地址 LDR R1,[R2];将以R2的值为地址的数据读入R1 MOV R2,#0;设置R2的值为0 ADR R3,C;将R3寄存器的值设为数据域C的地址 ADR R5,X;将R5寄存器的值设为数据域X的地址 LOOP LDR R4,[R3,R8];将R3+R8的数据读入R4 LDR R6,[R5,R8];将R5+R8的数据读入R6 MUL R9,R4,R6;R9 = R4*R6 ADD R2,R2,R9;R2 = R2+R9 ADD R8,R8,#4;R8 = R8+4 ADD R0,R0,#1;R0 = R0+1 CMP R0,R1;比较R0和R1的值 BLT LOOP;R0 执行结果如下: 3.实现1+2+3+4+····+100,求的值,并保存在地址0x90018的地址里面 程序代码: MOV R0,#100;设置R0寄存器的值为100 LDR R2,=0X90018;设置R2寄存器指向地址0x90018 MOV R1,#0;设置R1的值为0 MOV R3,#0;设置R3的值为0 LOOP ADD R3,R3,R0;R3 = R3+R0 SUB R0,R0,#1;R0 = R0-1 CMP R0,R1;将R0和R1的值比较 BNE LOOP;不相等的话继续执行循环 STR R3,[R2];将R3的值装入到R2指向的地址块中。END 程序执行结果:程序执行完在0x90018内存入的数据是0x13ba即5050 实验二 ARM汇编语言程序设计 一、实验目的 1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程; 2.掌握ARM汇编指令中的堆栈指令的操作,以及存储器的装载指令操作。 二、实验设备 1.PC操作系统WIN98或WIN2000或WINXP,ADS1.2.集成开发环境,仿真器驱动程序。 三、实验内容 1.理解下列程序,新建工程,加入下面的程序,并观察实验结果 程序代码: x EQU 15;定义常量x=15 y EQU 61;定义常量y=61 stack_top EQU 0X1000;定义堆栈栈顶地址为0x1000 ENTRY;程序入口处 MOV sp,#stack_top;将堆栈指针指向栈顶 MOV r0,#x;将x的值放入r0 STR r0,[sp];将r0的值压入堆栈 MOV r0,#y;将y的值放入r0 LDR r1,[sp];将x的值放入r1 ADD r0,r0,r1;r0 = r0+r1 STR r0,[sp];将r0的值装入堆栈 Stop;B stop;程序结果为:r1 = x+y = 0x6D 2.编写程序循环R4~R11进行累加8次赋值,R4~R11初始值是1~8,每次操作后把R4~R11的内容放到SP栈中,SP初始设置为0x800,最后把R4~R11用LDMFD指令清空为0 程序代码如下: X EQU 1;定义常量x = 1 stack_top EQU 0X800;定义栈顶地址 ENTRY;MOV SP,#stack_top;将栈顶地址指向0x800 MOV R4,#1;设置R4 = 1 MOV R5,#2;设置R5 = 2 MOV R6,#3;设置R6 = 3 MOV R7,#4;设置R7 = 4 MOV R8,#5;设置R8 = 5 MOV R9,#6;设置R9 = 6 MOV R10,#7;设置R10 = 7 MOV R11,#8;设置R11 = 8 LOOP ADD R4,R4,#x;R4累加1 ADD R5,R5,#x;R5累加1 ADD R6,R6,#x;R6累加1 ADD R7,R7,#x;R7累加1 ADD R8,R8,#x;R8累加1 ADD R9,R9,#x;R9累加1 ADD R10,R10,#x;R10累加1 ADD R11,R11,#x;R11累加1 STMIA SP!,{R4-R11};将R4-R11的值压入堆栈 CMP R4,#9;比较R4和9的大小 BLT LOOP;R4 < 9继续执行循环 LDMFD SP!,{R4-R11};将R4-R11清零 END;实验结果:主要实现将数据2-9,3-10,4-11……9-16压入堆栈(初始地址是0x800处开始),最后将R4-R11全部清零。 3.更改实验中1中的X,Y的值,观察期结果 程序代码: x EQU 20 y EQU 120 stack_top EQU 0X1000 ENTRY MOV sp,#stack_top MOV r0,#x STR r0,[sp] MOV r0,#y LDR r1,[sp] ADD r0,r0,r1 STR r0,[sp] Stop B Stop END 程序结果为:r0 = x+y = 140 = 0X8C 实验三 ARM汇编语言程序设计 一、实验目的 1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程 2.掌握ARM汇编的存储器加载/存储指令,及if条件、循环、循环及循环的汇编实现 二、实验设备 1.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真器驱动程序 三、实验内容 1.理解下列程序,新建工程,加入下面的程序,并观察实验结果 程序代码: Num EQU 20;定义常量Num = 20 START;LDR r0,=src;将src数据块的开始地址存入r0中 LDR r1,=dst;将dst数据块的开始地址存入r1中 MOV r2,#Num;设置r2的值为20 MOV sp,#0x400;堆栈指针sp指向0x400 blockcopy;MOVS r3,r2,LSR #3;将r2左移3位移入r3并且影响标志位 BEQ copywords;结果为0的话跳转到copywords STMFD SP!,{r4-r11};将r4-r11的值入栈 octcopy;LDMIA r0!,{r4-r11};将src的前8个字数据存入让r4-r11 STMIA r1!,{r4-r11};将r4-r11中的数据放入dst数据块中 SUBS r3,r3,#1;r3 = r3-1 BNE octcopy;结果不为0跳转到octcopy LDMFD SP!,{R4-R11};恢复原来的r4-r11 copywords;ANDS r2,r2,#7;r2 = r2&7 BEQ stop;结果为0跳转到stop wordcopy;LDR r3,[r0],#4;将r0指向的字数据放入r3中,r0 = r0+4 STR r3,[r1],#4;将r3中的数据存入到dst数据块中,r1 = r1+4 SUBS r2,r2,#1;r2 = r2-1 BNE wordcopy;不为0跳转到wordcopy处 stop;B stop;src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4;dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;END;程序结果:将src的数据全部存入到dst中 2.新建工程,并自行编写程序,分别使用LDR,STR,LDMIA,STMIA操作,实现对某段连续存储单元写入数据,并观察结果 程序代码: MOV R4,#1;设置r4 = 1; MOV R5,#2;设置r5 = 1; MOV R6,#3;设置r4 = 1; LDR R0,=dst;R0保存dst的首地址 STR R4,[R0];将r4的值装入r0执行的内存中 STR R5,[R0,#4];将r5的值装入r0+4执行的内存中 STR R6,[R0,#8];将r6的值装入r0+8执行的内存中 LDR R7,=src;R0保存src的首地址 LDMIA R7,{R8-R10};将r7执行的地址的数据读入r8=r10 LDR R3,=N;r3保存N的首地址 STMIA R3!,{R8-R10};将r8-r10装入r3指向的内存 N DCD 0,0,0 src DCD 1,2,3 dst DCD 0,0,0 END 程序结果:熟悉使用LDMIA,STMIA和LDR,STR指令 3.使用ARM汇编指令实现if条件执行,使用ARM汇编指令实现for条件执行,使用ARM汇编指令实现while条件执行,使用ARM汇编指令实现do…while条件执行。程序代码: 实现if条件: MOV R0,#1 MOV R1,#2 CMP R0,R1 BGT LOOP1 BLT LOOP2 LOOP1 MOV R3,R0 LOOP2 MOV R3,R1 END 程序结果: 实现for和while条件: MOV R1,#1 MOV R3,#0 MOV R2,#101;LOOP ADD R3,R1,R3 ADD R1,R1,#1 CMP R1,R2 BLT LOOP END 程序结果: 实现do…while条件: MOV R0,#1 MOV R1,#100 MOV R3,#0 LOOP CMP R0,R1 BGT STOP ADD R3,R0,R3 ADD R0,R0,#1 B LOOP STOP END 程序结果: 实验四 基于ARM的C语言程序设计 一、实验目的 1.了解ARM C语言的基本框架,学会使用ARM的C语言编程。2.掌握C语言和汇编语言编程的相互调用。 二、实验设备 1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆。 三、ARM C语言简介与使用规则 1.ARM使用C语言编程是大势所趋 在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量巨大,并且不宜移植。由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。因此,C语言的在ARM编程中具有重要地位。 2.ARM C语言程序的基本规则 在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。 C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。 在使用C语言时,要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通过ATPCS的规定与C程序相互调用与访问。 ATPCS,就是ARM、Thumb的过程调用标准(ARM/Thumb Procedure Call Standard),它规定了一些子程序间调用的基本规则。如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。 在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。而使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,汇编语言的子程序应满足下面3个条件: ● 在子程序编写时,必须遵守相应的ATPCS规则; ● 堆栈的使用要遵守相应的ATPCS规则; ● 在汇编编译器中使用-atpcs选项。基本的ATPCS规定,请详见相关技术文档。 汇编程序调用C程序 汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。在调用C程序时,要正确设置入口参数,然后使用BL调用。 C程序调用汇编程序 汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。 在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。 在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup44b0/INC目录下都有一个44b.h的头文件,那里面定义了所有关于44B0的硬件寄存器的宏,对宏的读写,就能操作44B0的硬件。 具体的编程规则同标准C语言。 四、实验内容 1、理解下列程序,新建工程,加入下面的程序,并观察实验结果。程序代码: /*实现5个数的相加*/ int sum5(int a,int b,int c,int d,int e){ return(a+b+c+d+e);};汇编语言 IMPORT sum5;声明调用c函数 CALLSUMS STMFD SP!,{LR};将LR寄存器入栈 MOV R0,#1;r0 = 1 ADD R1,R0,R0;r1 = 2 ADD R2,R1,R0;r2 = 3 ADD R3,R1,R2;r3 = 5 STR R3,[SP,#-4]!;将r3的值入栈当做第五个参数 ADD R3,R1,R1;R3 = R3+R1=4 BL sum5;调用sum5 ADD SP,SP,#4;sp = sp+4 LDMFD SP,{PC} 程序结果:实现了i+2i+3i+4i+5i的汇编语言调用c语言 2、用汇编语言实现1到100累加的函数,用C言语编写主程序,在主程序中调用所编写的汇编函数 程序代码: NAME asmfile PUBLIC sum5 SECTION.intvec : CODE(2)CODE32 sum5 ENTRY MOV R1,#1 MOV R2,#0 sum6 ADD R2,R1,R2 ADD R1,R1,#1 CMP R1,R0 BLE sum6 MOV PC,LR END #include 总结 本次实验主要是通过对ARM的各种指令进行操作,通过对这些指令的应用,让我们学会了如何使用汇编来进行编程,掌握汇编编程和C语言编程的技巧,并且能够熟练的使用汇编语言,深刻理解ARM的工作。并且培养了我们写代码的能力以及对代码的阅读能力和修改能力。为我们在以后的学习和生活中更实用ARM,利用汇编进行编程奠定了一定的基础! 计算机专业类课程 实验报告 课程名称:嵌入式微处理器系统及应用 学 院:计算机科学与工程 专 业:计算机科学与技术 学生姓名:廖雪平学 号:2011060120003 指导教师:陈丽蓉 日 期:2014年5月15日 电子科技大学计算机学院实验中心 电 子 科 技 大 学 实 验 报 告 实验一 实验名称:熟悉嵌入式系统软件开发工具与环境 一、实验学时:4 二、实验内容和目的: AR熟悉嵌入式系统软件开发工具与环境 M处理器指令编程基础实验 ARM处理器工作模式实验 ARM处理器异常处理实验 编写2段汇编程序,一段实现数据区的拷贝,另一段实现对第一个程序的调用,完成参数传递和返回值的传递。数据拷贝程序需要判断传递参数的正确性:源数据区和目的数据区不能重叠,如果重叠则不进行拷贝操作,并返回错误码(1),否则进行数据拷贝并返回成功码(0)。 三、实验原理: M处理器指令编程基础。 ARM处理器工作模式 ARM处理器异常处理 四、实验器材(设备、元器件) Pc机、开发板 五、实验步骤 1、了解并连接开发板。 2、运行程序熟悉环境并对开发板进行测试。 3、编写程序并调试运行 4、完成实验内容。 5、调试并撰写实验报告。 六、实验数据及结果分析: 实验代码: 实验截图: 电子科技大学计算机学院实验中心 七、实验结论、心得体会和改进建议: 实验本身不会很难,但初次开发还是不太熟练,不过本实验让我更加熟练了ARM汇编的开发,以及熟悉了ARM的开发流程以及开发环境 电子科技大学计算机学院实验中心 电 子 科 技 大 学 实 验 报 告 实验二 一、实验名称:UART串口通讯实验 二、实验学时:4 三、实验内容和目的: 1) 在已有串口驱动软件及测试程序的基础上,修改测试程序,尝试对串口的各项通讯参数进行修改,并调整相应的与主机的连接配置,以便修改参数后的串口仍然能够正常通讯; 2)通过查阅芯片手册,尝试自行实现串口的初始化函数,替代已有驱动软件库中的串口初始化函数,并通过测试程序验证自行编写的函数的正确性。 四、实验原理:UART串口通讯原理 五、实验器材(设备、元器件) pc、开发板、相关环境 六、实验步骤: 1、了解实验内容 2、修改测试程序调整连接配置以便修改参数后的串口仍然能够正常通讯 2、编写实验代码 3、测试验证自行编写的函数的正确性。 七、实验数据及结果分析: 实验代码: 电子科技大学计算机学院实验中心 实验截图: 电子科技大学计算机学院实验中心 八、实验结论、心得体会和改进建议: 通过本实验让我对串口程序的编写有初步的了解,已经对软硬件间的衔接更加深刻的理解 北京科技大学 黄强 41050176 嵌入式实验报告 实验一 建立并编译WinCE平台 【实验目的】 掌握PB下WinCE平台的定制 【实验内容】 开始利用Platform Builder定制平台并编译 【实验流程】 1. 将OURS-PXA270-EP实验箱的电源线、串口、网线、同步线、鼠标等全部连接。 2. 由于已经安装好了BSP,我们可以直接打开Platform Builder5.0。3. 新建Platform Builder工程,在建立向导中进行名称、路径、BSP选择、设计模板、可选项目等的设置,完成WinCE平台的建立。 北京科技大学 黄强 41050176 4. 设置编译平台的参数。 5. 构建新建里的WinCE平台的运行时映像。整个过程大约持续20分钟,构建成功后得到操作系统运行时的映像。【实验结果】 见nk.bin 【小结】 通过这个实验,我们初步接触了PXA270EP实验箱,并通过Platform的建立,对Platform Builder有了一个初步了解,同时也对嵌入式开发的过程有了一个初步认识,掌握了PB下WinCE平台的定制。 实验二 定制增强型内核 【实验目的】 1.熟悉Platform Builder集成开发环境以及相关配置 ·使用模板创建新平台 ·添加和删除组件 ·配置和运行平台 2.利用Platform Builder定制一个增强型内核,并下载到内存中。【实验内容】 参照本实验指导书的步骤,定制一个包括Word(支持中文输入法)、图片浏览器、MediaPlayer、支持USB鼠标、键盘,并能通过USB从设备接口进行宿主机与目标版通信的内核。 北京科技大学 黄强 41050176 【实验流程】 1.打开已创建好的PB,在PB右边的Catalog中添加其他组件。这里我们所做的与实验指导书上的不同,为了更好的配合我们的实验,我们所添加的内容有: ·Third Party-BSPs-OURS PXA270-Device Drivers-OEM Devices下所有内容。·Platform Manager ·Third Party-BSPs-OURS PXA270-Device Drivers-USB Host-USB Host Controllers-PXA270x USB Host{OHC} ·Core OS-Windows CE devices-Core OS Services-USB Host Support-USB HID-USB HID Keyboard and Mouse ·Third Party-BSPs-OURS PXA270-Device Drivers-Input Devices-Keyboard/Mouse-OURS270 KEYPAD Driver ·Third Party-BSPs-OURS PXA270-Device Drivers-Networking-LAN devices-OURS270 LAN91C111 Driver 2.选择Build OS|Sysgn开始构建,编译的结果生成了Eboot和NK.bin映像文件。 3.在终端进行配置。打开“超级终端”进行连接端口、波特率、数据流控制等的设置,此时会弹出名为11520的超级终端的窗口。 4.打开实验箱电源,此时窗口里会出现字符,快速按空格键。 5.当完成Eboot配置后,按下D,准备下载内核的映像文件NK.bin到实验箱上。6.再进行PB里面的目标设备的配置。7.对映像文件进行下载。 映像文件传输完成后,Eboot会根据设置,自动烧写到内存中,完成烧写以后,WinCE会自动启动。至此,一个功能较强的内核定制成功了。【实验结果】 略 【小结】 经过这个实验,我熟悉了Platform Builder集成开发环境以及相关配置,虽然刚开始不知道这些配置有什么用,后来在老师的讲解下才渐渐明白,这些配置是为了后续的编程做准备的。 北京科技大学 黄强 41050176 实验三 定制SDK并建立EVC下的开发环境 【实验目的】 熟悉SDK的概念,配置EVC下的开发环境 【实验内容】 生成SDK并安装,配置Embedded Visual C++的开发环境 【实验流程】 1. 在已经建立好的PB中,新建一个SDK文件。2. 按步骤完成SDK的配置 3. 点击Build SDK 这个过程大概要3分钟,在指定目录下生成SDK文件。4. 安装刚生成的SDK,之后即可在此模拟器上运行开发好的应用程序。【实验结果】 北京科技大学 黄强 41050176 见SDK文件 【小结】 SDK的概念其实对我们来说还是相对陌生的,在实验的过程中由于概念不了解我们并不太清晰的知道我们在做什么,直到我们查阅并了SDK的相关概念后才有所收获。SDK实际上是一个开发工具包,我们根据自己的开发需要,针对于自己的PB定制了一个专用开发工具包来便于我们的模拟开发。经过这个实验,我们了解了更多关于软件开发的知识,接触到了许多课堂上所学不到的内容,受益匪浅。 实验五 建立宿主机与实验箱的连接 【实验目的】 学习并掌握利用SMSC91C111网口建立宿主机与实验箱的连接 【实验内容】 利用SMSC91C111网口建立宿主机与实验箱的连接 【实验设备】 1.OURS-PXA270-EP实验仪,烧录有WINCE的Flash,交叉网线,USB数据线。2.PC操作系统,Platform Builder5.0集成开发环境。【实验步骤】 1.在PB的菜单下,点Remote File Viewer击。 北京科技大学 黄强 41050176 2.在弹出的“Windows CE Remote File Viewer”界面中,选择“Configure Connection”按钮,进入下一个画面。 3.选好目标设备,并单击右边的“Properties”按钮。 4.在弹出的对话框“Device Properties”中如下图所示设置,单击“Transport”下拉框右边的“Configure...”按钮。 5.在弹出的对话框“Transport Configuration”中可以设置超时值、端口号、主机IP等。 6.设置完毕后,打开实验箱电源,启动WinCE平台,将宿主机与实验箱网口用交叉线连接号,点击“Text”按钮。 7.点击Text按钮后,出现所示窗口,它的意思是说,在试验箱的命令行中键入“CEMGRC.EXE/S /T:TCPIPC.DLL /Q /D:192.168.0.21:5000”(其中IP地址是自己宿主机的IP地址),完成此项操作后,点击OK。 8.在实验箱的CE系统中,设置IP地址与宿主机地址在同一网段内。具体操作为:在实验箱的CE系统“开始”菜单中点击运行命令,键入命:CEMGRC.EXE/S /T:TCPIPC.DLL /Q /D:192.168.0.21:5000,然后点击OK。如果PC机上再出现运行CEMGRC.EXE/S /T:TCPIPC.DLL /Q /D:192.168.0.21:5000的提示,重复上述步骤,便会出现如下界面,点击Export按钮(黄色按钮),可上传文件。9.如下图所示,可浏览远程文件,并指定上传文件,选中文件后,点击“打开”按钮。 10.成功上传文件,可以在实验设备上看到上传的文件。11.至此,利用SMSC91C111网口建立连接完毕。【实验结果】 实验失败 【小结】 通过这次试验,我们掌握了利用SMSC91C111网口建立宿主机与实验箱的连接的方法,实验中要求IP地址与宿主机地址在同一网段,实验中解决了这个问题,让我们对网络相关的概念也加深了理解。经过多次试验,我们还是无法连通宿主机与实验箱,我认为我们的步骤没有问题,可能是设备有故障。 北京科技大学 黄强 41050176 实验六 USB Device建立宿主机与实验箱的连接 【实验目的】 学习并掌握利用USB Device建立宿主机与实验箱的连接 【实验内容】 利用USB Device建立宿主机与实验箱的连接 【实验设备】 1.OURS-PXA270-EP实验仪,烧录有WINCE的Flash,交叉网线,USB数据线。2.PC操作系统,Platform Builder5.0集成开发环境。【实验步骤】 北京科技大学 黄强 41050176 1.ActiveSync安装 Microsoft ActiveSync允许您使用电缆、底座或红外线在移动设备和桌面计算机之间建立合作关系。建立合作关系后,如果您的设备支持调制解调器或(以太网)卡,就可以使它们同步数据。通过ActiveSync还可以使用现有计算机连接其他资源,也可以使用ActiveSync保持两台计算机上拥有最新信息。 首先在主机端安装ActiveSync程序。该程序安装在D:科大目录下的ActiveSyncsetup.smi。双击该文件开始安装。 2.用USB延长线连接试验箱和PC,当PC发现新设备时安装附带的驱动,安装完成后,打开Microsoft ActiveSync窗口进行连接。 选择“否”然后点击行“下一步”按钮。 3.在“我的电脑”中添加“我的设备”,它对应于目标系统的WINCE文件系统。注意: 如果WINCE运行以前USB线已经连接到PC机的USB插座,可能导致连接不上,此时,请将USB线拔下然后重新插入即可。4.通讯 在上图我的电脑中双击“我的设备”将打开WINCE同步目录,可以和操作WINDOWS其他目录一样操作该目录,包括拷贝文件到该目录或见文件从该目录拷贝到PC机。 文件拷贝成功,可以成功将应用程序下载到试验箱运行,这样我们就完成了宿主机与实验箱的通讯连接。【实验结果】 北京科技大学 黄强 41050176 【小结】 通过实验,我们掌握了利用USB Device建立宿主机与实验箱的连接的具体方法,并且连接成功,与上一个方法比较,该方法简单实用,成功率高,适合我们选用。 实验七 在实验箱的WinCE平台上的Hello World实验 【实验目的】 北京科技大学 黄强 41050176 1.熟悉EVC集成开发环境以及相关配置。2.利用EVC编写WinCE的应用程序。【实验内容】 参照本实验指导书的步骤,一步一步完成实验,编写、编译并运行HelloWorld程序 【实验设备】 1.OURS-PXA270—EP实验仪,交叉网线。 2.PC操作系统,Platform Builder4.2集成开发环境,eMbedded Visual C++集成开发环境。【实验结果】 【小结】 这是我首次接触EVC集成开发环境,感觉有点陌生,但按照实验指导书一步一步做下去之后,我终于对EVC集成开发环境有了初步的了解,收获很大。 实验八 LED数码管驱动 【实验目的】 北京科技大学 黄强 41050176 1.熟悉EVC集成开发环境以及相关配置 2.利用EVC编写一个针对实际硬件的驱动程序 【实验内容】 编写一个针对硬件的驱动程序,硬件是LED 【实验设备】 PC机操作系统,Platform Builder集成开发环境,OURS—PXA270-EP实验箱。 【实验步骤】 1.使用前面实验所制作的内核 2.按照实验指导书上添加窗口及代码 3.测试与调试 【实验结果】 北京科技大学 黄强 41050176 【小结】 经过本次实验,我熟悉了EVC集成开发环境以及相关配置,在EVC中编写了一个程序,通过实验,对开发环境有了更深入地了解,为日后的课程设计打下了坚实的基础。 西安邮电大学 嵌入式处理器及应用实验报告书 学院名称学生姓名专业名称班 级 : : : : 实验一 ADS 1.2 集成开发环境练习 一、实验目的: 了解ADS 1.2 集成开发环境的使用方法。 二、实验内容: 1.建立一个新的工程。 2.建立一个C源文件,并添加到工程中。3.设置文本编辑器支持中文。4.编译链接工程。5.调试工程。 三、实验步骤: 1.启动ADS 1.2 IDE集成开发环境,选择File—New,使用ARM Executable Image工程模板建立一个工程,工程名称为ADS。 2.选择File—New建立一个新的文件TEST1.S,设置直接添加到项目中,输入程序代码。3.由于ADS安装后默认字体是Courier New,对于中文支持不完善,因此建议修改字体。选择Edit—Perferences,在Font选项设置字体为Fixedsys,Script为CHINESE_GB2312。建议在Tab Inserts Spaces前打勾,使Tab键插入的是多个空格。 4.选择Edit—DebugRel Settings,在DebugRel Settings对话框的左边选择ARM Linker项,然后在Output页设置连接地址ROBase 为0x40000000,RW Base 为0x40003000,在Options页设置调试入口地址Image entry point 为 0x40000000。5.选择Project—Make,将编译链接整个工程。 6.选择Project—Debug,或单击快捷键F5,IDE环境就会启动AXD调试软件。 四、程序清单: AREA Example1,CODE,READONLY ;声明代码段Example1 ENTRY ;标识程序入口 CODE32 ;声明32 位ARM 指令 START MOV R0,#15 ;设置参数 MOV R1,#8 ADDS R0,R0,R1 ;R0 = R0 + R1 B START END 五、心得体会: 通过本次实验,我熟悉了ADS 1.2 集成开发环境,学会了怎样建立工程,在工程里面建立文件和进行最基本的运行操作。我感触最深的是每次软件的开始使用是最关键的,想要掌握一个软件的使用必须进行多次的练习,多练几遍自然而然的会熟练的操作。 实验二 存储器访问指令练习实验 一、实验目的: 1.了解ADS 1.2 集成开发环境及ARMulator软件仿真。 2.掌握ARM7TDMI汇编指令的用法,并能编写简单的汇编程序。3.掌握指令的条件执行以及使用LDR/STR指令完成存储器的访问。 二、实验内容: 1.使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10,则使用STR指令把结果回写原地址;若结果大于或等于10,则把0写回原地址。 2.使用ADS 1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(Processor Registers)监视R0和R1的值,打开存储器观察窗口(Memory)监视0x40003100上的值。 三、实验步骤: 1.启动ADS 1.2,使用ARM Executable Image工程模板建立一个工程Instruction2。2.建立汇编源文件TEST2.S,编写实验程序,然后添加到工程中。 3.设置工程链接地址ROBase 为0x40000000,RW Base 为0x40003000。设置调试入口地址Image entry point 为 0x40000000。 4.编译链接工程,选择Project —Debug,启动AXD进行软件仿真调试。 5.打开寄存器窗口(Processor Registers),选择Current 项监视R0和R1的值。打开存储器观察窗口(Memory)设置观察地址为0x40003100,显示方式Size为32Bit,监视0x40003100地址上的值。 四、程序清单: COUNT EQU 0x40003100 ;定义一个变量,地址为0x40003100 AREA Example2,CODE,READONLY;声明代码段Example2 ENTRY ;标识程序入口 CODE32 ;声明32 位ARM 指令 START LDR R1,=COUNT ;R1 <= COUNT MOV R0,#0 ;R0 <= 0 STR R0,[R1] ;[R1] <= R0,即设置COUNT 为0 LOOP LDR R1,=COUNT LDR R0,[R1] ;R0 <= [R1] ADD R0,R0,#1 ;R0 <= R0 + 1 CMP R0,#10 ;R0 与 10 比较,影响条件码标志 MOVHS R0,#0 ;若R0 大于等于 10,则此指令执行,R0 <= 0 STR R0,[R1] ;[R1] <= R0,即保存COUNT B LOOP END 五、心得体会:通过本次实验,让我更深一步的了解了ADS 1.2 集成开发环境及ARMulator软件仿真。通过对程序的解读,我掌握一些汇编指令的写法,同时也提高了我的读程序的能力。本次实验中我遇到了一个问题,在工程里加载文件的时候,没注意文件的后缀应为“。S”,结果造成文件加载失败。 实验三 数据处理指令练习实验 一、实验目的: 1.掌握ARM数据处理指令的使用方法。2.了解ARM指令灵活的第2个操作数。 二、实验内容: 1.使用MOV和MVN指令访问ARM通用寄存器。 2.使用ADD、SUB、AND、ORR、CMP和TST等指令完成数据加减运算及逻辑运算。 三、实验步骤: 1)启动ADS1.2,使用ARM Executable Image 工程模板建立一个工程Instruction3。2)建立汇编源文件TEST3.S ,编写实验程序,然后添加到工程中。 3)设置工程链接地址RO Base为0x40000000,RW Base为0x40003000。设置调试入口地址Image entry point 为 0x40000000。 4)编译链接工程,选择Project —Debug,启动AXD进行软件仿真调试。5)打开寄存器窗口(Processor Registers),选择Current 项监视各寄存器的值。6)单步运行程序,观察寄存器值的变化。 四、程序清单: X EQU ;定义X 的值为11 Y EQU ;定义Y 的值为8 BIT23 EQU (1<<23) ;定义BIT23 的值为0x00800000 AREA Example3,CODE,READONLY ;声明代码段Example3 ENTRY ;标识程序入口 CODE32 ;声明32 位ARM 指令 START ;使用MOV、ADD 指令实现:R8 = R3 = X + Y MOV R0,#X ;R0 <= X,X 的值必须是8 位图数据 MOV R1,#Y ;R1 <= Y,Y 的值必须是8 位图数据 ADD R3,R0,R1 ;即是R3 = X + Y MOV R8,R3 ;R8 <= R3 ;使用MOV、MVN、SUB 指令实现:R5 = 0x5FFFFFF8y; ; break; ; case 7: x = key * y; ; break; ; default: x = 168; SWITCH CASE_0 CASE_2 CASE_3 CASE_5 CASE_7 ; break;;};设x 为R0,y 为R1,key 为R2(x、y、key 均为无符号整数)MOV R1,#3 ;初始化y 的值 MOV R2,#2 ;初始化key 的值 AND R2,R2,#0x0F ;switch(key&0x0F) CMP R2,#0 ;case 0: CMPNE R2,#2 ;case 2: MPNE R2,#3 ;case 3: BNE CASE_5 ADD R0,R2,R1 ; x = key + y B SWITCH_END ; break CMP R2,#5 ;case 5: BNE CASE_7 SUB R0,R2,R1 ; x = key1)*4 SvcStackSpace +(SVC_STACK_LEGTH1)*4 FiqStackSpace +(FIQ_STACK_LEGTH1)*4 UndtStackSpace +(UND_STACK_LEGTH-1)*4 ;分配堆栈空间 AREA MyStacks, DATA, NOINIT, ALIGN=2 UsrStackSpace SPACE USR_STACK_LEGTH * 4 ;用户(系统)模式堆栈空间 SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;管理模式堆栈空间 IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;中断模式堆栈空间 FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;快速中断模式堆栈空间 AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;中止义模式堆栈空间 UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;未定义模式堆栈 END 五、心得体会:通过本次实验,我较好的掌握了如何使用MRS/MSR指令实现ARM微控制器工作模式的切换。较好的了解了在各个工作模式下的寄存器。 实验六 C语言程序实验 一、实验目的: 通过实验了解使用ADS 1.2编写C语言程序,并进行调试。 二、实验内容: 编写一个汇编程序文件和一个C程序文件。汇编程序的功能是初始化堆栈指针和初始化C程序的运行环境,然后跳转到C程序运行,这就是一个简单的启动程序。C程序使用加法运算来计算1+2+3+…+(N-1)+N的值(N为0时,结果为0;N为1时,结果为1)。 三、实验步骤: 1.启动ADS1.2,使用ARM Executable Image 工程模板建立一个工程ProgramC。2.建立汇编源文件Startup.s和Test.c,编写实验程序,然后添加到工程中。 3.设置工程链接地址RO Base为0x40000000,RW Base为0x40003000。设置调试入口地址Image entry point 为 0x40000000。 4.设置位于开始位置的起始代码段:选择Edit—DebugRel Settings,在DebugRel Settings对话框的左边选择ARM Linker项,然后在Layout页设置Object/Symbol为Startup.o,Section为Start。 5.编译链接工程,选择Project—Debug,启动AXD进行软件仿真调试。6.在Startup.s的“B Main”处设置断点,然后全速运行程序。 7.程序在断点处停止。单步运行程序,判断程序是否跳转到C程序中运行。 选择Processor Views—Variables打开变量观察窗口,观察全局变量的值,然后单步/全速运行程序,判断程序的运算结果是否正确。 四、程序清单: #define uint8 unsigned char #define uint32 unsigned int #define N uint32 sum; // 使用加法运算来计算 1+2+3+...+(N-1)+N 的值。(N>0) void Main(void) { uint32 i; sum = 0; for(i=0;i<=N;i++) { sum += i; } while(1); } 程序清单3.9 简单的起动代码 ;起动文件。初始化 C 程序的运行环境,然后进入C 程序代码。 IMPORT |Image$$RO$$Limit| IMPORT |Image$$RW$$Base| IMPORT |Image$$ZI$$Base| IMPORT |Image$$ZI$$Limit| IMPORT Main ;声明C 程序中的Main()函数 AREA Start,CODE,READONLY ;声明代码段Start ENTRY ;标识程序入口 CODE32 ;声明32 位ARM 指令 Reset LDR SP,=0x40003F00 ;初始化C 程序的运行环境 LDR R0,=|Image$$RO$$Limit| LDR R1,=|Image$$RW$$Base| LDR R3,=|Image$$ZI$$Base| CMP R0,R1 BEQ LOOP1 LOOP0 CMP R1,R3 LDRCC R2,[R0],#4 STRCC R2,[R1],#4 BCC LOOP0 LOOP1 LDR R1,=|Image$$ZI$$Limit| MOV R2,#0 LOOP2 CMP R3,R1 STRCC R2,[R3],#4 BCC LOOP2 B Main ;跳转到 C 程序代码Main()函数 END 五、心得体会:通过本次实验,我学会并掌握使用ADS 1.2编写C语言程序,并进行调试。这次实验不同于前几次,必须在一个工程里面同时加载两个文件,分别是“。c”和“.s”文件。第三篇:嵌入式实验报告
第四篇:嵌入式实验报告
第五篇:嵌入式实验报告