嵌入式系统实验报告.docx

上传人:b****3 文档编号:4594838 上传时间:2022-12-07 格式:DOCX 页数:26 大小:715.30KB
下载 相关 举报
嵌入式系统实验报告.docx_第1页
第1页 / 共26页
嵌入式系统实验报告.docx_第2页
第2页 / 共26页
嵌入式系统实验报告.docx_第3页
第3页 / 共26页
嵌入式系统实验报告.docx_第4页
第4页 / 共26页
嵌入式系统实验报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

嵌入式系统实验报告.docx

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

嵌入式系统实验报告.docx

嵌入式系统实验报告

 

《嵌入式系统》

实验报告

班级___________________

姓名___________________

学号___________________

王新华编写

信息与电子工程学院

2008年4月

实验1S3C2410启动程序实验

一、试验目的:

1、熟悉ADS软件的使用。

2、熟悉汇编语言程序结构和C语言程序结构。

3、掌握ARM的异常向量表和堆栈定义。

3、掌握ADS环境中代码的调试方法。

二、实验仪器及设备:

安装有ADS软件的PC机一台。

三、实验步骤:

1.点击D盘“Embeddedsystemexp\EXP1”文件夹下的工程文件exp1.mcp,打开工程进入“MetrowerksCodeWarriorforARMDeveloperSuitev1.2”调试界面。

2.找到Startup.s文件并打开,阅读汇编语言代码,理解其中的向量定义语句和各常量及变量定义语句。

3.按图1-1所示点击Make按钮编译工程,之后点击Debug按钮启动AXD调试界面,运行调试该代码,采用单步和设断点的方式,观察各指令的运行结果。

图1-1

4.进入AXD调试环境后,在代码区域点击鼠标右键,显示图1-2的菜单项,选择其中的Disassembly项,进入反汇编状态,可以查看各异常向量的向量地址、各程序标号的地址值、去除伪指令后的实际代码。

以后每执行一条语句会自动切换回源代码状态,如果需要查看地址要按同样的方法重新切换到反汇编状态。

5.选择菜单ProcessorViews中的Registers项,打开寄存器窗口,如图1-3所示,在代码执行过程中观察寄存器的值。

图1-2

 

图1-3

6.选择菜单ProcessorViews中的Memory项,如图1-4所示,打开存储器窗口,如图1-5所示,该窗口将显示在界面的下端。

如果想观察某一个存储地址的值,在地址栏输入地址(十六进制)后回车即可。

注意存储器值的存放格式。

7.如果想关闭某一个窗口,只要在相应的窗口中点击鼠标右键,选择Close即可。

8.在代码调试时采用单步step(F10)、单步进入stepin(F8)及设置断点(F9)几种方式。

在某一行代码位置设置断点时,用鼠标点击该行代码然后按F9即可,该行将显示红色标记,再按F9将取消断点。

图1-4

图1-5

9.参考Starup.s程序代码,调试时完成所要求的内容。

四、Starup.s参考代码

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;SomeARM920CPSRbitdiscriptions

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Pre-definedconstants

USERMODEEQU0x10

FIQMODEEQU0x11

IRQMODEEQU0x12

SVCMODEEQU0x13

ABORTMODEEQU0x17

UNDEFMODEEQU0x1b

MODEMASKEQU0x1f

NOINTEQU0xc0

I_Bit*0x80

F_Bit*0x40

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;MMURegisterdiscription

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;p15CP15

;c0CN0

;c1CN1

;c2CN2

;c3CN3

CtrlMMU*1

CtrlAlign*2

CtrlCache*4

CtrlWBuff*8

CtrlBigEnd*128

CtrlSystem*256

CtrlROM*512

;initializationL0isMMUFULL_ACCESS,DOMAIN,SECTION

TLB_L0_INIT*0x0C02

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;Starthere

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

AREAInit,CODE,READONLY

IMPORT__use_no_semihosting_swi

IMPORTEnter_UNDEF

IMPORTEnter_SWI

IMPORTEnter_PABORT

IMPORTEnter_DABORT

IMPORTEnter_FIQ

ENTRY

bColdReset

bEnter_UNDEF;UndefinedInstruction

bEnter_SWI;syscall_handlerorSWI

bEnter_PABORT;PrefetchAbort

bEnter_DABORT;DataAbort

b.;ReservedHandler

bIRQ_Handler;IRQHandler

