ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:715.30KB ,
资源ID:4594838      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4594838.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式系统实验报告.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式系统实验报告.docx

1、嵌入式系统实验报告嵌入式系统实验报告班级_姓名_学号_王新华 编写信息与电子工程学院2008年4月实验1 S3C2410启动程序实验一、试验目的:1、熟悉ADS软件的使用。2、熟悉汇编语言程序结构和C语言程序结构。3、掌握ARM的异常向量表和堆栈定义。3、掌握ADS环境中代码的调试方法。二、实验仪器及设备: 安装有ADS软件的PC机一台。三、实验步骤:1. 点击D盘“Embedded system expEXP1”文件夹下的工程文件exp1.mcp,打开工程进入“Metrowerks CodeWarrior for ARM Developer Suite v1.2”调试界面。2. 找到Star

2、tup.s文件并打开,阅读汇编语言代码,理解其中的向量定义语句和各常量及变量定义语句。3. 按图1-1所示点击Make按钮编译工程,之后点击Debug按钮启动AXD调试界面,运行调试该代码,采用单步和设断点的方式,观察各指令的运行结果。图1-14. 进入AXD调试环境后,在代码区域点击鼠标右键,显示图1-2的菜单项,选择其中的Disassembly项,进入反汇编状态,可以查看各异常向量的向量地址、各程序标号的地址值、去除伪指令后的实际代码。以后每执行一条语句会自动切换回源代码状态,如果需要查看地址要按同样的方法重新切换到反汇编状态。5. 选择菜单Processor Views中的Registe

3、rs项,打开寄存器窗口,如图1-3所示,在代码执行过程中观察寄存器的值。图1-2图1-36. 选择菜单Processor Views中的Memory项,如图1-4所示,打开存储器窗口,如图1-5所示,该窗口将显示在界面的下端。如果想观察某一个存储地址的值,在地址栏输入地址(十六进制)后回车即可。注意存储器值的存放格式。7. 如果想关闭某一个窗口,只要在相应的窗口中点击鼠标右键,选择Close即可。8. 在代码调试时采用单步step (F10)、单步进入step in(F8)及设置断点(F9)几种方式。在某一行代码位置设置断点时,用鼠标点击该行代码然后按F9即可,该行将显示红色标记,再按F9将取

4、消断点。图1-4图1-59. 参考Starup.s程序代码,调试时完成所要求的内容。四、 Starup.s参考代码; Some ARM920 CPSR bit discriptions;Pre-defined constantsUSERMODE EQU 0x10FIQMODE EQU 0x11IRQMODE EQU 0x12SVCMODE EQU 0x13ABORTMODE EQU 0x17UNDEFMODE EQU 0x1bMODEMASK EQU 0x1fNOINT EQU 0xc0I_Bit * 0x80F_Bit * 0x40; MMU Register discription;p15

5、 CP 15;c0 CN 0;c1 CN 1;c2 CN 2;c3 CN 3CtrlMMU * 1CtrlAlign * 2CtrlCache * 4CtrlWBuff * 8CtrlBigEnd * 128CtrlSystem * 256CtrlROM * 512;initialization L0 is MMU FULL_ACCESS, DOMAIN, SECTIONTLB_L0_INIT * 0x0C02; Start here; AREA Init,CODE,READONLY IMPORT _use_no_semihosting_swi IMPORT Enter_UNDEF IMPOR

6、T Enter_SWI IMPORT Enter_PABORT IMPORT Enter_DABORT IMPORT Enter_FIQ ENTRY b ColdReset b Enter_UNDEF ;UndefinedInstruction b Enter_SWI ;syscall_handler or SWI b Enter_PABORT ;PrefetchAbort b Enter_DABORT ;DataAbort b . ;ReservedHandler b IRQ_Handler ;IRQHandler b Enter_FIQ ;FIQHandler;deal with IRQ

