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

上传人:b****3 文档编号:27056090 上传时间:2023-06-26 格式:DOCX 页数:16 大小:899.13KB
下载 相关 举报
嵌入式课程设计实验报告.docx_第1页
第1页 / 共16页
嵌入式课程设计实验报告.docx_第2页
第2页 / 共16页
嵌入式课程设计实验报告.docx_第3页
第3页 / 共16页
嵌入式课程设计实验报告.docx_第4页
第4页 / 共16页
嵌入式课程设计实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

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

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

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

嵌入式课程设计实验报告

《嵌入式系统开发技术》

——课程设计(实习)报告

 

信息工程学院编制

任务项目2按键中断控制串口3

1.目的3

2.内容3

3.要求3

任务项目3PWM控制蜂鸣器以及通过串口控制其频率6

1.目的6

2.内容6

3.要求6

任务项目4看门狗定时器编程9

1.目的9

2.内容9

3.要求9

任务项目5u-boot源码详细分析12

1.目的12

2.内容12

3.要求12

4.附录12

5.代码注释15

心得体会18

 

任务项目2按键中断控制串口

1.目的

(1)熟悉裸机按键中断的发生及通过串口输出字符过程。

2.内容

独立编写程序实现:

(1)当按下按键SW7时发生中断,设计中断服务函数使得蜂鸣器鸣响同时串口输出SW7。

(2)当按下按键SW8时发生中断,设计中断服务函数使得蜂鸣器结束鸣响同时串口输出SW8;

3.要求

请将实验过程截图黏贴到下面的空白处。

 

任务项目3PWM控制蜂鸣器以及通过串口控制其频率

1.目的

(1)熟悉裸机下PWM定时器、串口程序的编写。

2.内容

(1)参照课本程序调试运行使得PWM定时器能控制蜂鸣器;

(2)加入串口程序使得当在串口输入“A”和“B”时蜂鸣器能以不同的频率鸣响。

提示:

可参看教材中断这一章编写程序。

3.要求

请将实验过程截图黏贴到下面的空白处。

 

任务项目4看门狗定时器编程

1.目的

(1)熟悉裸机下看门狗定时器程序的编写、测试及运行。

2.内容

(1)参看课本程序,调试运行,实现通过定时器精确控制蜂鸣器延时1秒钟;

(2)控制蜂鸣器鸣响使之模仿简单歌曲《读书郎》。

提示:

参看系统时钟和定时器这一章编写程序。

3.要求

请将实验过程截图黏贴到下面的空白处。

 

任务项目5u-boot源码详细分析

1.目的

(1)熟悉u-boot工程的总体结构。

(2)熟悉u-boot的流程、主要的数据结构、内存分配。

(3)熟悉u-boot的重要细节,主要分析流程中各函数的功能。

2.内容

S5PV210u-boot源码分析

3.要求

请添加u-boot源码注释,查看相关数据手册,添加代码注释,以实验台为基数,每组完成i部分的50行代码。

注释添加示例:

Start.S中一段程序:

.globl_start

_start:

  b       reset        //b是跳转指令,即跳转到reset标签处。

接着返回到此处。

     ldr  pc,_undefined_instruction//设置中断向量表 0x00x4.....0x80xc

     ldr  pc,_software_interrupt

     ldr  pc,_prefetch_abort

     ldr  pc,_data_abort

     ldr  pc,_not_used

     ldr  pc,_irq

     ldr  pc,_fiq

4.附录

1.u-boot启动流程

1.1启动阶段分为3个,bl0,bl1,bl2。

下面只是就功能方面对它们做说明,实际设计的时候,也许会对其具体功能做出调整,也就是说,这几个阶段的划分是就功能而言的,不能看得太死。

   bl0:

出厂的时候就固化在irom中一段代码,主要负责拷贝8kb的bl1到s5pv210的一个96kb大小内部sram(InternalSRAM)中运行。

值得注意的是s5pv210的InternalSRAM支持的bl1的大小可以达到16kb,容量的扩增是为了适应bootloder变得越来复杂而做的。

虽然如此,但目前我们制作出来的bl1的大小仍然可以保持在8kb以内,同样能满足需求。

   bl1:

