嵌入式系统与应用实验报告.docx

上传人:b****5 文档编号:12598511 上传时间:2023-04-20 格式:DOCX 页数:47 大小:744.04KB
下载 相关 举报
嵌入式系统与应用实验报告.docx_第1页
第1页 / 共47页
嵌入式系统与应用实验报告.docx_第2页
第2页 / 共47页
嵌入式系统与应用实验报告.docx_第3页
第3页 / 共47页
嵌入式系统与应用实验报告.docx_第4页
第4页 / 共47页
嵌入式系统与应用实验报告.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

嵌入式系统与应用实验报告.docx

《嵌入式系统与应用实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式系统与应用实验报告.docx(47页珍藏版)》请在冰豆网上搜索。

嵌入式系统与应用实验报告.docx

嵌入式系统与应用实验报告

班级:

网络111

姓名:

石长江

学号:

3

 

实验一汇编指令试验

一、实验目的

􀀀掌握ARM7TMDI汇编指令的用法,并能编写简单的汇编程序;

􀀀学习ARM微控制器的16位Thumb汇编指令的使用方法

􀀀掌握指令的条件执行

二、实验设备

􀀀硬件:

嵌入式实验平台一套、仿真器一个、PC机一台。

􀀀软件:

Windows98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。

三、实验内容

分别使用ARM、Thumb指令ADD,MOV,CMP,B计算1+2+3+…+N的值。

四、实验原理

ARM处理器共有两种工作状态:

􀀀ARM32位,这种状态下执行字对准的ARM指令。

􀀀Thumb16位,这种状态下执行半字对准的Thumb指令。

注意:

ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容。

ARM处理器在两种工作状态之间可以切换。

(1)进入Thumb状态。

当操作数寄存器的状态位0为1时,执行BX指令进入Thumb状

态。

如果处理器在Thumb状态进入异常,则当从异常出来(IRQ、FIQ、Undef、Abort、SWI)

返回时,自动切换到Thumb状态。

(2)进入ARM状态。

当操作数寄存器的状态位0为0时,执行BX指令进入ARM状态。

理器进行异常处理(IRQ、FIQ、Undef、Abort、SWI)。

在此情况下,把PC放入异常模

式链接寄存器中。

从异常向量地址开始执行也可以进入ARM状态。

Thumb状态下的寄存器集是ARM状态下寄存器集的子集。

程序员可以直接访问8个通用

寄存器(R0-R7)、PC、SP、LR和CPSP。

每一种特权模式都有一组SP、LR和SPSR。

􀀀Thumb状态的R0-R7与ARM状态的R0-R7一致。

􀀀Thumb状态的CPSR和SPSR与ARM状态下的CPSR和SPSR一致。

􀀀Thumb状态的SP映射到ARM状态的R13。

􀀀Thumb状态的LR映射到ARM状态的R14。

􀀀Thumb状态的PC映射到ARM状态的PC(R15)。

本程序使用R0保存结果,所以一开始就要初始化为0;循环执行R0=R0+R1,R1为循环计

数器,从1开始计数,每一次循环R1加1;当循环计数器R1的值到达N时,运算结束。

五、实验操作步骤

1.启动ADS1.2,使用ARMExecuatableImage工程模板建立一个工程ASM_Project。

2.建立源文件test2.s,编写实验程序,然后添加到工程中(ARM指令和Thumb指令实验

的test2.s程序源码分别见下清单)。

3.设置工程链接地址ROBase为0x0C

4.编译链接工程,选择【Project】->【Debug】,启动AXD进行调试。

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

6.单步运行程序,注意执行BXR0指令前后CPSR寄存器的T位。

说明:

在寄存器窗口的CPSR寄存器,大写字母的位表示该位为1,小写字母的位表示该

位为0(比如“T”表示T位为1,“t”表示T位为0)。

7.理解并掌握本实验原理及程序,完成练习题

六、实验参考程序

Thumb汇编指令实验的参考程序代码清单

