嵌入式实验报告_嵌入式综合实验报告

其他范文 时间:2020-02-28 04:43:34 收藏本文下载本文
【www.daodoc.com - 其他范文】

嵌入式实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“嵌入式综合实验报告”。

嵌入式应用系统设计实验报告

2013-12-17 计算机学院软件工程系嵌入式应用系统设计

实验一ARM 汇编指令

一、实验目的初步学会使用Embest IDE for ARM 开发环境及 ARM 软件模拟器。通过实验掌握简单 ARM 汇编指令的使用方法。

二、实验设备

硬件:PC 机。软件:Embest IDE Pro 集成开发环境,Windows 98/2000/NT/XP。

三、实验内容

熟悉开发环境的使用并使用ldr/str,mov等指令访问寄存器或存单元。使用 add/sub/lsl/lsr/and/orr等指令,完成基本数学/逻辑运算。

四、实验步骤

1)新建工程:

运行Embest IDE Pro 2005 集成开发环境,选择菜单项 File → New Workspace,系统弹出一个对话框,按照图 1-1 所示输入相关内容。

点击 OK 按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程。2)建立源文件:

点击菜单项 File → New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件 asm1_a.s。3)添加源文件:

选择 Project → Add To Project → Files 命令,或单击工程管理窗口中的相应右键菜单命令,弹出文件选择对话框,在工程目录下选择刚才建立的源文件 asm1_a.s。4)基本配置:

选择菜单项 Project → Settings„或快捷键 Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择 Proceor 设置对话框,按照图 1-2 所示,进行目标板所用处理器的配置。

计算机学院软件工程系嵌入式应用系统设计

图 1-2 新的工作区处理器配置

5)编译并生成目标代码: 选择菜单项 Build → Build asm_a或快捷键 F7,生成目标代码。6)调试设置:

选择菜单项 Project → Settings„或快捷键 Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择 Remote 设置对话框,按照图 1-4 所示对调试设备模块进行设置我们这里只能实现软件仿真,故选 SimArm7。

图 1-4 新工作区仿真器配置

按照图 1-4 所示对调试设备模块进行设置我们这里只能实现软件仿真,注意: Symbol file 与 Download file 设置应该相同,用户可以从 Linker 页面拷贝系统默认的输出文件配置;且该实验输入下载地址为 0x8000,即为AS 默认的代码段起始地址。由于汇编和链接选项在本实验中没有进行配置,完全使用其默认选项,所以,代码段是从 0x8000 开始的,下载地址应该与它保持一致。

计算机学院软件工程系嵌入式应用系统设计

7)选择 Debug 菜单 Remote Connect 进行连接软件仿真器,执行 Download 命令下载程序,并打开寄存器窗口。打开 memory 窗口,观察地址 0x8000~0x801f 的内容,与地址 0xff0~0xfff 的内容。8)单步执行程序并观察和记录寄存器与 memory 的值变化。9)结合实验内容和相关资料,观察程序运行,通过实验加深理解 ARM 指令的使用。

10)程序运行以及观察结果如下图所示:

上图为单步调试开始时执行结果,内容的地址为: 0x8000

上图是执行到stop之前的调试结果。五.实验总结

初次接触到嵌入式,通过此次实验对嵌入式的内容以及研究的对象有了初始化的理解,这有助于以后对嵌入式的学习。

计算机学院软件工程系嵌入式应用系统设计

实验二 ARM 汇编指令 一实验目的初步学会使用Embest IDE for ARM 开发环境及 ARM 软件模拟器。通过实验掌握简单 ARM 汇编指令的使用方法。二实验设备 硬件:PC 机。

软件:Embest IDE Pro 集成开发环境,Windows 98/2000/NT/XP。三实验内容

熟悉开发环境的使用并使用ldr/str,mov等指令访问寄存器或存储单元。使用 add/sub/lsl/lsr/and/orr等指令,完成基本数学/逻辑运算。

四实验操作步骤

