山东大学嵌入式实验报告(8000字).docx

上传人:rrsccc 文档编号:9804589 上传时间:2021-03-27 格式:DOCX 页数:18 大小:38.55KB
返回 下载 相关 举报
山东大学嵌入式实验报告(8000字).docx_第1页
第1页 / 共18页
山东大学嵌入式实验报告(8000字).docx_第2页
第2页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《山东大学嵌入式实验报告(8000字).docx》由会员分享,可在线阅读,更多相关《山东大学嵌入式实验报告(8000字).docx(18页珍藏版)》请在三一文库上搜索。

1、-WORD格式-可编辑-嵌入式实验报告班级:电信工 x班 姓名:XXX 学号:20120012xxxx实验一、arm汇编指令实验-简单数据搬移实验实验目的:熟悉实验开发环境掌握简单arm汇编的使用方实验内容熟悉开发环境并使用ldr/str,mov寄存器或存储单元;使用 ads/sub/lsl/lsr/a nd/orr成基本数学/逻辑运算。实验要求(1)按照前面叙述介绍的方法,在仓建一个工程asmlabl,堆等指令访问等指令完ads下定义两个x,和y栈地址Ox1QPO,将变量x的内容存到堆栈顶,然后计算x+y,并将和存到堆栈的下一个单兀。通过axd查看寄存器和 memory和寄存器中数据的变化(

2、2) 在指令后面加上适当注释,说明指令功能。(3) 指出程序执行后各相关寄存器及存储 器单元的具体内容。程序代码截图如下:程序运行结果截图:由实验结果可知堆栈的第二个单元中存放了x+y的值6dmax变量练习题编写程序实现对一段数据的最大值和最小值搜索,最大值存在于之中,最小值存在于min变量之中。提示:数据的定义采用伪指令:dcd来实现。基本思路:利用r0做基地址,将r1 , r2分别放入第一单元的内容,利用r3做循环计数,利用r4遍历读取第2至最后一个数据,如果r1的数据小于新读入的r4数据则将r4的内容存入r1,如果r2的内容大于r4的内容则将r4的内容存入r2,。遍历完成之后,r1将存放

3、最大数据,r2将存放最小数据程序代码截图如下:程序运行结果截图: 实验二arm汇编指令实验 2-字符串拷贝实验实验目的通过实验掌握使用ldb/stb , b等指令完成较为复杂的存储区访问和程序分支,学会使用 条件码。实验内容熟悉开发环境的使用并完成一块存储区的拷贝。完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。实验要求(1) 按照2.3节介绍的方法, 在ads下创建一个工程asmab2定义两个数据存储区src和dst , src用于存放原字符串,dst用于存放目的字符串。堆栈地址0x400,将变量原字符串的内容拷贝到目的字符串中,要能判断原字符串的结束符(0),并统计字符串的

4、个数。通过axd查看寄存器和 memory和寄存器中数据的变化。(2) 在指令后面加上适当注释,说明指令功能。(3) 指出程序执行完后各相关寄存器及存 储器单元的具体内容。程序代码截图如下:程序运行结果源字符串符串复制后两个数存储区src:0x80和dst:0x80中的数据情况4047实验三arm汇编指令实验3-arm处理器工作模式实验 实验目的(1) 通过实验掌握学会使用 msr/mrs指令实现arm处理器工作模 式的切换,观察不同模式下的寄存器,加深对 cpu结构的理解;(2) 通过实验掌握ld中如何使用命令指定代码段起始地址。实验内容通过arm汇编指令,在各种处理器模式下切换并观察各种模

5、式下寄存器的区另ij;掌握arm不同模式的进入与退出。实验要求(1) 按照2.3节介绍的方法, 在ads下创建一个工程asmmodelab完成各个 模式下的堆栈初始化工作,并将一 r1-r12 一、的内容存入当前模式下堆栈。通过axd运用单步执行方式调用程序,验证工作的模式,使用寄存器观察切换到不同的工作模式下观察sp(r13 )的变化情况。(2)实验过程中请记录并思考以下内容:1 )程序复位之后系统处于什么模式?2 )记录每种模式下的厨师堆栈指针,以及执行r1-r12内容压栈后本模式堆栈相关内存单一元的数值。并分析快速 中断fiq )换到其他模式 4果能的话 堆栈区域的变化情况。观察本程序模

