- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2410启动代码startups分析
启动代码start.s(相当于bootloader的前端代码),开机就执行的代码,即0x0000处放置的代码。给CPU一个合适的工作环境。面向CPU内核和外围硬件,所以一般用汇编编写。
1、在起始地址分配中断向量表即中断处理函数(CPU要求的),以为向量空间只有4字节,所以一般只是一个跳转指令,去别处执行。
2、之后初始化存储器系统
3、初始多个模式下的堆栈(模式切换时,硬件给SP置位)
4、初始化有特殊要求的外围设备,如LED灯、看门狗
5、初始化用户的执行环境(在FLASH中运行太慢了,把代码整体搬迁到RAM中)
6、切换处理器的工作模式
7、调用主程序
(没见到有存储控制器的配置代码,也没见到有时钟初始化代码)
下面分析,所给的2410的启动代码实现了以上的那些功能,实现得显然不全,或者不需要,或者在工程代码的其它部分实现。
读程序时注意,所有程序都是逐行顺序执行的,要看清跳转指令。
GET 2410addr.s //用到了2410addr.s中的寄存器地址宏定义
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Some ARM920 CPSR bit discriptions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Pre-defined constants//预定义的变量,一下后续代码中使用方便,与CPSR相关
USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK EQU 0x1f
NOINT EQU 0xc0
I_Bit * 0x80
F_Bit * 0x40
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; MMU Register discription
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;p15 CP 15
;c0 CN 0
;c1 CN 1
;c2 CN 2
;c3 CN 3
CtrlMMU * 1
CtrlAlign * 2
CtrlCache * 4
CtrlWBuff * 8
CtrlBigEnd * 128
CtrlSystem * 256
CtrlROM * 512
;initialization L0 is MMU FULL_ACCESS, DOMAIN, SECTION
TLB_L0_INIT * 0x0C02
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Start here //执行代码从这里开始
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
//IMPORT ,定义表示这是一个外部变量的标号,不是在本程序定义的
//EXPORT ,表示本程序里面用到的变量提供给其他模块调用的。
//以上两个在汇编和C语言混合编程的时候用到
AREA Init,CODE,READONLY
IMPORT __use_no_semihosting_swi
IMPORT Enter_UNDEF //有点extern的感觉
IMPORT Enter_SWI
IMPORT Enter_PABORT
IMPORT Enter_DABORT
IMPORT Enter_FIQ
ENTRY //这是程序的入口
//中断/异常向量表(跳转),上电第一条就执行b ColdReset,跳转到ColdReset。
b ColdReset
b Enter_UNDEF ;UndefinedInstruction
b Enter_SWI ;syscall_handler or SWI
b Enter_PABORT ;PrefetchAbort
b Enter_DABORT ;DataAbort
b . ;ReservedHandler
文档评论(0)