7、interrupt EXPORT IRQ_HandlerIRQ_Handler IMPORT ISR_IrqHandler STMFD sp!, r0-r12, lr BL ISR_IrqHandler LDMFD sp!, r0-r12, lr SUBS pc, lr, #4;=; ENTRY ;= EXPORT ColdResetColdReset ldr r0,=WTCON ;watch dog disable ldr r1,=0x0 str r1,r0 ldr r0,=INTMSK ldr r1,=0xffffffff ;all interrupt disable str r1,r0

8、ldr r0,=INTSUBMSK ldr r1,=0x7ff ;all sub interrupt disable, 2002/04/10 str r1,r0;*;* Initialize stacks * ;* bl InitStacks ; Stack Setup for each MODE; copy excption table to sram at 0x0; IMPORT |Load$EXCEPTION_EXEC$Base| IMPORT |Image$EXCEPTION_EXEC$Base| IMPORT |Image$EXCEPTION_EXEC$Length| ldr r0,

9、 =|Load$EXCEPTION_EXEC$Base| ;source data ldr r1, =|Image$EXCEPTION_EXEC$Base| ;place exception talbe at 0x0 ldr r2, =|Image$EXCEPTION_EXEC$Length|exception_cploop sub r2, r2, #4 ldmia r0!, r3 stmia r1!, r3 cmp r2, #0 bge exception_cploop; start main function in C language; IMPORT _main BL _main ;Do

10、nt use main() because . B .;*;* The function for initializing stack *;* IMPORT UserStack IMPORT SVCStack IMPORT UndefStack IMPORT IRQStack IMPORT AbortStack IMPORT FIQStackInitStacks ;Dont use DRAM,such as stmfd,ldmfd. ;SVCstack is initialized before ;Under toolkit ver 2.50, msr cpsr,r1 can be used

11、instead of msr cpsr_cxsf,r1 mrs r0,cpsr bic r0,r0,#MODEMASK orr r1,r0,#UNDEFMODE|NOINT msr cpsr_cxsf,r1 ;UndefMode ldr sp,=UndefStack orr r1,r0,#ABORTMODE|NOINT msr cpsr_cxsf,r1 ;AbortMode ldr sp,=AbortStack orr r1,r0,#IRQMODE|NOINT msr cpsr_cxsf,r1 ;IRQMode ldr sp,=IRQStack orr r1,r0,#FIQMODE|NOINT

12、 msr cpsr_cxsf,r1 ;FIQMode ldr sp,=FIQStack ;bic r0,r0,#MODEMASK|NOINT orr r1,r0,#SVCMODE|NOINT msr cpsr_cxsf,r1 ;SVCMode ldr sp,=SVCStack ;USER mode is not initialized. mov pc,lr ;The LR register may be not valid for the mode changes.; End of Startup.c; END五、试验要求及纪录:1、写出各异常向量地址30008000 0xea00000a b

13、 ColdReset30008004 0xea0000c1 b Enter_UNDEF30008008 0xea0000d3 b Enter_SWI3000800c 0xea0000e2 b Enter_PABORT30008010 0xea0000f4 b Enter_DABORT3000801c 0xea000103 b Enter_FIQ2、说明标号Enter_UNDEF、Enter_SWI、Enter_PABORT、Enter_DABORT、 Enter_FIQ的来源文件,说明汇编程序的标号与C语言的函数名称之间的关系。 UHAL.c 汇编程序的标号与C语言的函数名称相同。3、说明WT

14、CON、INTMSK、INTSUBMSK几个常量的来源文件,写出其定义语句。2410addr.s WTCON EQU 0x53000000 ;Watch-dog timer modeWTDAT EQU 0x53000004 ;Watch-dog timer dataWTCNT EQU 0x53000008 ;Eatch-dog timer count4、 单步执行汇编语言程序,同时打开Registers和memory窗口,纪录以下每行语句执行完毕后各寄存器的数值。写在各语句的右面。ColdReset ldr r0,=WTCON;写出该语句执行后r0的值 0x53000000 ldr r1,=0