6、式切换 spsr有无变化, 5过程中程序运行结果截图:模式与其他模式户模式切换成用户模式之后还能否从用尸模式下能否执行堆栈压栈操作?如r1-r12有什么不观察用户模式下压栈之刖和之后其并解释原r1-r12内容压栈后本模6 )程序复位之后系统处于 什么模式?答:程序复位之后 系统处于管理模式。式堆栈相关每种模式下的初始堆栈指针以及执行 存单r1-r12有什么元的数值。并分析快速中断fiq模式与其他模式存入的 不同。答:(管理模式)即管理模式的栈顶指针为0x8240满递减模门. 式,r12(中断模式)指后为管理模式栈;x82 距0x3入12个字0,观r13,中断模式的堆栈地址为察0x8340满递减

7、模r1-r12顶栈针为中断模式栈0x8310,12个字察堆栈地快速中断模式的0x8380满递减模式,观察运行结中只中断模式为在快栈了,这是因中断模式中,可访问的寄存器只有r1-,不能访问r&r12,快速中断模式下有自己的r7r8-(中止模式)r12观r13,中止模式的堆栈地址为 察0x83c00x8310,0x3入12个字0,压栈后,未定义模式栈顶指针满递减模式,r1-r12压栈后,中止模式栈顶指针为观察r13,未定义模式的堆栈地址为0x8400满递减模式, r1-r12为0x83d0,相距0x30,压入12个字(系统模式) 观察r13,系统模式的堆栈地址为0x81c0满递减模式,r1-r12

8、压栈后,系统模式栈顶指针为0x8190,相距0x30,压入12个字分析快速中断fiq模式与其他模式存入的r1-r12有什么不同:快速中断fiq模式中:r8r13都是0。这是因为在快速中断模式中,可访问的寄存器只有r1-r7,不能访问 r8-r12,快速中断模式下有自己的r8-r12。8 )、切换成用户模式之后还能否从用户模式切换到其他模式(如系统模式)答:在该例程中,由用户模式不可以切换到系统模式。当处 理器工作在用户模式时,正在执行的程序不能访问某些被保护的系 统资源,也不能改变模式,除非异常发生。观察用户模式下9 )用户模式下能否执行堆栈压栈操作?如果能的话压栈之前和之后其堆栈区域的变化情

9、况。答:用户模式下能执行堆栈压栈操作。未压栈时:用户模式堆栈指针初始值为0x8190压栈之后,堆栈指针减小 0x30,这是因为堆栈设置为满递减 模式,所以堆栈指针减小 0x30,存放12个字。10 )观察本程序模式切换过程中spsr有无变化,并解释其原因。答:模式切换过程中spsr无变化,因为在整个切换过程所sps无变中没有异常发生,化。以实I四arm汇编与c混合编实实验目的-arm启动过程控制(1)掌握建立基本完整的arm工程,包含启动代码,c语言程序等了解arm启动过程,学会编写简单的掌握如何指定代码入口地址与入口点掌握通过memory/register/watch/variable语言程

10、序和汇编程序启动代码并进 c行调试;J窗口分析判断错误。实验内容写延汇编数言编写初始化程序,并引导至c语言main函数,用汇编语言编时毫秒级的延时,在c语言中调用延时函数,实现1s钟定实验要求(写畀文件.3节过绍的方法xd在ads下创建一个工程armasmc,单步执行方式进行调试程序,观察程序执行过程中的寄存器及存储器的变化(2)实验过程中请记录并思考以下内容:1 )如何建立异常矢量入口表?2 )如何在汇编语言中切换至 c语言的main函数?3 )如何在c语言中调用汇编语言函数,并完成参数传递?4)汇编语言函数中用到的寄存器如何保护与恢复,为什么要保护参考程序中的r11 ?5将delay.s中

11、的r11改成r4,并将两条r11的保护与恢复语句r12和 ldmfdstmfd sp!,sp!r11删掉,在c语言程序中的语句点,观察运行过程中变量i的变化情况,并解释其中的原因。i- 处设置端程序原代码截图:init朽工完成异常矢量表的建立,模式堆栈初始化, 并将程序引导至的语言 main函数c语言程序,调用汇编语言文件 delay.s汇编delay.延时程序思考题:思考题1 )如何建立异常矢量入口表?要设置中断类型号,设置中断服务子程序段地址2 )如何在汇编语言中切换至c语言的main函数?为了保证程序调用时参数的正确传递,、汇编程序设计要遵守atpcs。在c程序中不需要任汇编语言调用的i