;文件名:

test.s

;功能:

计算1+2+3+…+N的值

NEQU50定义N的值为50

AREAtestcode,CODE,READONLY区域名为testcode,代码,只读

ENTRY入口

CODE32

ARM_CODELDRSP,=0x40003F00sp=0x40003F00

ADRR0,THUMB_CODE+1将分支目标地址送R0,使R1的bit[0]=1

BXR0分支并且转换为thumb状态

LTORG

CODE16汇编以下代码为thumb指令

THUMB_CODE

LDRR0,=N伪指令R0=50

BLSUM_N跳转到SUM_N执行

BTHUMB_CODE跳转到THUMB_CODE,thumb模式

;名称:

SUM_N

;功能:

计算1+2+3+…+N的值

;入口参数:

R0(N的值)

;出口参数:

R0(运算结果)

SUM_N

PUSH{R1-R7,LR}

MOVSR2,R0R0的内容放入R2

BEQSUM_END相等转到SUM_END

CMPR2,#1R2与1比较,设置标志位

BEQSUM_END相等转到SUM_END

MOVR1,#1将1送入R1

MOVR0,#0将0送入R0

SUM_L1ADDR0,R1R0=R0+R1

BCSSUM_ERR

CMPR1,R2R1与R2比较,设置标志位

BHSSUM_END

ADDR1,#1R0=R0+1

BSUM_L1转到SUM_L1

SUM_ERRMOVR0,#0__将0送入R0

SUM_ENDPOP{R1-R7,PC}

END

ARM汇编指令实验的参考程序代码清单:

;文件名:

add.s

;功能:

计算1+2+3+…+N的值

NEQU5;定义N的内容为5

AREAExample,CODE,READONLY定义区域,区域名为Example,代码,只读

ENTRY入口

CODE32

START

LDRR0,=NR0=5

MOVR2,R0R2=R0

MOVR0,#0R0=0

MOVR1,#0R1=0

LOOP

CMPR1,R2比较R1与R2

BHIADD_END

ADDR0,R0,R1R0=R0+R1

ADDR1,R1,#1R1=R1+1

BLOOP转到loop

ADD_END

BSTART转到start

END

 

实验二ARM微处理器工作模式实验

一、实验目的

通过实验掌握学会使用MSR/MRS指令实现ARM处理器工作模式的切换,观察

不同模式下的寄存器,加深对CPU结构的理解。

二、实验设备

硬件:

嵌入式实验平台一套、仿真器一个、PC机一台。

软件:

Windows98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。

三、实验内容

通过ARM汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握

ARM不同模式的进入与退出。

四、实验原理

1.ARM处理器模式

ARM体系结构支持表1-所示的7种处理器模式。

处理器模式说明

用户usr正常程序执行模式

FIQfiq支持告诉数据传送或通道处

IRQirq用于通用中断处理

管理svc操作系统保护模式

中止abt实现虚拟存储器和/或存储器

保护

未定义und支持硬件协处理器的软件仿

系统sys运行特权操作系统任务

表1-处理器模式

在软件控制下也可以改变模式,外部中断或异常处理也可以引起模式发生改变。

大多数

应用程序在用户模式下执行。

当处理器工作在用户模式时,正在执行的程序不能访问某些被

保护的系统资源,也不能改变模式,除非异常发生。

这允许适当编写操作系统来控制系统资

源的使用。

除用户模式外的其他模式成为特权模式。

它们可以自由地访问系统资源和改变模

式。

其中5种称为异常模式,即:

FIQ(FastInterruptRequest);

IRQ(InterruptRequest);

管理(Supervisor);

中止(Abort);

未定义(Undefined)

当特定的异常出现时,进入相应的模式。

每种模式都有某些附加的寄存器,以避免异常

出现时用户模式的状态不可靠。

剩下的模式是系统模式。

仅ARM体系结构V4以及以上的

版本有该模式。

不能由于任何异常而进入该模式。