15、x0;写出该语句执行后r1的值 0x00000000 str r1,r0;写出该语句执行后存储器的值 00000000 ldr r0,=INTMSK;写出该语句执行后r0的值 0x4A000008 ldr r1,=0xffffffff ;写出该语句执行后r1的值 0xFFFFFFFF str r1,r0 ;写出该语句执行后存储器的值 FFFFFFFF ldr r0,=INTSUBMSK;写出该语句执行后r0的值 0x4A00001C ldr r1,=0x7ff;写出该语句执行后r1的值 0x000007FF str r1,r0 ;写出该语句执行后存储器的值 000070FF5、关闭AXD调试环

16、境,在CodeWarrior环境下修改main.c函数,在其中输入下面的代码并重新编译。 unsigned long * ptrw; unsigned short * ptrh; unsigned char * ptrb; unsigned char tempb; unsigned short temph; unsigned long tempw; ptrw = (unsigned long *)0x10000000; ptrh = (unsigned short *)0x10000000; ptrb = (unsigned char *)0x10000000; * ptrw = 0x1234

17、5678; (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

18、)(7)8、 说明上述C语言的代码完成了什么功能。实验2 S3C2410堆栈初始化程序实验一、试验目的:1、熟悉ADS软件的调试方法。2、熟悉汇编语言启动程序的定义,了解ARM的体系结构。3、分析了解初始化代码Startup.s中对堆栈的结构定义。二、实验步骤:1. 点击D盘“Embedded system expEXP2”文件夹下的工程文件exp2.mcp,打开工程进入“Metrowerks CodeWarrior for ARM Developer Suite v1.2”调试界面。2. 找到Startup.s文件并打开,阅读汇编语言代码,理解其中的堆栈定义语句。3. 按照实验1的方法打开寄

19、存器窗口,采用单步和设断点的方式,观察各指令的运行结果。4. 调试时完成以下所要求的内容。三、试验要求及纪录:1、在初始化代码中运行分析和堆栈相关的以下代码,查找其中用到的常数定义数值,运行代码,确定并记录每种模式堆栈区域的起始地址和大小。InitStacksmov r2,lrmrs r0,cpsr bic r0,r0,#MODEMASK orr r1,r0,#UNDEFMODE|NOINT msr cpsr_cxsf,r1 ;UndefMode ldr sp,=UndefStack orr r1,r0,#ABORTMODE|NOINT msr cpsr_cxsf,r1 ;AbortMode

20、ldr sp,=AbortStack orr r1,r0,#IRQMODE|NOINT msr cpsr_cxsf,r1 ;IRQMode ldr sp,=IRQStack orr r1,r0,#FIQMODE|NOINT msr cpsr_cxsf,r1 ;FIQMode ldr sp,=FIQStack orr r1,r0,#SVCMODE|NOINT msr cpsr_cxsf,r1 ;SVCMode ldr sp,=SVCStack orr r1,r0,#USERMODE|NOINT msr cpsr_cxsf,r1 mov pc,r2 记录结果:SVC模式堆栈起始地址: 大小:IRQ

21、模式堆栈起始地址: 大小:FIQ模式堆栈起始地址: 大小:ABORT模式堆栈起始地址: 大小:UNDEF模式堆栈起始地址: 大小:2、问题1) 系统复位后处于哪种工作模式?2) 堆栈初始化完成以后系统处于什么模式?3) 堆栈初始化完成后FIQ中断和IRQ中断是否打开?3、修改程序1) 将InitStacks后面的第3条语句改成以下黑体显示的语句,然后重新编译调试。InitStacksmov r2,lrmrs r0,cpsr bic r0,r0,#MODEMASK orr r1,r0,# USERMODE|NOINT2)观察运行结果,此时的结果和程序修改之前有何不同,为什么?4、 现在要把各堆栈