12、mportc程序。在汇编程序中通过何关键字来声明前被用来声明该序。3 )如何在c语言中调用汇编语言函数,并完成参数传递? 为了保证程序调用时参数的正确传递,汇编程序设计要遵守 在汇编程序中需要使用 export 序中调用该汇编程序之前需要在c语言程序中使用 exter n关键词来声明该汇编程序。伪I作但需要在 bl指令来调用子程atpcs。伪操作来声明,同时,在 c程4 )汇编语言函数中用到的寄存器如何保护与恢复,为什么要保护参考程序中 的r11 ?根据atpcs标准,r11对应arm状态局部变量寄存器 8。因为r11中 可能含有其他重要的数据,所以要保护程序中r11。汇编语言函数中用到的寄存

13、器的保护与恢复需要用到压栈与出栈。5)将 delay.s中的sp!r11删掉,r11改成r4,并将两条c语言程 序中的语句r1的保护与恢复语句 stmfd sp!,r121 i处设置端点,观察运行过1卜程中变量和 Idmfdi的变化情况,并解释其中的原因 修改后程序如图由于根警,即i,所以在delay.satpcs标准r4对应局部变量寄存器 中,r4的值减为1,若不进行保护,则返回c程序后经永远不为0,无法执行致i值一直递减下去实验五 arm硬件接口实验 1-i-if基本io实验,句直弩-1,实验目的(1) gpio的功能配置方法;2)通过寄存器访冋引脚的方法;(3)实现gpio输入输出功能的

14、基 本编程方法。实验内容编S3C2440)处理器的端口控制程序,实现利用按键控 写制的跑马灯程序。gpc7三个引脚连接发光二极管,按钮开关连接在yPgpf5引脚。上三个引后连接发光二极管,轮流显示,当按钮开关按下 去,方向反向。ps:、实验过程中要注意按键去抖动和每个发光二极管显示 一定的验过程至少gpc5 , gpc6, gpc5, gpc6,gpc7100ms)(1) 运行axd加载生成的image文件,运行程序,观察程序执 行的效率。并观察按键按下和松开跑马灯轮换方向。(2) 实验过程中请记录并思考以下内容:1 )如何访问寄存器并修改其中的1位或者多位数据?2 )如何配置S3C2440的

15、pio端口?3 )在c语言中如何实现按键处理程序?4)如何初始化dram,从而实现程序下载并在线调试?5)尝试实现利用按键切换控制跑马灯的顺序轮换?程序代码截图如下:思考题:(1)运行axd加载生成的image文件,运行程序,观察程序执 行的效率。并观察按键按下和松开跑马灯轮换方向。答:执行效率高。下载程序到实验箱上,跑马灯从左到右依次 点亮,当按下开关并松开,跑马灯反向依次点亮。(2)实验过程中请记录并思考以下内容:1位或者多位数据1 )如何访问寄存器并修改其中的1位或者多位数据? 答:通过与、或、非等关系来访问寄存器并修改其中的 的。2 )如何配置s3c2440的pio端口?答:配置相应的

16、寄存as3 )在c语言中如何实现按键处理程序?答:在c语言中一定要通过延时按键延时去抖动。4)如何初始化dram,从而实现程序下载并在线调试?5)尝试实现利用按键切换控制跑马灯的顺序轮换(不是控制其轮换方向而是在有按键按下并松开后实现一次跑马灯切换)。答:可改变轮换方向实验六arm硬件接口实验2-外部 中断实验实验目的(1)通过实验掌握 arm处理器的中断方式和中断处理2)熟悉s3c2440x的中断控制寄存器的使用;3)理解s3c2440x的中断处理机制(4)熟悉掌握如何进行 arm处理器中断处理软件编程方法(5)掌握生成离线运行程序的开发环境设置方法(6) 掌握通过j-link向norfla

17、sh烧写程序的方法。实验内容硬件电路和前面的实验五完全相同。这里讲按钮开关所连接的gpf5 引脚定位外部中断eint5 中断模式为irq ,在中断服务程序中完成led灯的切换,即正常状态时led5灯亮,按下按钮开关时led6灯亮。实验要求(1)环境设置完了之后进行程序写入。关掉试验箱,将其核心板上的拨动开关拨到右边的nor位置,观察程序运行结果。按下in key按钮,再次观察程序运行结果。2)实验过程中请记录并思考以下内容:1)打开s2440addr.h头文件。观察并分析其内容。2 )分析中断控制程序的结构。3 )仔细分析中断初始化程序和中断处理程序中寄存器的设置方法,并理解其 含义。4 )总