它与用户模式有相同的寄存器,但它是特

权模式,不受用户模式的限制。

它供需要访问系统资源的操作系统任务使用,但希望避免使

用与异常模式有关的附加寄存器。

避免使用附加寄存器保证了当任何异常出现时,都不会使

任务的状态不可靠。

2.程序状态寄存器

在所有处理模式下,都可以访问当前程序状态寄存器CPSR。

CPSR包含条件码标志、中断

禁止位、当前处理器模式以及其他状态和控制信息。

每种异常模式都有一个程序状态保

存寄存器SPSR。

当异常出现时,SPSR用于保存CPSR的状态。

CPSR和SPSR的格式如下:

(1)条件码标志

N、Z、C、V:

大多数指令可以检测这些条码标志,以决定程序指令如何执行。

(2)控制位

最低8位I、F、T和M位用作控制位。

当异常出现时改变控制位。

当处理器在特权模式

下时也可以由软件改变。

l中断禁止位:

I置1则禁止IRQ中断;F置1则禁止FIQ中断。

lT位:

T=0指示ARM执行;T=1指示Thumb执行。

在这些体系结构的系统中,可自由

地使用能在ARM和Thumb状态之间切换的指令。

l模式位:

M0、M1、M2、M3和M4(M[4:

0])是模式位。

这些位决定处理器的工作模

(3)其他位

程序状态寄存器的其他位保留,用作以后扩展。

五、实验操作步骤

1.启动ADS1.2,建立一个新的工程;

2.建立汇编源程序文件TEST3.S,编写实验程序,添加到工程中;

3.编译链接工程,点击Debug按钮,启动AXD进行调试;

4.点击【ProcessorViews】->【Registers】,打开Current项监视个寄存器的值;

5.单步运行程序,注意观察CPSR、SPSR以及R0寄存器值得变化。

说明:

CPSR寄存器显示方式如图1-所示。

显示分为两部分,一部分是各个标志位,另

一部分是工作模式。

标志位NZCVQ为条件码标志N、Z、C、V、Q,显示为大写字母,表示该

位为1;显示为小写字母,表示该位为0。

Q标志在ARM体系结构v5及以上版本的E变量中

才有效。

标志位IFT为IRQ中断禁止位I、FIQ中断禁止位F、ARM微控制器状态位T,显示

为大写字母,表示该位为1;显示为小写字母,表示该位为0。

T标志在ARM体系结构v4及

以上版本的T变量中才有效。

寄存器显示窗口

六、实验参考程序

ARM微控制器工作模式实验的参考程序如下:

USR_STACK_LEGTHEQU64定义各块的长度

SVC_STACK_LEGTHEQU0

FIQ_STACK_LEGTHEQU16

IRQ_STACK_LEGTHEQU64

ABT_STACK_LEGTHEQU0

UND_STACK_LEGTHEQU0

AREAExample3,CODE,READONLY定义区域,区域名为Example3,代码,只读

ENTRY入口

CODE32

STARTMOVR0,#0R0=0

MOVR1,#1R1=1

MOVR2,#2R2=2

MOVR3,#3R3=3

MOVR4,#4R4=4

MOVR5,#5R5=5

MOVR6,#6R6=6

MOVR7,#7R7=7

MOVR8,#8R8=8

MOVR9,#9R9=9

MOVR10,#10R10=10

MOVR11,#11R11=11

MOVR12,#12R12=12

BLInitStack

MRSR0,CPSRR0的内容送入CPSR

BICR0,R0,#0X80

MSRCPSR_cxsf,R0CPSR_cxsf=R0

MSRCPSR_c,#0xd0CPSR_c=0xd0

MRSR0,CPSRR0的内容送入CPSR

MSRCPSR_c,#0xd0CPSR_c=0xd0

MRSR0,CPSRR0的内容送入CPSR

HALTBHALT暂停

;名称:

InitStack

;功能:

堆栈初始化,即初始化各模式下下的堆栈指针。

