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

理解ARM启动代码(ADS).pdf

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

理解启动代码(ADS) 所谓启动代码,就是处 器在启动的时候执行的一段代码,主要任务是初始化处 器模 式,设置堆栈,初始化变量等等.由于以上的操作均与处 器体系结构和系统配置密切相关,所 以一般由汇编来编写. 具体到S64,启动代码分成两部分,一是与ARM7TDMI 内核相关的部分,包括处理器各异常 向量的配置,各处理器模式的堆栈设置,如有必要,复制向量到 RAM,以便 remap 之后处理器 正确处 异常,初始化数据(包括 RW 与ZI),最后跳转到 Main.二是与处理器外部设备相关的 部分,这和厂商的联系 较大.虽然都采用了ARM7TDMI 的内核,但是不同的厂家整合了不同 的片上外设,需要不同的初始化,其中 较重要的是初始化 WDT,初始化各子系统时钟,有必要 的话,进行remap.这一部分与一般控制器的初始化类似,因此,本文不作重点描述. 在进行分析之前,请确认如下相关概念: S64 片上FLASH 起始于0x100000,共64kB,片上RAM 起始于0x200000,共16kB. S64 复位之后,程序会从0 开始执行,此时FLASH 被映射到0 地址,因此,S64 可以取得指令并 执行.显然,此时还是驻留在0x100000 地址.如果使用remap 命令,将会把 RAM 映射到0 地 址,同样的这时0 地址的内容也只是 RAM 的镜像. S64 的FLASH 可以保证在最差情况时以30MHz 进行单周期访问,而RAM 可以保证在最大 速度时的单周期访问. OK,以下开始分析启动代码. 一,处 器异常 S64 将异常向量至于 0 地址开始的几个直接,这些是必需要处理的.由于复位向量位于 0,也需要一条跳转指令.具体代码如下: RESET B SYSINIT ; Reset B UDFHANDLER ; UNDEFINED B SWIHANDLER ; SWI B PABTHANDLER ; PREFETCH ABORT B DABTHANDLER ; DATA ABORT B . ; RESERVED B VECTORED_IRQ_HANDLER B . ; ADD FIQ CODE HERE UDFHANDLER B . SWIHANDLER B . PABTHANDLER B . DABTHANDLER B . 请注 ,B 指令经汇编后会替换为当前 PC 值加上一个修正值(+/-),所以这条指令是代码位置 无关的,也就是不管这条指令是在 0 地址还是在 0x100000 执行,都能跳转到指定的位置,而 LDR PC,=???将向PC直接装载一个标号的值,请注 ,标号在编译过后将被替换为一个与RO 相对应的值,也就是说,这样的指令无论在哪里执行,都只会跳转到一个指定的位置.下面举一 个具体的例子来说明两者的区别: 假定有如下程序: RESET B INIT 或者 LDR PC, =INIT … INIT … 其中RESET 为起始时的代码,也就是这条代码的偏移为0,设INIT 的偏移量为offset. 如果将这段程序按照RO=0x1000000编译, 那么B INIT 可理解为ADD PC, PC, #offset, 而 LDR PC,=INIT 可被理解为 MOV PC,#(RO+offset) .显然当系统复位时,程序

文档评论(0)

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

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档