18、结中断程序的设计方法。程序代码截图如下:程序和注释截图如下初始化汇编程序c 语言处理程序思考题1)打开s2440addr.h头文件。观察并分析其内容。/% s3c2440.h %/* wotch dog register */#defi ne wtc on (*(volatile un sig ned long *)0x53000000)/* sdram regisers */*)0x4e000000)#d efinen faddr#define mem_ctl_base 0x48000000#defi ne sdram_base0x30000000/* nand flash register

19、s */#defi ne nfconf (*(volatileun sig ned int(*(volatile un sig ned char *)0x4e000008)#defi ne n fdata (*(volatile un sig ned char*)0x4e00000c)#defi ne n fstat (*(volatile un sig ned char*)0x4e000010)/*gpio registers*/#defi ne gpbcon (*(volatile un sig ned long *)0x56000010)#defi ne gpbdat#defi ne g

20、pfc on#defi ne gpfdat#defi ne gpfup#defi ne gpgc on#defi ne gpgdat#defi ne gpgup#defi ne gphc on#defi ne gphdat#defi ne gphup/*uart registers*/#defi ne ulc on0#defi ne ucon0#defi ne ufcon0#defi ne umc on0#defi ne utrstat0#defi ne utxhO#defi ne urxhO#defi ne ubrdivO/*i nterrupt registes*/#defi ne src

21、p nd(*(volatile un sig ned#define intmod(*(volatile unsignedong *)0x56000014)long*)0x56000050) (*(volatile un sig ned long *)0x56000054) (*(volatile unsignedlong*)0x56000058)(*(volatileunsignedlong*)0x56000060) (*(volatile un sig ned long *)0x56000064) (*(volatile unsignedlong*)0x56000068)(*(volatil

22、eunsignedlong*)0x56000070) (*(volatile un sig ned long *)0x56000074) (*(volatile unsignedlong*)0x56000078)(*(volatileunsignedlong*)0x50000000) (*(volatile un sig ned long *)0x50000004) (*(volatile unsignedlong*)0x50000008)(*(volatileunsignedlong*)0x5000000c) (*(volatile un sig ned long *)0x50000010)

23、 (*(volatile unsigned char *)0x50000020) (*(volatile unsigned char*)0x50000024) (*(volatile unsigned long *)0x50000028) (*(volatile unsigned long*)0x4a000000) (*(volatileunsigned long*)0x4a000004)#defi ne priority(*(volatileun sig nedlo ng*)0x4a00000c)#defi ne intpnd (*(volatile un sig ned long *)0x

24、4a000010)#defi ne in toffset(*(volatile un sig ned long *)0x4a000014)#define subsrcpnd (*(volatile unsigned long *)0x4a000018)#define intsubmsk (*(volatile unsigned long *)0x4a00001c)/*exter nal in terrupt registers*/#defi ne ein tmask(*(volatile un sig ned long *)0x560000a4)#defi ne ein tpe nd(*(vo

25、latile un sig ned long *)0x560000a8)文件中的主要内容是定义经分析知,s2440addr.h了一些看门狗,sdram, gpio等的寄存器地址,并定义了串口通讯和中段的寄存器地址 2 )分析中断控制程序的结构。首先要对中段进行初始化,并对端口功能设定。 继而进行相应中段使能,打开有关中段屏蔽位,并进入主函数等待中断,直到中段产生, 由中段向量表进入中段执行中段程序。最后退出中断,清除当前中段标 志位,等待下次中段。3)义细分析中断初始化程序和中断处理程序中寄存器的设置方法,并理解其对寄应位的设置是通过位运再通过与,或,非来先将想要改变的数值移达到相应改变寄存器某一位值的目的4 )总结中断程序的设计方法。首先,在初始化汇编程序中切换至用户模式,并进入中断模式设置相应指针等; 并在汇编中调用 main函数和中断函数。 建立中断入口矢量 表,同时关闭卡门狗定时器; 编写中断处理函数,和 main函数,在 main函数中等待中断的产生。

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1