bEnter_FIQ;FIQHandler

;dealwithIRQinterrupt

EXPORTIRQ_Handler

IRQ_Handler

IMPORTISR_IrqHandler

STMFDsp!

{r0-r12,lr}

BLISR_IrqHandler

LDMFDsp!

{r0-r12,lr}

SUBSpc,lr,#4

;=======

;ENTRY

;=======

EXPORTColdReset

ColdReset

ldrr0,=WTCON;watchdogdisable

ldrr1,=0x0

strr1,[r0]

ldrr0,=INTMSK

ldrr1,=0xffffffff;allinterruptdisable

strr1,[r0]

ldrr0,=INTSUBMSK

ldrr1,=0x7ff;allsubinterruptdisable,2002/04/10

strr1,[r0]

;****************************************************

;*Initializestacks*

;****************************************************

blInitStacks;StackSetupforeachMODE

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;copyexcptiontabletosramat0x0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

IMPORT|Load$$EXCEPTION_EXEC$$Base|

IMPORT|Image$$EXCEPTION_EXEC$$Base|

IMPORT|Image$$EXCEPTION_EXEC$$Length|

ldrr0,=|Load$$EXCEPTION_EXEC$$Base|;sourcedata

ldrr1,=|Image$$EXCEPTION_EXEC$$Base|;placeexceptiontalbeat0x0

ldrr2,=|Image$$EXCEPTION_EXEC$$Length|

exception_cploop

subr2,r2,#4

ldmiar0!

{r3}

stmiar1!

{r3}

cmpr2,#0

bgeexception_cploop

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;startmainfunctioninClanguage

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

IMPORT__main

BL__main;Don'tusemain()because......

B.

;****************************************************

;*Thefunctionforinitializingstack*

;****************************************************

IMPORTUserStack

IMPORTSVCStack

IMPORTUndefStack

IMPORTIRQStack

IMPORTAbortStack

IMPORTFIQStack

InitStacks

;Don'tuseDRAM,suchasstmfd,ldmfd......

;SVCstackisinitializedbefore

;Undertoolkitver2.50,'msrcpsr,r1'canbeusedinsteadof'msrcpsr_cxsf,r1'

mrsr0,cpsr

bicr0,r0,#MODEMASK

orrr1,r0,#UNDEFMODE|NOINT

msrcpsr_cxsf,r1;UndefMode

ldrsp,=UndefStack

orrr1,r0,#ABORTMODE|NOINT

msrcpsr_cxsf,r1;AbortMode

ldrsp,=AbortStack

orrr1,r0,#IRQMODE|NOINT

msrcpsr_cxsf,r1;IRQMode

ldrsp,=IRQStack

orrr1,r0,#FIQMODE|NOINT

msrcpsr_cxsf,r1;FIQMode

ldrsp,=FIQStack

;bicr0,r0,#MODEMASK|NOINT

orrr1,r0,#SVCMODE|NOINT

msrcpsr_cxsf,r1;SVCMode

ldrsp,=SVCStack

;USERmodeisnotinitialized.

movpc,lr;TheLRregistermaybenotvalidforthemodechanges.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;EndofStartup.c

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

END

五、试验要求及纪录:

1、写出各异常向量地址

30008000[0xea00000a]bColdReset

30008004[0xea0000c1]bEnter_UNDEF

30008008[0xea0000d3]bEnter_SWI

3000800c[0xea0000e2]bEnter_PABORT

30008010[0xea0000f4]bEnter_DABORT

3000801c[0xea000103]bEnter_FIQ

 

2、说明标号Enter_UNDEF、Enter_SWI、Enter_PABORT、Enter_DABORT、Enter_FIQ的来源文件,说明汇编程序的标号与C语言的函数名称之间的关系。

UHAL.c

汇编程序的标号与C语言的函数名称相同。

 

3、说明WTCON、INTMSK、INTSUBMSK几个常量的来源文件,写出其定义语句。

2410addr.s

WTCONEQU0x53000000;Watch-dogtimermode

WTDATEQU0x53000004;Watch-dogtimerdata

WTCNTEQU0x53000008;Eatch-dogtimercount

4、单步执行汇编语言程序,同时打开Registers和memory窗口,纪录以下每行语句执行完毕后各寄存器的数值。

写在各语句的右面。

ColdReset

ldrr0,=WTCON;写出该语句执行后r0的值0x53000000

