GT2440启动代分析(精).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
GT2440启动代分析(精)

2440INIT.S ;在编写arm汇编语言源程序时要遵循一定的规范,否则编译器会报错。 ;1.在arm汇编程序中,所有的标号必须在一行的顶格写。 ;2.在arm汇编程序中,所有的指令均不能顶格书写,指令前面应该有空格,一 ;般用tab健. ;3.因为arm汇编器对标志符的大小写敏感,因此书写标志及指令时,大小写要 ;一致。在arm汇编程序中,指令、寄存器名可以全部为大写,也可以全部为小 ;写,但是不能大小写混合使用。 ;4.在在arm汇编程序中使用注释,注释内容由“;”开始一直到此行结束,注释 ;可以顶格写. ;5.为了我增加源程序的可读性,在完成不同功能的代码段之间可以适当插入一 ;些空行。 ;6.当单行指令太长时,可以使用字符“\”实现分行,“\”后边不能有任何字符。 ;7.定义变量、常量时,其标识符必须在一行的顶格书写,否则编译器报错。 ;8.函数名需要顶格写. GET option.inc ;定义芯片相关的配置,包含选项说明,如pll等 GET memcfg.inc ;定义存储器相关设置,包含MMU GET 2440addr.inc ;定义寄存器符号和地址 BIT_SELFREFRESH EQU (122) ;用于节电模式中,SDRAM自动刷新 USERMODE EQU 0x10 ;宏定义处理器工作模式 FIQMODE EQU 0x11 IRQMODE EQU 0x12 SVCMODE EQU 0x13 ABORTMODE EQU 0x17 UNDEFMODE EQU 0x1b MODEMASK EQU 0x1f NOINT EQU 0xc0 ;定义各模式的堆栈指针常量用于初始化堆栈sp(R13) ;即使程序只在SRAM中运行(小于4k),当进入某模式时,也会在SDRAM中进行堆栈操作 UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~ SVCStack EQU (_STACK_BASEADDRESS-0x2800);0x33ff5800 ~ UndefStack EQU (_STACK_BASEADDRESS-0x2400);0x33ff5c00 ~ AbortStack EQU (_STACK_BASEADDRESS-0x2000);0x33ff6000 ~ IRQStack EQU (_STACK_BASEADDRESS-0x1000);0x33ff7000 ~ FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~ ;编译模式判定。{CONFIG}是编译器内建变量,编译时自动复制。ADS1.0中 ;{CONFIG}=16(THUMB).ADS1.2中{CONFIG}=32(ARM). GBLL THUMBCODE [ {CONFIG} = 16 THUMBCODE SETL {TRUE} CODE32 ; 用户代码需用CODE16编译,以下还是ARM编译 | THUMBCODE SETL {FALSE} ] ; 寄存器R14又被称为连接寄存器(LR). ;每一种处理器模式在自己的R14中存放当前子程序的返回地址。 ;当通过BL或者BLX指令调用子程序时,R14被设置成该子程序的返回地址。 ;在子程序中,当把R14的值复制到程序计数器PC中时,就实现了子程序返回 MACRO MOV_PC_LR ; 宏定义MOV_PC_LR,作用:子程序返回.不能顶格 [ THUMBCODE bx lr ; 当目标程序是Thumb指令集,就要使用BX 跳转返回 目标程序是ARM 指令集,直接把lr 赋给pc 就可以了 带相等条件判断的子程序返回”判定指令 MOVEQ_PC_LR”.(本程序中未使用) MACRO MOVEQ_PC_LR [ THUMBCODE bxeq lr | moveq pc,lr ] MEND ;在宏定义下面的handlexxx HANDLER handlexxx 都会展成以下的程序段,这段程序主要把中断服务程序的入口地址传送给pc,在程序的用34 字空间来存放中断服务程序的入口地址,每个字空间都会有一个标号,以handlerxxx 开头的。先预留空间,为了存储跳转地址这两句的功能是把中断程序的入口地址先放在中间变量r0 处—r0,中断—pc,sp恢复原来的

文档评论(0)

ikangyme + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档