;入口参数:

;出口参数:

InitStack

MOVR0,LRLR=R0

MSRCPSR_c,#0xd3CPSR_c=0xd3

LDRSP,StackSvcSP=StackSvc,指针指到StackSvc

MSRCPSR_c,#0xd2CPSR_c=0xd2

LDRSP,StackIrqSP=StackIrq,指针指到StackIrq

MSRCPSR_c,#0xd1CPSR_c=0xd1

LDRSP,StackFiqSP=StackFiq,指针指到StackFiq

MSRCPSR_c,#0xd7CPSR_c=0xd7

LDRSP,StackAbtSP=StackAbt,指针指到StackAbt

MSRCPSR_c,#0xdbCPSR_c=0xdb

LDRSP,StackUndSP=StackUnd,指针指到StackUnd

MSRCPSR_c,#0xdfCPSR_c=0xdf

LDRSP,StackUsrSP=StackUsr,指针指到StackUsr

MOVPC,R0PC=R0

StackUsrDCDUsrStackSpace+(USR_STACK_LEGTH-1)*4字定义

StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4

StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4

StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4

StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4

StackUndDCDUndStackSpace+(UND_STACK_LEGTH-1)*4

AREAMyStacks,DATA,NOINIT,ALIGN=2区域名为MyStacks,数据,

UsrStackSpaceSPACEUSR_STACK_LEGTH*4

SvcStackSpaceSPACESVC_STACK_LEGTH*4

IrqStackSpaceSPACEIRQ_STACK_LEGTH*4

FiqStackSpaceSPACEFIQ_STACK_LEGTH*4

AbtStackSpaceSPACEABT_STACK_LEGTH*4

UndStackSpaceSPACEUND_STACK_LEGTH*4

END

各模式下cpsr的值的含义及相关寄存器的值的变化。

 

实验三通用IO口试验

一、实验目的

熟悉ARM芯片I/O口编程配置方法;

掌握ARM芯片I/O口控制LED显示的方法。

二、实验设备

硬件:

嵌入式实验平台一套、仿真器一个、PC机一台。

软件:

Windows98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。

三、实验内容

控制嵌入式实验箱上的LED轮流点亮。

四、实验原理

S3CRRB0X芯片上共有71个多功能I/O引脚,他们分别为7组I/O端口:

2个9位I/O端口(端口E和F)

2个8位I/O端口(端口D和G)

1个16位I/O端口(端口C)

1个10位I/O端口(端口A)

1个11位I/O端口(端口B)

每组端口都可以通过软件配置寄存器来满足不同系统合设计的需要。

在运行主程序之

前,必须先对每一个用到的引脚的功能进行设置。

如果某些引脚的附庸功能没有使用,那么

可以先将该引脚设置为I/O口。

S3C44B0X芯片与端口相关的寄存器

(1)端口控制寄存器(PCONA~G):

在S3C44B0X芯片中,大部分引脚是使用多路复用的,所以要确定每个引脚的功能。

PCONn(端口控制寄存器)能够定义引脚功能。

如果PG0~PG7作为掉电模式下的唤醒信号,那么这些端口必须配置成中断模式。

(2)端口数据寄存器(PDATA~G):

如果端口定义为输出口,那么输出数据可以写入

PDATn中相应的位;如果端口定义为输入口,那么输入数据可以从PDATn相应的位中读入。

(3)端口上拉寄存器(PUPC~G):

通过配置端口上拉寄存器,可以使该组端口与上拉电阻连接或断开。

当寄存器中相应位配置为0时,该引脚接上拉寄存器;当寄存器中相应位配置为1时,该引脚不接上拉电阻。

(4)外部中断寄存器(EXTINT):

通过不同的信号方式可以使8个外部中断被请求。

EXTINT寄存器可以根据外部中断的需求,将中断触发信号配置为低电平触发,高电平触发,下降沿触发,上升沿触发和边沿触发几种方式。

五、实验操作步骤

