嵌入式系统实验报告Word文档格式.docx
- 文档编号:17529762
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:26
- 大小:715.30KB
嵌入式系统实验报告Word文档格式.docx
《嵌入式系统实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验报告Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
图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!
SUBSpc,lr,#4
=======
ENTRY
EXPORTColdReset
ColdReset
ldrr0,=WTCON;
watchdogdisable
ldrr1,=0x0
strr1,[r0]
ldrr0,=INTMSK
ldrr1,=0xffffffff;
allinterruptdisable
ldrr0,=INTSUBMSK
ldrr1,=0x7ff;
allsubinterruptdisable,2002/04/10
****************************************************
*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!
cmpr2,#0
bgeexception_cploop
startmainfunctioninClanguage
IMPORT__main
BL__main;
Don'
tusemain()because......
B.
*Thefunctionforinitializingstack*
IMPORTUserStack
IMPORTSVCStack
IMPORTUndefStack
IMPORTIRQStack
IMPORTAbortStack
IMPORTFIQStack
InitStacks
;
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
AbortMode
ldrsp,=AbortStack
orrr1,r0,#IRQMODE|NOINT
IRQMode
ldrsp,=IRQStack
orrr1,r0,#FIQMODE|NOINT
FIQMode
ldrsp,=FIQStack
bicr0,r0,#MODEMASK|NOINT
orrr1,r0,#SVCMODE|NOINT
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窗口,纪录以下每行语句执行完毕后各寄存器的数值。
写在各语句的右面。
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
写出该语句执行后存储器的值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、在初始化代码中运行分析和堆栈相关的以下代码,查找其中用到的常数定义数值,运行代码,确定并记录每种模式堆栈区域的起始地址和大小。
movr2,lr
mrsr0,cpsr
orrr1,r0,#USERMODE|NOINT
msrcpsr_cxsf,r1
movpc,r2
记录结果:
SVC模式堆栈起始地址:
大小:
IRQ模式堆栈起始地址:
FIQ模式堆栈起始地址:
ABORT模式堆栈起始地址:
UNDEF模式堆栈起始地址:
2、问题
1)系统复位后处于哪种工作模式?
2)堆栈初始化完成以后系统处于什么模式?
3)堆栈初始化完成后FIQ中断和IRQ中断是否打开?
3、修改程序
1)将InitStacks后面的第3条语句改成以下黑体显示的语句,然后重新编译调试。
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/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 实验 报告