嵌入式课程设计报告完整版

上传人:ba****u 文档编号:188060358 上传时间:2023-02-17 格式:DOCX 页数:11 大小:90.99KB
收藏 版权申诉 举报 下载
嵌入式课程设计报告完整版_第1页
第1页 / 共11页
嵌入式课程设计报告完整版_第2页
第2页 / 共11页
嵌入式课程设计报告完整版_第3页
第3页 / 共11页
资源描述:

《嵌入式课程设计报告完整版》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告完整版(11页珍藏版)》请在装配图网上搜索。

1、目录刖言2一、U-Boot 分析31、引导程序U-Boot第一阶段分析32、引导过程43、程序流程图8二、程序设计8三、心得体会9前言ARM嵌入式处理器已被广泛应用于消费电子厂品、无线通信、网络通信和 工业控制等领域。在嵌入式操作系统中,Linux、Vxworks、WinCE三足鼎立, 其中Linux由于其开源性、稳定性、安全性、可裁剪性更是一支独秀。在嵌入式 系统中,如何实现在ARM平台下Linux操作系统的引导工作是嵌入式技术开发 的重要环节。BootLoader就是在操作系统内核运行之前运行的一段小程序。通过 这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软 硬件环

2、境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。 在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在 上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通 常就是系统的BootLoader程序。一、U-Boot 分析嵌入式Linux系统中常用的Bootloader引导程序有U-Boot, redboot, blob和 vivii等,其中U-Boot遵循GPL条款的开放源码项目

3、,功能最为强大,U-Boot对 PowerPC系列处理器支持最丰富,同时还支持MIPS,x86,ARM,XScale等诸多常 用系列的处理器;U-Boot引导程序分为Stage 1和Stage2量大部分,Stagel中主 要包括设备初始化、中断设置、时间设置和储存器初始化等工作,并且采用汇编 语言实现,而一些通用功能大多采用C语言实现,放在Stage2中。1、引导程序U-Boot第一阶段分析Stagel的代码在CPU/arm920t/start.s中定义,它包括从系统上电后在 0x00000000地址开始执行的部分。这部分代码系统启动后,从NADA FLASH 自动加载到SDRAM中,它包括S

4、3C2410A中寄存器的初始化和将U-Boot 的Stage2代码从FLASH拷贝到SDRAM。Stage2的起始地址是在Stagel代 码中指定的,被复制到SDRAM后,就从第一阶段跳到这个入口地址,开始 执行剩余部分代码;其系统工作图如下:2、引导过程U-Boot启动内核的过程可以分成为两个阶段,但在本次课程设计中我们只 对其的第一个阶段代码进行分析。第一阶段的功能主要包括硬件设备初始化,加 载U-Boot第二阶段代码到RAM空间,设置好栈,跳转到第二阶段代码入口。 第一阶段对应的文件是 cpu/arm920t/start.S 和 board/samsung/mini2440 /lowle

5、vel_init.S,当系统上电后第一个链接的是cpu/arm920t/start.o,进而执行其 代码。1)设置异常向量,从而保证系统上电后出现异常时,CPU根据异常号在异 常向量表中找到对应的异常向量,然后执行异常向量处的跳转指令,CPU就 跳转到对应的异常处理程序执行;2)设置CPU模式为SVC模式并将中断禁止位和快中断禁止位置一,从而屏蔽了 IRQ和FIQ中断;mrs r0,cpsrbic r0,r0,#0x1forr r0,r0,#0xd3msr cpsr,r03) 设置控制寄存器地址#if defined(CONFIG_S3C2410A)# define pWTCON 0x1530

6、0000# define INTMSK 0x14400008 /* Interupt-Controller base addresses */# define CLKDIVN 0x14800014 /* clock divisor register */#eli f defined(CONFIG_S3C2410A)# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */# define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4

7、C000014 /* clock divisor register */#endif4) 设置关闭看门狗:LDR R0, =PwtconMOV R1,#0x0STR R1, R0以上代码向看门狗控制寄存器写入0,关闭看门狗。否则在U-Boot启动过程中, CPU将不断重启。5) 设置主中断屏蔽寄存器,禁止所以中断,INTMSK是主中断屏蔽寄存器,每 一位对应SRCPND (中断源引脚寄存器)中的一位,表明SRCPND相应位代表 的中断请求是否被CPU所处理。mov r1, #0xffffffffldr r0, =INTMSKstr r1, r0 关闭所有6) 设置MPLLCON,UPLLCON

8、, CLKDIVN ,CPU上电几毫秒后,晶振输出稳定, FCLK=Fin (晶振频率),CPU开始执行指令。但实际上,FCLK可以高于Fin, 为了提高系统时钟,需要用软件来启用 PLL。这就需要设置 CLKDIVN, MPLLCON,UPLLCON 这 3 个寄存器。#if defined(CONFIG_S3C2410A) II defined(CONFIG_S3C2410)ldrr0, =pWTCONmov r1, #0x0strr1, r0 /关闭 watchdogmov r1, #0xffffffffldr r0, =INTMSKstr r1, r0 关闭所有的中断# if defi

9、ned(CONFIG_S3C2410A)ldr r1, =0x3ffldr r0, =INTSUBMSKstr r1, r0 关闭所有的中断# endif/* FCLK:HCLK:PCLK = 1:2:4 */* default FCLK is 120 MHz ! */设置 HCLK 为 FCLK/2, PCLK 为 FCLK/4, FCLK 为 CPU 产生 clock,HCLK 为AHB总线上的设备产生/clock, PCLK为APB总线上的设备产生clock,7) 初始化RAM控制寄存器,在程序代码中lowlevel_init是来完成内存初始化的 工作,由于内存初始化是依赖于开发板的,因