u-boot的前8kb代码(s5pv210也支持16kb大小,原因上一点提过了),除了初始化系统时钟和一些基本的硬件外,主要负责完成代码的搬运工作(我设计成搬运bl1+bl2,而不仅仅是bl2),也就是将完整的u-boot代码(bl1+bl2)从nandflash或者mmcSD等的存储器中读取到内存中,然后跳转到内存中运行u-boot。

   bl2:

完成全面的硬件初始化和加载OS到内存中,接着运行OS。

上述几个阶段的流程描述在s5pv210_irom_application手册中有详细描述。

见下图1:

图1

1.2首先把启动部分的代码分为3部分,以start.S为主,另外还有lowlevel_init.S,mem_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(需要自己修改)

   lowlevel_init.S:

/board/samsung/zsy210/ lowlevel_init.S (需要自己修改)

   mem_setup.S:

 /board/samsung/zsy210/ mem_setup.S  (u-boot没有,需要自己添加)

   ctr0.S:

      /arch/arm/lib/ctr0.S (u-boot自带,一般不需要修改)

2.启动过程原理

    必须要明白的一点是,当代码从存储介质(nandflash,SD,norflash,onenand等)中搬运到了DRAM中后随即会跳转到内存中运行u-boot,接着会有一个重定位(relocate_code)的过程,relocate_code子函数在start.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的完整代码,大家结合流程图相信都可以看明白,至于逐句汇编的分析不是本文的重点。

见图3.

图3

5.代码注释

relocate_done:

//搬迁完成

1.

2. 

3.bxlr//即跳转到lr中存放的地址处。

4. 

5._rel_dyn_start_ofs:

/* r2 <- rel dyn start ofs */ //r2=0x64854(反汇编) 

6..word__rel_dyn_start-_start /* r2 <- rel dyn start ofs */ //r2=0x64854(反汇编)  

7._rel_dyn_end_ofs:

 /* r3 <- rel dyn end ofs */ //r3=0x6d104(反汇编)  

8..word__rel_dyn_end-_start

9._dynsym_start_ofs:

/* r10 <- sym table ofs */ //r10=0x6d104(反汇编)

10..word__dynsym_start-_start

11.ENDPROC(relocate_code)

12. 

13.#endif//预编译

14. 

15.ENTRY(c_runtime_cpu_setup)//进入CPu启动

16./*

17.*IfI-cacheisenabledinvalidateit

18.*/

19.#ifndefCONFIG_SYS_ICACHE_OFF//结束预编译

mcrp15,0,r0,c7,c5,0@invalidateicache//ARM的协处理命令

20.

mcrp15,0,r0,c7,c10,4@DSB//ARM的协处理命令

21.

mcrp15,0,r0,c7,c5,4@ISB//ARM的协处理命令

22.

23.#endif//预编译

24./*

25.*Movevectortable//移动向量表

26.*/

27.#if!

defined(CONFIG_TEGRA20)//结束预编译

28./*SetvectoraddressinCP15VBARregister*/

29.ldrr0,=_start//从内存中读出

30.addr0,r0,r9//三项相加

31.mcrp15,0,r0,c12,c0,0@SetVBAR//协处理

32.#endif/*!

Tegra20*///结束预编译

33. 

34.bxlr//跳转到lr

35. 

36.ENDPROC(c_runtime_cpu_setup)//cpu开始

37. 

38./*************************************************************************

39.*

40.*voidsave_boot_params(u32r0,u32r1,u32r2,u32r3)//无效启动参数保存

41.*__attribute__((weak));

42.*

43.*Stackpointerisnotyetinitializedatthismoment//堆栈指针尚未初始化

44.*Don'tsaveanythingtostackevenifcompiledwith-O0//不保存任何堆栈即使编译

45.*

46.*************************************************************************/

47.ENTRY(save_boot_params)//

48.bxlr@backtomycaller

49.ENDPROC(save_boot_params)//保存引导

50..weaksave_boot_params//

51. 

52./************************************************************

 

心得体会

这次实验让我认识到了自己的不足。

还有许多可以改进。

看门狗定时器编程播放儿歌小二郎,对音乐节拍的把控不足,还有对程序延时的理解,使我走了很多弯路,但是也让我学习到了很多新东西。

按键中断控制串口因为SW7,SW8的地址不知道,尝试了很久才成功运行。

以上便是我在这次嵌入式技术与应用课程设计中国的心得体会。

 

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

当前位置:首页 > 经管营销 > 经济市场

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

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