1)在工作区窗口工作区名称上击右键鼠标,在弹出的快捷菜单中选择“Add New Project to Workspace„”。

2)参照实验 A 及相应的实验参考程序,建立工程 asm1_b。3)添加源文件:

选择 Project → Add To Project → Files 命令,或单击工程管理窗口中的相应右键菜单命令,弹出文件选择对话框,在工程目录下选择刚才建立的源文件 asm1_b.s。4)基本配置:

选择菜单项 Project → Settings„或快捷键 Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择 Proceor 设置对话框,按照图 1-7 所示,进行目标板所用处理器的配置。

计算机学院软件工程系嵌入式应用系统设计

5)编译并生成目标代码:

选择菜单项 Build → Build asm_a或快捷键 F7,生成目标代码。6)参照实验A 的步骤完成调试设置。

7)选择 Debug 菜单 Remote Connect 进行连接软件仿真器,执行 Download 命令下载程序,并打开寄存器窗口。打开 memory 窗口.8)程序执行结果及总结:

计算机学院软件工程系嵌入式应用系统设计

初次接触到嵌入式,通过此次实验对嵌入式的内容以及研究的对象有了初始化的理解,这有助于以后对嵌入式的学习。并且本次实验后,明白了嵌入式的开发环境及所用到的开发软件,其次就是对程序的调试与运行,通过实验认真思考其原理知识。本次实验收益匪浅。五实验参考程序

#NAME asm1_b.s # Author: Embest #DesARMinstructionexamples.equ x, 45 /* x=45 */.equ y, 64 /* y=64 */.equ z, 87 /* z=87 */.equstack_top, 0x1000 /* define the top addre for stacks */.global _start.text _start: /* code start */ mov r0, #x /* put x value into R0 */ mov r0, r0, lsl #8 /* R0 = R0

add r2, r0, r1, lsr #1 /* R2 =(R1>>1)+ R0 */ movsp, #0x1000 str r2, [sp] mov r0, #z /* put z value into R0 */ and r0, r0, #0xFF /* get low 8 bit from R0 */ mov r1, #y /* put y value into R1 */ add r2, r0, r1, lsr #1 /* R2 =(R1>>1)+ R0 */ ldr r0, [sp] /* put y value into R1 */ mov r1, #0x01 orr r0, r0, r1 mov r1, R2 /* put y value into R1 */ add r2, r0, r1, lsr #1 /* R2 =(R1>>1)+ R0 */ }}

实验三 C 语言程序实验一

一.实验目的学会使用Embest IDE 编写简单的 C 语言程序并进行调试。学会编写和使用命令脚本文件。

掌握过memory/register/watch/variable 窗口分析判断运行结果。二.实验设备

硬件:PC 机。

软件:Embest IDE Pro 2005 集成开发环境,Windows 98/2000/NT/XP。三.实验内容

利用命令脚本初始化栈指针,并使用 c 语言完成延时函数。四.实验操作步骤

1)参考前面实验创建新的工程(工程名为 C1);

2)按照参考程序,编写源文件 C1.c 和 C1.cs,并把它们加入工程里面。C1.cs 加在工程根目录即可。

计算机学院软件工程系嵌入式应用系统设计

3)参考前面例子进行标准的设置,其中需要注意的是,在调试 Debug 对话框设置的时候,增加连接后自动执行脚本文件:

4)参考前面实验步骤进行编译和连接;

5)下载,打开 Memory/Register/Watch/Variable 窗口,单步执行,通过 memory/register /watch/variable 窗口分析判断结果,在 watch 框中输入要观察变量 I 和变量 J 的值,并记录下来。特别注意在 variable 窗口观察变量 I 的变化并记录下来;

