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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

嵌入式课程设计实验报告Word下载.docx

1、 (1)参照课本程序调试运行使得PWM定时器能控制蜂鸣器;(2)加入串口程序使得当在串口输入“A”和“B”时蜂鸣器能以不同的频率鸣响。提示:可参看教材中断这一章编写程序。任务项目4看门狗定时器编程(1)熟悉裸机下看门狗定时器程序的编写、测试及运行。 (1)参看课本程序,调试运行,实现通过定时器精确控制蜂鸣器延时1秒钟; (2)控制蜂鸣器鸣响使之模仿简单歌曲读书郎。参看系统时钟和定时器这一章编写程序。任务项目5 u-boot源码详细分析(1)熟悉u-boot工程的总体结构。(2)熟悉u-boot的流程、主要的数据结构、内存分配。(3)熟悉u-boot的重要细节,主要分析流程中各函数的功能。 S5

2、PV210 u-boot源码分析 请添加u-boot源码注释,查看相关数据手册,添加代码注释,以实验台为基数,每组完成i部分的50行代码。注释添加示例:Start.S中一段程序:.globl _start_start:breset/ b是跳转指令,即跳转到reset标签处。接着返回到此处。ldrpc, _undefined_instruction /设置中断向量表0x0 0x4.0x8 0xcpc, _software_interruptpc, _prefetch_abortpc, _data_abortpc, _not_usedpc, _irqpc, _fiq4. 附录1. u-boot启动

3、流程1.1 启动阶段分为3个,bl0,bl1,bl2。下面只是就功能方面对它们做说明,实际设计的时候,也许会对其具体功能做出调整,也就是说,这几个阶段的划分是就功能而言的,不能看得太死。 bl0:出厂的时候就固化在irom中一段代码,主要负责拷贝8kb的bl1到s5pv210的一个96kb大小内部sram(Internal SRAM)中运行。值得注意的是s5pv210的Internal SRAM支持的bl1的大小可以达到16kb,容量的扩增是为了适应bootloder变得越来复杂而做的。虽然如此,但目前我们制作出来的bl1的大小仍然可以保持在8kb以内,同样能满足需求。 bl1:u-boot的

4、前8kb代码(s5pv210也支持16kb大小,原因上一点提过了),除了初始化系统时钟和一些基本的硬件外,主要负责完成代码 的搬运工作(我设计成搬运bl1+bl2,而不仅仅是bl2),也就是将完整的u-boot代码(bl1+bl2)从nand flash或者mmcSD等的存储器中读取到内存中,然后跳转到内存中运行u-boot。 bl2:完成全面的硬件初始化和加载OS到内存中,接着运行OS。上述几个阶段的流程描述在s5pv210_irom_application手册中有详细描述。见下图1:图11.2 首先把启动部分的代码分为3部分,以start.S为主,另外还有lowlevel_init.S,m

5、em_setup.S,ctr0.S。 其中lowlevel_init.S主要是一部分硬件的初始化,尤其是系统时钟和DRAM的初始化。如果u-boot一旦被搬运到内存中运行,那么是必须要跳过时钟和DRAM的初始化的,因为这在搬运之前已经做过了。并且如果代码在内存中运行的时侯你却去初始化DRAM,那必然导致崩溃!mem_setup.S:DRAM初始化代码和MMU相关代码放在这个文件中。ctr0.S:u-boot自带的代码文件,存放汇编函数main。1.3 启动代码相关的几个文件在u-boot中的路径start.S:/arch/arm/cpu/armv7/start.S (需要自己修改)lowlev

6、el_init.S:/board/samsung/zsy210/lowlevel_init.S (需要自己修改)mem_setup.S: /board/samsung/zsy210/mem_setup.S (u-boot没有,需要自己添加)/arch/arm/lib/ctr0.S (u-boot自带,一般不需要修改)2. 启动过程原理必 须要明白的一点是,当代码从存储介质(nand flash,SD,norflash,onenand等)中搬运到了DRAM中后随即会跳转到内存中运行u-boot,接着会有一个重定位 (relocate_code)的过程,relocate_code子函数在start

7、.S中,而给relocate_code子函数传参数的是 crt0.S中的main子函数。当判断到当前u-boot在内存的低地址处,那么relocate_code就会工作,把u-boot代码从低地址处再 搬运到内存地址的顶端,然后跳转到新的位置去继续运行u-boot。而搬运的目标地址是在board_init_f()函数(此函数在/arch/arm/lib/board.c中)中计算出来的,见图2。 图2下面,以start.S为主线,画出了其程序流程图,图中同样也表现出启动的整个流程和启动代码文件间的组织关系。所以后面直接贴出start.S的完整代码,大家结合流程图相信都可以看明白,至于逐句汇编的分

8、析不是本文的重点。见图3.图35.代码注释relocate_done:/ 搬迁完成1. 2. 3. bx lr /即跳转到lr中存放的地址处。4. 5. _rel_dyn_start_ofs:/*r2-reldynstartofs*/r2=0x64854(反汇编)6. .word _rel_dyn_start - _start7. _rel_dyn_end_ofs:r3end/r3=0x6d104(反汇编)8. .word _rel_dyn_end - _start9. _dynsym_start_ofs:r10symtable/r10=0x6d104(反汇编)10. .word _dynsy

9、m_start - _start11. ENDPROC(relocate_code)12. 13. #endif/预编译14. 15. ENTRY(c_runtime_cpu_setup)/进入CPu启动16. /*17. * If I-cache is enabled invalidate it18. */19. #ifndef CONFIG_SYS_ICACHE_OFF /结束预编译 mcr p15, 0, r0, c7, c5, 0 invalidate icache/ARM的协处理命令20. mcr p15, 0, r0, c7, c10, 4 DSB/ARM的协处理命令21. mcr

10、 p15, 0, r0, c7, c5, 4 ISB/ARM的协处理命令22. 23. #endif/预编译24. /*25. * Move vector table/移动向量表26. */27. #if !defined(CONFIG_TEGRA20)/结束预编译28. /* Set vector address in CP15 VBAR register */29. ldr r0, =_start/从内存中读出30. add r0, r0, r9 /三项相加31. mcr p15, 0, r0, c12, c0, 0 Set VBAR/协处理32. #endif /* !Tegra20 *

11、/结束预编译33. 34. bx lr/跳转到lr35. 36. ENDPROC(c_runtime_cpu_setup)/cpu开始37. 38. /*39. *40. * void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3)/无效启动参数保存41. * _attribute_(weak);42. *43. * Stack pointer is not yet initialized at this moment/堆栈指针尚未初始化44. * Dont save anything to stack even if compiled wit

12、h -O0/不保存任何堆栈即使编译45. *46. */47. ENTRY(save_boot_params)/48. bx lr back to my caller49. ENDPROC(save_boot_params)/保存引导50. .weak save_boot_params /51. 52. /*心得体会这次实验让我认识到了自己的不足。还有许多可以改进。看门狗定时器编程播放儿歌小二郎,对音乐节拍的把控不足,还有对程序延时的理解,使我走了很多弯路,但是也让我学习到了很多新东西。按键中断控制串口因为SW7,SW8的地址不知道,尝试了很久才成功运行。以上便是我在这次嵌入式技术与应用课程设计中国的心得体会。

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

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