ldrr1,=0x0;写出该语句执行后r1的值0x00000000

strr1,[r0];写出该语句执行后存储器的值00000000

ldrr0,=INTMSK;写出该语句执行后r0的值0x4A000008

ldrr1,=0xffffffff;写出该语句执行后r1的值0xFFFFFFFF

strr1,[r0];写出该语句执行后存储器的值FFFFFFFF

ldrr0,=INTSUBMSK;写出该语句执行后r0的值0x4A00001C

ldrr1,=0x7ff;写出该语句执行后r1的值0x000007FF

strr1,[r0];写出该语句执行后存储器的值000070FF

5、关闭AXD调试环境,在CodeWarrior环境下修改main.c函数,在其中输入下面的代码并重新编译。

unsignedlong*ptrw;

unsignedshort*ptrh;

unsignedchar*ptrb;

unsignedchartempb;

unsignedshorttemph;

unsignedlongtempw;

ptrw=(unsignedlong*)0x10000000;

ptrh=(unsignedshort*)0x10000000;

ptrb=(unsignedchar*)0x10000000;

*ptrw=0x12345678;

(1)

tempw=*ptrw;

(2)

*ptrw=tempw+1;(3)

temph=*ptrh;(4)

*ptrh=temph+1;(5)

tempb=*ptrb;(6)

*ptrb=tempb+1;(7)

6、说明ptrw、ptrh、ptrb是什么类型的变量。

指针类型

 

7、再次运行程序,代开AXD调试环境,在运行到main.c程序时,打开并观察memory窗口中地址0x10000000中的数值,写出上述代码中编号

(1)~(7)语句执行后tempw、temph、tempb及存储器地址0x10000000中的值。

(1)

(2)

(3)

(4)

(5)

(6)

(7)

8、说明上述C语言的代码完成了什么功能。

 

实验2S3C2410堆栈初始化程序实验

一、试验目的:

1、熟悉ADS软件的调试方法。

2、熟悉汇编语言启动程序的定义,了解ARM的体系结构。

3、分析了解初始化代码Startup.s中对堆栈的结构定义。

二、实验步骤:

1.点击D盘“Embeddedsystemexp\EXP2”文件夹下的工程文件exp2.mcp,打开工程进入“MetrowerksCodeWarriorforARMDeveloperSuitev1.2”调试界面。

2.找到Startup.s文件并打开,阅读汇编语言代码,理解其中的堆栈定义语句。

3.按照实验1的方法打开寄存器窗口,采用单步和设断点的方式,观察各指令的运行结果。

4.调试时完成以下所要求的内容。

三、试验要求及纪录:

1、在初始化代码中运行分析和堆栈相关的以下代码,查找其中用到的常数定义数值,运行代码,确定并记录每种模式堆栈区域的起始地址和大小。

InitStacks

movr2,lr

mrsr0,cpsr

bicr0,r0,#MODEMASK

orrr1,r0,#UNDEFMODE|NOINT

msrcpsr_cxsf,r1;UndefMode

ldrsp,=UndefStack

orrr1,r0,#ABORTMODE|NOINT

msrcpsr_cxsf,r1;AbortMode

ldrsp,=AbortStack

orrr1,r0,#IRQMODE|NOINT

msrcpsr_cxsf,r1;IRQMode

ldrsp,=IRQStack

orrr1,r0,#FIQMODE|NOINT

msrcpsr_cxsf,r1;FIQMode

ldrsp,=FIQStack

orrr1,r0,#SVCMODE|NOINT

msrcpsr_cxsf,r1;SVCMode

ldrsp,=SVCStack

orrr1,r0,#USERMODE|NOINT

msrcpsr_cxsf,r1

movpc,r2

记录结果:

SVC模式堆栈起始地址:

大小:

IRQ模式堆栈起始地址:

大小:

FIQ模式堆栈起始地址:

大小:

ABORT模式堆栈起始地址:

大小:

UNDEF模式堆栈起始地址:

大小:

2、问题

1)系统复位后处于哪种工作模式?

2)堆栈初始化完成以后系统处于什么模式?

3)堆栈初始化完成后FIQ中断和IRQ中断是否打开?

3、修改程序

1)将InitStacks后面的第3条语句改成以下黑体显示的语句,然后重新编译调试。

InitStacks

movr2,lr

mrsr0,cpsr

bicr0,r0,#MODEMASK

orrr1,r0,#USERMODE|NOINT