6)结合实验内容和相关资料,观察程序运行,通过实验; 7)理解和掌握实验后,完成实验练习题。五.实验参考程序 1.C1.c 参考源代码:/********************************************************** * File: c1.c * Author: embest * Desc: c language example 1 /*********************************************************/ /* function declare */ void delay(int nTime);/********************************************************** * name: _start * func: entry point **********************************************************/ _start(){ int i = 5;for(;;){ delay(i);} } /********************************************************** * name: delay * func: delay some time * para: nTime--input * ret: none *******************************************************/ void delay(nTime){

int i, j = 0;for(i = 0;i

} 2.C1.cs 参考源代码 stop regwrite sp 0x1000;initialize the sp , sp = 0x1000 实验截图如下:

六、实验总结

在实验中我慢慢地熟悉了EmbestIDE的使用,在老师的教导和指导下,学会了编写和使用简单的命令脚本文件,学会了在memory/register/watch/variable等等中查看变量,分析判断运行结果。

计算机学院软件工程系嵌入式应用系统设计

实验四 C 语言程序实验二

一.实验目的掌握建立基本完整的 ARM 工程,包含启动代码,连接脚本等。了解 ARM9 启动过程,学会使用Embest IDE 编写简单的 C 语言程序和汇编启动代码并进行调试。掌握链接脚本的作用。掌握如何指定代码入口地址与入口点。掌握通过 memory/register/watch/variable 窗口分析判断结果。二.实验设备

硬件:PC 机。

软件:Embest IDE Pro 2005 集成开发环境,Windows 98/2000/NT/XP。三.实验内容

用 c 语言编写延时函数,使用嵌入汇编实验原理 1.ARM 异常向量表

当正常的程序执行流程暂时挂起时,称之为异常,例如:处理一个外部的中断请求。在处理异常之前,必须保存当前的处理器状态,以便从异常程序返回时可以继续执行当前的程序。ARM 异常向量表如下:

表 1-4 ARM 异常向量表

地址异常入口模式 0x00000000 Reset 管理 0x00000004 Undefined Instruction 未定义 0x00000008 Software interrupt 管理0x0000000C Prefetch abort 中止 0x00000010 Data abort 中止 0x00000014 Reserved 保留 0x00000018 IRQ IRQ 0x0000001C FIQ FIQ处理器允许多个异常同时发生,这时,处理器会按照固定的顺序进行处理,参照下面的异常优先级。

高优先级: 1----Reset 2----Data abort 3----FIQ 4----IRQ 5----Prefetch abort 低优先级: 6----Undefined Instruction,Software interrupt 由上可见,Reset 入口,即为整个程序的实际入口点。因此,我们在编写代码的时候,第一条语句是在 0x00000000 处开始执行的。一般地,我们使用下面的代码: #---Setup interrupt / exception vectors B Reset_HandlerUndefined_Handler: B Undefined_HandlerSWI_Handler: B SWI_HandlerPrefetch_Handler: B Prefetch_HandlerAbort_Handler: B Abort_Handler NOP /* Reserved vector */ IRQ_Handler: B IRQ_HandlerFIQ_Handler: B FIQ_HandlerReset_Handler: LDR sp, =0x00002000 2.链接脚本文件

所有的链接都是通过链接脚本来控制实现的。这些链接脚本文件使用链接命令语言编写。链接脚本的主要作用是描述我们编写的文件中这么多个部分应该如何的 计算机学院软件工程系嵌入式应用系统设计

相应摆放在输出文件中,并控制存储区如何定位这些输出文件。同时,如果需要,我们还可以使用链接脚本文件实现其它功能。大部分链接脚本文件都是很简单的。简单的链接脚本只有一行命令:SECTIONS。我们使用 SECTIONS 命令来告诉存储区应该如何摆放我们的输出文件。SECTIONS 命令是一个强大的命令,这里通过一个简单的例子来说明一下。假设程序中包括代码、已经初始化的数据和还没有初始化的数据。这些需要相应的分别摆放在.text.data 和.b部分。针对这个例子,我们可以假设代码必须放在 0x10000,数据必须放在地址 0x8000000 开始的地方。下面是一个描述上面内容的一个简单的链接脚本:

SECTIONS {.= 0x10000;.text : { *(.text)}.= 0x8000000;.data : { *(.data)}.b : { *(.b)}.} 链接脚本文件中全部使用半角符号,文件编写格式必须从 SECTIONS 关键字开始,紧接着是开大括号,接着是所有需要输出的描述部分,后用闭大括号收尾。上面的例子的链接脚本命令第一行使用专门的符号“.”,它指向当前的地址计数器。如果没有在其它地方专门的说明输出部分的地址(有关“其它地方”后面有说明),一般程序都会默认当前的地址计数器。地址计数器会根据输出部分的大小而增加。在 SECTIONS 命令开始,地址计数器一般为 0。第二行定义了一个输出区,.text。其中的“:”号是必须的,但是它经常被忽略。在大括号里面,每个输出部分的名称后面必须把所有需要输入的部分的名字都列出来。“*”号是一个通配符,可以搭配成任何文件名字。*(text)表示在输入文件中所有的.text 输入部分。开始时定义了输出部分.text 的起始地址为 0x10000,链接器会把输出文件中的.text 部分的地址设置为 0x10000。在后面的几行里面,定义了.data 和.b部分。连接器会把.data 输出部分的起始地址设置为 0x8000000。当连接器设置.data 部分后,当前地址计数器会自动指向 0x800000。这样,连接器会紧跟着把.b部分放在.data 部分后面。连接器会增加本地计数器,以确保需要时每个输出部分都有必需的队列。在这个例子里面,为.text和.data 部分指定了特定的地址,这两个部分会确保可以得到队列保证,但是连接器可能会在.dat a 和.b之间创建一个小小的空隙。

3.内嵌汇编语言从下面的示例看得出来,GCC 支持大部分基本的内嵌汇编语言。编译器遇到这个声明的时会在输出流中插入一个汇编语言标记。示例:一个基本的内嵌汇编语言例子 __asm__(“mov r1, r2”);四.实验操作步骤

1.参考前面实验创建新的工程(工程名为:C2)。

2.编写新的源代码文件 c2.c,init.s和脚本文件ldscript,并把它们加入工程中。

3.参考前面例子进行标准的设置。4.参考前面实验步骤进行编译&连接。

计算机学院软件工程系嵌入式应用系统设计

5.下载调试,打开 memory/register/watch/variable 窗口,单步执行,并通过 memory/re gister/watch/variable 窗口分析判断结果。

6.结合实验内容和相关资料,观察程序运行。7.理解和掌握实验后,完成实验练习题。五.实验参考程序 1.c2.c 参考源代码

/******************************************************************* *File: c2.c * Author: embest * Desc: c language example 2 ********************************************************************/ /******************************************************************** * name: _nop_ * func: The following shows c language embededaembel language * para: none * ret: none ********************************************************************/ void _nop_(){ __asm(“ mov r0,r0 ”);} /******************************************************************** * name: delay * func: delay time * para: none * ret: none ********************************************************************/ void delay(void){ inti;for(i = 0;i

* func: c code entry * para: none * ret: none ********************************************************************/ __main(){ inti = 5;for(;;){ delay10();} } 2.init.s 参考源代码:

#******************************************************************** # File:init.s # Author: embest # Desc:C start up codes.Configure memory, #InitializeISR ,stacks,initialize C-variables # Fill zeros into zero-initialized C-variables #******************************************************************** /* global symbol define */.global _start /* code */.text _start: # Set interrupt / exception vectors b Reset_HandlerUndefined_Handler: b Undefined_HandlerSWI_Handler: b SWI_HandlerPrefetch_Handler: b Prefetch_HandlerAbort_Handler: b Abort_Handlernop /* Reserved vector */ IRQ_Handler: b IRQ_Handler FIQ_Handler: b FIQ_HandlerReset_Handler: ldrsp, =0x00002000 # ******************************************************************** # Branch on C code Main function(with interworking).* # Branch must be performed by an interworking call as.* # either an ARM or Thumb.main C function must be.* # supported.This makes the code not position-independent.* # A Branch with link would generate errors * # ***********************************************************************.extern __main ldr r0, = __main movlr, pc # jump to __main()bx r0 # ************************************************************************ # * Loop for ever * 计算机学院软件工程系嵌入式应用系统设计

# * End of application.Normally, never occur.* # * Could jump on Software Reset(B 0x0).* # ************************************************************************End: b End.end 3.ldscript参考源代码:

SECTIONS {.= 0x0;.text : { *(.text)}.data : { *(.data)}.rodata : { *(.rodata)}.b : { *(.b)} } 五.实验截图如下:

六、实验总结:

在实验中我学会了建立基本完整的 ARM 工程,包含启动代码,连接脚本等。了解 ARM9 启动过程,学会简单使用 Embest IDE 编写简单的 C 语言程序和汇编启动代码并进行调 试。明白了一些链接脚本的作用。子解了如何指定代码入口地址与入口点。通过 memory/register/watch/variable 窗口分析判断结果。

计算机学院软件工程系嵌入式应用系统设计

实验五 LED 控制实验

一.实验目的 在 EBDCC2530 节点板上运行自己的程序。 通过 I/O 控制小灯闪烁和蜂鸣器鸣叫。二.实验环境

 硬件:PC 机,EBDCC2530 节点板,USB 接口仿真器。 软件:Windows 98/2000/NT/XP,IAR 集成开发环境。三.实验原理

低电平来控制灯的亮与灭和蜂鸣器的鸣叫。

本实验设置 P1.0、P1.1、P1.4 I/O 引脚来选通 LED1、LED2、LED3,引脚置为低电平点亮 LED,反之熄灭 LED。设置 P0.1 引脚来选通 BEEP,引脚置为低电平蜂鸣器鸣叫,反之蜂鸣器不鸣叫。

P1DIR(P1 方向寄存器):D7 D6 D5 D4 D3 D2 D1 D0 P1.7方向 0:输入 1:输出P1.6方向 0:输入 1:输出 P1.5方向 0:输入 1:输出P1.4方向 0:输入 1:输出 P1.3方向 0:输入 1:输出P1.2方向 0:输入 1:输出 P1.1方向 0:输入 1:输出P1.0方向 0:输入 1:输出

P1.7 功能 0:普通 I/O 1:外设P1.6 功能 0:普通 I/O 1:外设 P1.5 功能 0:普通 I/O 1:外设P1.4 功能 0:普通 I/O 1:外设 P1.3 功能 0:普通 I/O 1:外设P1.2 功能 0:普通 I/O 1:外设 P1.1 功能 0:普通 I/O 1:外设P1.0 功能 0:普通 I/O 1:外设 LDE 灯实现的主要代码为: void main(void){ led_beep_init();halWait(250);while(1){ //开始循环 LED1 = 0;LED1 = 1;//LED1 闪烁halWait(250);halWait(250);LED2 = 0;//LED2 闪烁 halWait(250);LED2 = 1;halWait(250);LED3 = 0;//LED3 闪烁 halWait(250);LED3 = 1;halWait(250);BEEP = 0;//BEEP 鸣叫 halWait(250);BEEP = 1;halWait(250);LED1 = 0;LED2 = 0;LED3 = 0;//LED 灯全亮 halWait(250);halWait(250);LED1 = 1;LED2 = 1;LED3 = 1;//LED 灯全灭

计算机学院软件工程系嵌入式应用系统设计

halWait(250);halWait(250);} } 四.实验步骤

1、正确连接 USB 仿真器的下载线和 EBDCC2530 节点板。

2、打开实验源码LEDs.eww(路径为:出厂光盘 DISK-EMBV210-WSN5-Example2 基本接口实验2.2 LED),编译工程,依次选择“Project”→“Download and Debug”,下载到 CC25303、把仿真器左侧的 USB 接口拔掉,然后拔掉连接在 EBDCC2530 节点板 DBG 位置的调试接

口。我们打开 EBDCC2530 节点板右下方的电源开关,此时可以观察到程序运行的情况。(在不拔掉仿真器的情况下,我们可以通过相关的调试进一步观察 LED 的闪烁情况和蜂鸣器的鸣叫情况。)

4、修改延时函数,可以改变 LED 小灯的闪烁和蜂鸣器鸣叫的时间间隔。

5、重新编译,并下载程序到 EBDCC2530 节点板,观察 LED 的闪烁和蜂鸣器的鸣叫情况。五.实验结果

六、实验总结:

在LED控制实验中,我们通过简单的程序进行I/O控制,从而达到控制LED的闪烁以及峰叫,理解一些简单的汇编知识,理解了一些ARM汇编在I/O控制的原理及其作用。

计算机学院软件工程系嵌入式应用系统设计

实验六看门狗实验

一.实验目的 学习 CC2530 片内看门狗的工作原理。 配置 CC2530 的看门狗相关的寄存器。二.实验环境

 硬件:PC 机,EBDCC2530 节点板,USB 接口仿真器。 软件:Windows98/2000/NT/XP,IAR 集成开发环境。三.实验原理

看门狗(WatchDog),准确的说应该是看门狗定时器,则正是专门用来监测单片机程序运行状态的电路结构。其基本原理是:启动看门狗定时器后,它就会从 0 开始计数,若程序在规定的时间间隔内没有及时对其清零,看门狗定时器就会复位系统(相当于重启电脑)。

看门狗的使用可以总结为:选择模式→选择定时器间隔→放狗→喂狗。(1)选择模式

看门狗定时器有两种模式,即“看门狗模式”和“定时器”模式。

在定时器模式下,它就相当于普通的定时器,达到定时间隔会产生中断(你可以在 ioCC2530.h文件中找到其中断向量为 WDT_VECTOR);在看门狗模式下,当达到定时间隔时,不会产生中断,取而代之的是向系统发送一个复位信号。本实验中,通过 WDCTL.MODE=0 来选择为看门口模式。(2)选择定时间隔

如上图所示,有四种可供选择的时钟周期,为了测试方便,我们选择时间间隔为 1s(即WDCTL.INT=00)。(3)放狗

令 WDCTL.EN=1,即可启动看门狗定时器。(4)喂狗

定时器启动之后,就会从 0 开始计数。在其计数值达到 32768 之前(即

计算机学院软件工程系嵌入式应用系统设计

1、正确连接 USB 仿真器的下载线和 EBDCC2530 节点板。

2、打开实验源码watchdog.eww(路径为:出厂光盘 DISK-EMBV210-WSN5-Example2 基

本接口实验2.8 Watchdog),编译工程,依次选择“Project”→“Download and Debug”,下载到CC2530 节点板。

3、把仿真器左侧的 USB 接口拔掉,然后拔掉连接在 EBDCC2530 节点板 DBG 位置的调试接口。我们打开 EBDCC2530 节点板右下方的电源开关,此时可以观察到程序运行的情况。(在不拔掉仿真器的情况下,我们可以通过相关的调试进一步观察程序的运行情况。)

4、默认加上FeedDog函数,编译、下载、运行代码后,我们发现 LED1 一直亮着(系统不复位)。

5、若注释掉FeedDog函数,编译、下载、运行代码后,我们发现 LED1 以 1s 的间隔闪烁(系统每隔 1s 复位一次)。

五、实验结果

计算机学院软件工程系嵌入式应用系统设计

六、实验总结

通过这次实验我进一步了解了看门狗的工作原理和功能,以及看门狗寄存器定时周期的计算方法。在实验过程中遇到了很多的问题,例如,无法连接到超级终端、运行设备忘记设置为ARM7Simple、USB驱动无法正确装载等等。最终在同学的帮助下和老师的指导下,完成了实验,并且老师也向我们讲述了一些代码中我们不知道的知识,解决了我们的疑惑。

下载嵌入式实验报告word格式文档
下载嵌入式实验报告.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文