网站大量收购独家精品文档,联系QQ:2885784924

BOOTLOADER程序设计汇.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
BOOTLOADER程序设计汇

BOOTLOADER程序设计 内容提要 1 为什么要写启动代码 2 两种启动方式以及其中的区别 3 启动代码的功能与实现 4 启动代码编写 1.为什么要编写启动代码 2.两种启动方式以及其中的区别 2.1 Nor FLASH启动代码运行方式 从Nor FLASH启动时,与nGCS0相连的Nor FLASH就被映射到了nGCS0片选的空间,其地址被映射为0 因为Nor FLASH支持系统运行,所以不必考虑程序的搬移,只需保证系统上电后或者复位时代码从0开始即可。 2.2 Nand FLASH启动代码运行方式 从Nand FLASH启动时,芯片内部自带一块容量为4K的BootSRAM会被映射到nGCS0片选的空间,起始地址被映射为0因此,编写的启动代码要保证在0开始的地址处。 系统上电后,BootSRAM没有任何代码,ARM芯片通过硬件机制将Nand FLASH前4K的内容拷贝到其中,然后在BootSRAM中运行这4K的代码(0地址处),此种情况下要保证启动代码放在Nand FLASH的0地址处,启动代码要小于4K(只要RAM初始化,搬移程序小于4K即可)。 所有程序编译链接后代码量小于4K时,程序不用考虑从Nand FLASH搬移到SDRAM的问题,因为所有程序在启动时已全部在BootSRAM中,运行即可。 所有程序编译链接后代码量大于4K时,启动代码不只要有初始化内容,还要有一段搬移代码,将全部程序从Nand FLASH搬移到SDRAM,也就是系统启动时需要两次搬运,第一次将前4K搬移到BootSRAM,第二次将所有代码搬移到SDRAM中,其中第一次无需人工干预,硬件机制自动实现,第二次需要程序员编写代码实现。 3.启动代码的功能与实现 启动代码的主要功能 1.建立异常向量表 2.初始化系统堆栈 3.初始化硬件 4.应用程序执行环境初始化 5.跳转至主函数 3.1 异常向量表的建立 异常向量表位于启动代码的起始部分,是用户程序与启动代码之间以及启动代码的各个部分之间联系的纽带。 它由一个个跳转函数组成,当系统发生异常时,ARM处理器会通过硬件机制强行将PC指针指向异常向量表中对应的异常跳转函数存储地址,之后跳到相应的异常中断服务程序中执行。 3.1.1正常上电或者复位的运行 ARM要求异常向量表必须存储在0地址,当开发板上电或者复位时,PC会指向0地指出,进而跳到复位异常处理函数ResetHandler,这个函数负责完成系统的初始化,即初始化堆栈、初始化硬件、初始化应用程序执行环境、跳至主函数。 3.1.2未定义异常处理函数 当ARM处理器不认识当前指令时,就会将该指令发送至协处理器,如果协处理器也不认识就会产生未定义异常。 未定义异常后,CPU会将函数的返回地址及此时的CPSR保存到未定义异常专用的R14和SPSR中,然后在修改CPSR使系统进入未定义异常模式运行,PC被强制指向0然后程序就跳至未定义异常的处理函数,上述过程由硬件实现不需人工干预。 3.1.3 软中断异常处理函数 软件中断异常是由用户定义的中断指令,用于用户模式下的程序调用特权模式下的操作指令,例如修改CPSR值,从而进入其他特权模式等。 处理器相应SWI异常的流程: 1.保存CPSR,R14 2.修改CPSR进入管理模式,进制IRQ中断 3.强制PC转向0并跳入软中断异常处理函数。 SWI中断举例 3.1.4取指终止异常处理函数 当处理器预取的指令地址不存在或者地址不允许当前指令访问,产生该异常。 处理的方式 1. 异常地址之前的指令正常执行,到该指令发生异常。 2. 处理返回地址(PC-4)以及保存CPSR 3.切换模式到取指异常模式 4.强制PC转向0x0000000c,并跳入处理函数 通常只要不涉及MMU,一般处理函数为死循环。 3.1.5数据中止异常处理函数 产生条件:数据访问指令的目标地址不存在或者该地址不允许此指令访问。 处理方式同取指终止异常 3.1.6 IRQ中断异常处理函数 ARM内核为了处理外部设备向CPU发出的服务请求,尤其是一些紧急事件而特别作出的设计,来中断时进中断处理中断函数,结束后返回继续执行主程序。 条件:外部中断请求引脚拉低,IRQ中断使能(I位清零) 处理方式 1. 保存CPSR和返回地址到专用的R14以及SPSR 2.修改CPSR禁止新的IRQ产生,切换模式到IRQ模式 3.强制PC转向0并跳入处理函数 注意事项: 编写IRQ中断处理程序是,要注意中断的重入性,即在有些IRQ中断处理函数中,允许新的IRQ产生,但这种情况会刷新掉一些以前的寄存器值,例如LR,

文档评论(0)

liwenhua11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档