10、此lowlevel_init的代码一般放在 board 下面相应的目录中(lowlevel_init 在 board/samsung/mini2440/lowlevel_init.S 中定义)。U-Boot在NAND Flash启动时,lowlevel_init.o将自动被读取到CPU 内部4KB的内部RAM中。因此第137146行的代码将从CPU内部RAM中复 制寄存器的值到相应的寄存器中。对于U-Boot在NOR Flash启动的情况,由于 U-Boot连接时确定的地址是U-Boot在内存中的地址,而此时U-Boot还在NOR Flash中,因此还需要在NOR Flash中读取数据到RAM

11、中。由于NOR Flash的 开始地址是0,而U-Boot的加载到内存的起始地址是TEXT_BASE,SMRDATA 标号在Flash的地址就是SMRDATA-TEXT_BASE。综上所述,lowlevel_init的 作用就是将SMRDATA开始的13个值复制给开始地址BWSCON的13个寄存 器,从而完成了存储控制器的设置。8) 复制U-Boot第二阶段代码到RAM,由于cpu/arm920t/start.S原来的代码是只 支持从NOR Flash启动的,所以要修改现在U-Boot的NOR Flash和NAND Flash 上就能启动了。而U-Boot的启动可能是在NAND Flash启动

12、或NOR Flash启动, 所以在启动程序中要专门一段程序来对启动方式进行判定。无论是从NOR Flash 还是从NAND Flash启动,地址0处为U-Boot的第一条指令“ b start_code”,对 于从NAND Flash启动的情况,其开始4KB的代码会被自动复制到CPU内部4K 内存中,因此可以通过直接赋值的方法来修改;对于从NOR Flash启动的情况, NOR Flash的开始地址即为0,必须通过一定的命令序列才能向NOR Flash中写 数据,所以可以根据这点差别来分辨是从NAND Flash还是NOR Flash启动:向 地址0写入一个数据,然后读出来,如果发现写入失败的

13、就是NOR Flash,否则 就是 NAND Flasho9) 设置堆栈stack_setup:ldr r0, _TEXT_BASEsub r0, r0, #CFG_MALLOC_LENsub r0, r0, #CFG_GBL_DATA_SIZE#ifdef CONFIG_USE_IRQsub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)#end ifsub sp, r0, #12只要将sp指针指向一段没有被使用的内存就完成栈的设置了。根据上面的代码 可以知道U-Boot内存使用情况了,如下图所示:l_LLX1 I5ASLRAMI困

14、MniolLnE)尚! I 琉.域smdk24L0fft直个区域nlw i.t-stEick I瓦域12个亍节低地址11)清除BSS段,初始值为0,无初始值的全局变量,静态变量将自动被放在BSS 段。应该将这些变量的初始值赋为0,否则这些变量的初始值将是一个随机的值, 若有些程序直接使用这些没有初始化的变量将引起未知的后果。clear_bss:ldr r0, _bss_startIdr r1, _bss_endmov r2, #0x00000000clbss_l:str r2, r0add r0, r0, #4cmp r0, r1ble clbss_l12)跳转到第二阶段代码入口,当程序执行到

15、ldr pc, _start_armboot跳转指令时跳 转到第二阶段代码入口 start_armboot处。ldr pc, _start_armboot跳转到_start_armboot 处执行。_start_armboot: .word start_armboot3、程序流程图U-Boot第一阶段启动程序流程图如下:二、程序设计按照实验设计要求自主设计一个简单的引导程序,要求设置中断向量 表、堆栈初始化和准备C环境,最后跳到C程序main函数入口点。 程序如下所示:.globl _start_start: b reset复位向量Idr pc, _undefined_instructionI

16、dr pc, _software_interruptldr pc, _prefetch_abortldr pc, _data_abortldr pc, _not_usedldr pc, _irq中断向量ldr pc, _fiq快速中断向量_undefined_instruction: .word undefined_instruction_software_interrupt:.word software_interrupt_prefetch_abort: .word prefetch_abort_data_abort:.word data_abort_not_used:.word not_u

17、sed_irq:_fiq:.word irq.word fiqstack_setup:Idr r0, _TEXT_BASEub r0, r0, #CFG_MALLOC_LENsub r0, r0, #CFG_GBL_DATA_SIZE#ifdef CONFIG_USE_IRQsub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)#end ifsub sp, r0, #12B CmainCmainEXPORT DMAINAREA DMAIN, CONE,READONLYIMPOPT CmainENDMain()int a=1;while(

18、a);三、心得体会通过此次课程设计,使我更加扎实的掌握了有关嵌入式技术方面的知识,在设计过程中 虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在, 也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我 们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟, 不断获取。最终的检测调试环节,本身就是在践行过而能改,善莫大焉”的知行观。这次课 程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。 在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要

19、退缩,一定 要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才 能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永 远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道 课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触 很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了常用元件的识别和 测试;熟悉了常用仪器、仪表;了解了电路的连线方法;以及如何提高电路的性能等等,掌 握了焊接的方法和技术,通过查询资料,也了解了收音机的构造及原理

20、。我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也 都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的, 真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我 们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情, 发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加 成熟,会面对需要面对的事情。回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于 甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到

21、了很 多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要 的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出 结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过 程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会 喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要 认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!