2)观察运行结果,此时的结果和程序修改之前有何不同,为什么?

4、现在要把各堆栈的大小改为8192字节,如何修改,写出具体的定义语句,然后重新编译运行程序,验证修改是否正确。

5、分析各寄存器的值,回答以下问题

1)BANK0和BANK1的数据总线宽度各是多少?

 

2)BANK0和BANK1的存取周期各是多少?

 

3)BANK6和BANK7的存储器类型各是什么?

 

4)BANK6和BANK7的存储区大小各是多少?

实验3S3C2410的串行口实验

一、试验目的:

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

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

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

二、实验仪器及设备

1、安装有ADS软件的PC机一台。

2、UP-NETARM2410试验箱一套。

三、实验步骤:

1、按指导老师要求连接好试验箱的电源线、JTAG仿真器及串口线,用鼠标点击桌面上的图标arm9.ht,打开超级终端界面,然后开启实验箱电源,此时在超级终端界面中将出现试验箱返回的信息,按下除回车键外的任意键,这时在超级终端界面将会看到下面图3-1的提示,在vivi>后键入loadflashucosx然后回车。

图3-1超级终端界面I

2、这时将会进入图3-2的界面。

图3-2超级终端界面Ⅱ

3、然后打开超级终端上方的“传送”菜单并选择“发送文件”,弹出如图3-3所示窗口,点击浏览按键,查找D:

\Embeddedsystemexp\exp3\system.bin文件,点击选择该文件.然后在发送文件对话框中的协议栏选择Xmodem,最后选择发送。

发送结束后,映象文件即下载到flash中。

图3-3

4、然后,如图3-4键入bootucos命令再回车运行程序,此时程序已经下载到了试验箱中并且开始运行。

此后在整个实验过程中都不要关闭超级终端,它将于调试环境同时使用。

5、点击运行桌面的UarmJtag.exe图标,运行后该界面马上会缩到桌面右下角,如图3-5,用鼠标指针找到该缩小的图标(鼠标指向它时提示ARMJTAG仿真器),点击打开“ARMflash下载程序”界面如图3-6,然后选择点击其中的“初始化配置”按钮,打开初始化地址设置界面,如图3-7所示,在“处理器类型”选项中选择“ARM9”,点击确定。

之后最下化(注意不要关闭,否则需要重复第7步)“ARMflash下载程序”。

图3-4

图3-5

图3-6

图3-7

6、点击D盘“Embeddedsystemexp\EXP3”文件夹下的工程文件exp3.mcp,打开工程进入“MetrowerksCodeWarriorforARMDeveloperSuitev1.2”调试界面。

7、阅读main.c文件,熟悉该文件中关于UART的函数及定义语句。

8、运行调试相关代码,采用单步和设断点的方式,同时打开存储器窗口,观察各指令的运行结果。

9、首先在AXD运行环境中全速运行程序(按F5),在超级终端界面中输入任意的字符,将会看到该字符的显示,实际上是试验箱中的程序运行时接收超级终端发送的字符,然后送回该字符,超级终端再将收到的字符显示出来。

10、调试时完成以下所要求的内容。

三、试验要求及纪录:

1、在编辑环境中找到Uart_Init函数,阅读其中的代码,说明在该函数中对哪些寄存器做了初始化,同时说明这些寄存器的功能和在该系统中的实际定义是怎样的。

 

2、记录以下变量及寄存器的数值:

PCLK=MHz

rUBRDIV0=

3、回答以下问题:

(1)RdURXH0()是函数吗?

写出它的定义语句。

 

(2)WrUTXH0(ch)是一条什么样的语句?

写出它的定义语句。

 

(3)UART0的接收\发送状态寄存器是哪一个?

在代码main.c中哪一条语句中使用的了它?

写出该语句并分析该语句的功能。

 

(4)UART0的波特率是多少?

串口接收和发送采用了中断还是查询方式?

 

(5)在超级终端中输入了一个字符,但想让它显示另外的字符,在调试环境中如何实现?

(提示:

单步运行到发送函数时修改要发送的字符)

 

实验4S3C2410的AD转换实验

一、试验目的:

1.熟悉ARM本身自带的八路十位A/D控制器及相应寄存器。

2.编程实现ARM系统的A/D功能。

二、实验内容

学习A/D接口原理,了解实现A/

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

当前位置:首页 > 初中教育 > 语文

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

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