1.启动ADS1.2,使用ARMExecuatableImage工程模板新建一个工程;

2.添加两个组INC和SRC;

3.将INC文件夹下所有文件添加到组INC中;

4.将SRC文件夹下所有文件添加到组SRC中;

5.建立源文件test5.C,编写实验程序,添加到工程中;

6.编译链接选项的设置同前面实验;

7.编译链接工程,点击Debug按钮,启动AXD进行调试;

8.连续点击stepin按钮,单步运行程序,主板上的三个LED灯循环点亮。

9.理解并掌握本实验原理及程序,完成练习题

六、实验参考程序

#include"option.h"

#include"def.h"

#include"44b.h"

#include"44blib.h"

voidIsr_Init(void);

voidHaltUndef(void);

voidHaltSwi(void);

voidHaltPabort(void);

voidHaltDabort(void);

voidMain(void)

{

rSYSCFG=SYSCFG_8KB;

#if(PLLON1)

ChangePllValue(PLL_M,PLL_P,PLL_S);

#endif

Isr_Init();

Port_Init();

Uart_Init(0,);波特率是

Uart_Select(0);

Delay(0);//calibrateDelay()延迟

Led_Display(7);0111三个灯全亮

Delay(1000);//calibrateDelay()

Led_Display(0);

Delay(5000);//calibrateDelay()

Led_Display(7);

Uart_Printf("\nstart\n");

while

(1)

{

Delay(5000);//calibrateDelay()

Led_Display

(1);亮第一个灯,其他灭

Delay(5000);//calibrateDelay()

Led_Display

(2);亮第二个灯,其他灭

Delay(5000);//calibrateDelay()

Led_Display(4);亮第三个灯,其他灭

}

}

voidIsr_Init(void)

{

U32i;

pISR_UNDEF=(unsigned)HaltUndef;

pISR_SWI=(unsigned)HaltSwi;

pISR_PABORT=(unsigned)HaltPabort;

pISR_DABORT=(unsigned)HaltDabort;

for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4)

{

*((volatileunsigned*)i)=0xEA+0x1FFE;

}

rINTCON=0x5;//Non-vectored,IRQenable,FIQdisable

rINTMOD=0x0;//All=IRQmode

rINTMSK|=BIT_GLOBAL|BIT_EINT3;//Allinterruptismasked.

}

voidHaltUndef(void)

{

Uart_Printf("Undefinedinstructionexception\n");

while

(1);

}

voidHaltSwi(void)

{

Uart_Printf("SWIexception\n");

while

(1);

}

voidHaltPabort(void)

{

Uart_Printf("Pabortexception\n");

while

(1);

}

voidHaltDabort(void)

{

Uart_Printf("Dabortexception\n");

while

(1);

}

思考题

1.本试验中共用到了那些寄存器,他们的作用是什么?

 

2.在原程序的基础上改变led灯的闪烁方式。

将其中部分程序改为以下程序,使其变为每次两个灯一起亮

Uart_Printf("\nstart\n");

while

(1)

{

Delay(5000);//calibrateDelay()

Led_Display(3);

Delay(5000);//calibrateDelay()

Led_Display(5);

Delay(5000);//calibrateDelay()

Led_Display(6);

}

}

实验四串口试验

一、实验目的

1.掌握ARM的串行口工作原理

2.学习编程实现ARM的UART通讯

3.掌握CPU利用串口通讯的方法

二、实验设备

硬件:

ARM嵌入式开发板、用于ARM7TDMI的JTAG仿真器、PC、串口线。

软件:

PC机操作系统win98、Win2000或WinXP、ARMSDT2.51或ADS1.2集

成开发环境、仿真器驱动程序、超级终端通讯程序

三、预备知识

1.用ARMADS1.2集成开发环境,编写和调试程序的基本过程

2.ARM应用程序的框架结构

3.了解串行总线

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

当前位置:首页 > 求职职场 > 自我管理与提升

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

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