欢迎来到第一文库网! | 帮助中心 第一文库网-每个人都是第一
第一文库网
全部分类
  • 研究报告>
  • 学术论文>
  • 全科教育>
  • 应用文档>
  • 行业资料>
  • 企业管理>
  • 技术资料>
  • 生活休闲>
  • ImageVerifierCode 换一换
    首页 第一文库网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:84010       资源大小:127.73KB        全文页数:10页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    扫码关注公众号登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    目录前言2一、U-Boot 分析31、引导程序U-Boot第一阶段分析32、引导过程43、程序流程图8二、程序设计8三、心得体会9前言ARM嵌入式处理器已被广泛应用于消费电子厂品、无线通信、网络通信和工业控制等领域。在嵌入式操作系统中,Linux、Vxworks、WinCE三足鼎立,其中Linux由于其开源性、稳定性、安全性、可裁剪性更是一支独秀。在嵌入式系统中,如何实现在ARM平台下Linux操作系统的引导工作是嵌入式技术开发的重要环节。BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader 程序。一、U-Boot 分析嵌入式Linux系统中常用的Bootloader引导程序有U-Boot, redboot, blob和vivii等,其中U-Boot遵循GPL条款的开放源码项目,功能最为强大,U-Boot对PowerPC系列处理器支持最丰富,同时还支持MIPS, x86, ARM, XScale等诸多常用系列的处理器;U-Boot引导程序分为Stagel和Stage2量大部分,Stagel中主要包括设备初始化、中断设置、时间设置和储存器初始化等工作,并且采用汇编语言实现,而一些通用功能大多采用C语言实现,放在Stage2中。1、引导程序U-Boot第一阶段分析Stagel的代码在CPU/arm920t/start. s中定义,它包括从系统上电后在0x00000000地址开始执行的部分。这部分代码系统启动后,从NADA FLASH自动加载到SDRAM中,它包括S3C2410A中寄存器的初始化和将U-Boot的Stage2代码从FLASH拷贝到SDRAMo Stage2的起始地址是在Stagel代码中指定的,被复制到SDRAM后,就从第一阶段跳到这个入口地址,开始执行剩余部分代码;其系统工作图如下:2、引导过程U-Boot启动内核的过程可以分成为两个阶段,但在本次课程设计中我们只对其的第一个阶段代码进行分析。第一阶段的功能主要包括硬件设备初始化,加载U-Boot第二阶段代码到RAM空间,设置好栈,跳转到第二阶段代码入口。第一阶段对应的文件是 cpu/ann920t/start. S 和 board/samsung/mini2440/lowlevel_init. S,当系统上电后第一个链接的是cpu/arm920t/start, o,进而执行其代码。1)设置异常向量,从而保证系统上电后出现异常时,CPU根据异常号在异常向量表中找到对应的异常向量,然后执行异常向量处的跳转指令,CPU就跳转到对应的异常处理程序执行;2)设置CPU模式为SVC模式并将中断禁止位和快中断禁止位置一,从而屏蔽了 IRQ和FIQ中断;mrs rO,cpsrbic rO,rO,#0xlforr r0,r0,#0xd3msr cpsr,rO3)设置控制寄存器地址#if defined(C0NFIG_S3C2410A)tt define pWTCON 0x15300000# define INTMSK 0x14400008 /* Interupt-Controller base addresses */# define CLKDIVN 0x14800014 /* clock divisor register */#elif defined(C0NFIG_S3C2410A)# define pWTCON 0x53000000tt define INTMSK 0x4A000008 /* Interupt-Controller base addresses */tt define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clock divisor register */ttendif4)设置关闭看门狗:LDR R0, =PwtconMOV RI,#0x0STR RI, R0以上代码向看门狗控制寄存器写入0,关闭看门狗。否则在u-Boot启动过程中,CPU将不断重启。5)设置主中断屏蔽寄存器,禁止所以中断,INTMSK是主中断屏蔽寄存器,每一位对应SRCPND (中断源引脚寄存器)中的一位,表明SRCPND相应位代表的中断请求是否被CPU所处理。mov rl, ttOxffffffffIdr rO,二INTMSKstr rl, rO 关闭所有6)设置MPLLCON,UPLLCON, CLKDIVN ,CPU上电几毫秒后,晶振输出稳定,FCLK二Fin(晶振频率),CPU开始执行指令。但实际上,FCLK可以高于Fin,为了提高系统时钟,需要用软件来启用PLL。这就需要设置CLKDIVN, MPLLCON, UPLLCON这3个寄存器。#if defined (CONFIG S3C2410A) | | defined (CONFIG S3C2410)Idr rO,=pWTCONmov rl, #0x0str rl, rO 关闭 watchdogmov rl, ttOxffffffffIdr rO, =INTMSKstr rl, rO 关闭所有的中断tt if defined(C0NFIG_S3C241OA)Idr rl, =0x3ffIdr rO, =INTSUBMSKstr rl, rO 关闭所有的中断# 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控制寄存器,在程序代码中lowleveljnit是来完成内存初始化的工作,由于内存初始化是依赖于开发板的,因此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中。由于NOR Flash的开始地址是0,而U-Boot的加载到内存的起始地址是TEXT BASE, SMRDATA标号在Flash的地址就是SMRDATA -TEXT_BASEo综上所述,lowleveljnit的作用就是将SMRDATA开始的13个值复制给不始地址脚SC0N的13个寄主器,从而完成了存储控制器的设置。8)复制U-Boot第二阶段代码到RAM,由于cpu/arm920t/start. S原来的代码是只支持从NOR Flash启动的,所以要修改现在U-Boot的NOR Flash和NAND Flash上就能启动了。而U-Boot的启动可能是在NAND Flash启动或NOR Flash启动,所以在启动程序中要专门一段程序来对启动方式进行判定。无论是从NOR Flash还是从NAND Flash启动,地址0处为U-Boot的第一条指令“ bstart _code”,对于从NAND Flash启动的情况,其开始4KB的代码会被自动复制到CPU内部4K内存中,因此可以通过直接赋值的方法来修改;对于从NORFlash启动的情况,NOR Flash的开始地址即为0,必须通过一定的命令序列才能向NOR Flash中写数据,所以可以根据这点差别来分辨是从NAND Flash还是NOR Flash启动:向地址0写入一个数据,然后读出来,如果发现写入失败的就是 NOR Flash,否则就是 NAND Flasho9)设置堆栈stack_setup:Idr rO, _TEXT_BASEsub rO, rO, #CFG MALLOC LENsub rO, rO, ttCFGGBL _DATA_SIZEttifdef CONFIG_USE_IRQsub rO, rO, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)ttendifsub sp, rO, #12只要将sp指针指向一段没有被使用的内存就完成栈的设置了。根据上面的代码可以知道U-Boot内存使用情况了,如下图所示:高地址HSSRWROIEXT HASERAM* 城nialloc分配区域存成bdinfb的区域IRQ Stuff 区域$mdk24l01殳这个区域口 bort-stack 区域I12个字节低地址11)清除BSS段,初始值为0,无初始值的全局变量,静态变量将自动被放在BSS段。应该将这些变量的初始值赋为0,否则这些变量的初始值将是一个随机的值,若有些程序直接使用这些没有初始化的变量将引起未知的后果。clear_bss:Idr rl,movclbss_l:stradd rO,Idr r0, bss start_bss_endr2, #0x00000000r2, rOrO, #4cmp rO, rlble clbss 112)跳转到第二阶段代码入口,当程序执行到Idrpc, _start arniboot跳转指令时跳转到第二阶段代码入口 start_armboot处。Idr pc, start armboot跳转到 start armboot 处执行。start armboot: . word start armboot3、程序流程图U-Boot第一阶段启动程序流程图如下:二、程序设计按照实验设计要求自主设计一个简单的引导程序,要求设置中断向量表、堆栈初始化和准备C环境,最后跳到C程序main函数入口点。程序如下所示:.globl _start_start: b reset 复位向量Idr pc, undefined instructionIdr pc, _software_interruptIdr pc, _prefetch_abortIdr pc, _data_abortIdr pc, _not_usedIdr pc, _irq中断向量Idr pc, _fiq快

    注意事项

    本文(嵌入式课程设计报告完整版.docx)为本站会员(lao****ou)主动上传,第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第一文库网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 001doc.com网站版权所有   

    经营许可证编号:宁ICP备2022001085号

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



    收起
    展开