22、的大小改为8192字节,如何修改,写出具体的定义语句,然后重新编译运行程序,验证修改是否正确。5、分析各寄存器的值,回答以下问题1) BANK0和BANK1的数据总线宽度各是多少?2) BANK0和BANK1的存取周期各是多少?3) BANK6和BANK7的存储器类型各是什么?4) BANK6和BANK7的存储区大小各是多少?实验3 S3C2410 的串行口实验一、试验目的:1、掌握ARM 的串行口工作原理。2、学习编程实现ARM 的UART 通讯。3、掌握CPU 利用串口通讯的方法。二、实验仪器及设备1、安装有ADS软件的PC机一台。2、UP-NETARM 2410试验箱一套。三、实验步骤:

23、1、按指导老师要求连接好试验箱的电源线、JTAG仿真器及串口线,用鼠标点击桌面上的图标arm9.ht,打开超级终端界面,然后开启实验箱电源,此时在超级终端界面中将出现试验箱返回的信息,按下除回车键外的任意键,这时在超级终端界面将会看到下面图3-1 的提示,在vivi后键入load flash ucos x 然后回车。图3-1 超级终端界面I2、 这时将会进入图3-2 的界面。图3-2 超级终端界面3、 然后打开超级终端上方的“传送”菜单并选择“发送文件”,弹出如图3-3 所示窗口,点击浏览按键,查找D:Embedded system expexp3system.bin文件,点击选择该文件.然后

24、在发送文件对话框中的协议栏选择Xmodem,最后选择发送。发送结束后,映象文件即下载到flash 中。图3-34、 然后,如图3-4 键入bootucos 命令再回车运行程序,此时程序已经下载到了试验箱中并且开始运行。此后在整个实验过程中都不要关闭超级终端,它将于调试环境同时使用。5、 点击运行桌面的UarmJtag.exe图标,运行后该界面马上会缩到桌面右下角,如图3-5,用鼠标指针找到该缩小的图标(鼠标指向它时提示ARM JTAG仿真器),点击打开“ARM flash 下载程序”界面如图3-6,然后选择点击其中的“初始化配置”按钮,打开初始化地址设置界面,如图3-7所示,在“处理器类型”选

25、项中选择“ARM9”,点击确定。之后最下化(注意不要关闭,否则需要重复第7步)“ARM flash 下载程序”。图3-4图3-5图3-6图3-76、 点击D盘“Embedded system expEXP3”文件夹下的工程文件exp3.mcp,打开工程进入“Metrowerks CodeWarrior for ARM Developer Suite v1.2”调试界面。7、 阅读main.c文件,熟悉该文件中关于UART的函数及定义语句。8、 运行调试相关代码,采用单步和设断点的方式,同时打开存储器窗口,观察各指令的运行结果。9、 首先在AXD运行环境中全速运行程序(按F5),在超级终端界面中

26、输入任意的字符,将会看到该字符的显示,实际上是试验箱中的程序运行时接收超级终端发送的字符,然后送回该字符,超级终端再将收到的字符显示出来。10、调试时完成以下所要求的内容。三、试验要求及纪录:1、在编辑环境中找到Uart_Init函数,阅读其中的代码,说明在该函数中对哪些寄存器做了初始化,同时说明这些寄存器的功能和在该系统中的实际定义是怎样的。2、记录以下变量及寄存器的数值:PCLK= MHzrUBRDIV0=3、回答以下问题:(1)RdURXH0( ) 是函数吗?写出它的定义语句。(2)WrUTXH0(ch) 是一条什么样的语句?写出它的定义语句。(3)UART0的接收发送状态寄存器是哪一个?在代码main.c中哪一条语句中使用的了它?写出该语句并分析该语句的功能。(4)UART0的波特率是多少?串口接收和发送采用了中断还是查询方式?(5)在超级终端中输入了一个字符,但想让它显示另外的字符,在调试环境中如何实现?(提示:单步运行到发送函数时修改要发送的字符)实验4 S3C2410的AD转换实验一、试验目的:1熟悉ARM 本身自带的八路十位A/D 控制器及相应寄存器。2编程实现ARM 系统的A/D 功能。二、实验内容学习A/D 接口原理,了解实现A/

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

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