- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
系统引导程序代码注释
第3章的附录 系统引导程序的代码
下面是一个基于S3C2410芯片的嵌入式系统引导(启动)程序Startup.s文件中的汇编源程序。通过对这段程序的分析,巩固所学的汇编指令知识,并学习嵌入式系统引导程序的编写方法。程序中各条指令及指示符的具体含义请参照3.1节和3.3.1小节中的说明。
;Startup Code for S3C2410 : Startup.s
;下面指令包含2410addr.s文件,该文件中定义了S3C2410内部寄存器地址对应的变量。
GET 2410addr.s
; 某些ARM920T CPSR寄存器位的定义,定义了部分常量。
USERMODE EQU 0x10 ; USERMODE等都是一些常量名称
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK EQU 0x1f
NOINT EQU 0xc0
;定义IRQ和FIQ相关的寄存器
I_Bit * 0x80
F_Bit * 0x40
; 定义MMU相关的寄存器。
CtrlMMU * 1
CtrlAlign * 2
CtrlCache * 4
CtrlWBuff * 8
CtrlBigEnd * 128
CtrlSystem * 256
CtrlROM * 512
TLB_L0_INIT * 0x0C02
;AREA指示汇编器汇编一段新的代码,为保证下面的代码为起始代码,应在ARM连接器的layout选项中指明Startup.o(Init) (如图1-33所示),或用scatter格式的描述性文件说明。
AREA Init,CODE,READONLY
;IMPORT提供汇编器在当前汇编中未曾定义的符号名。
IMPORT __use_no_semihosting_swi
IMPORT Enter_UNDEF
IMPORT Enter_SWI
IMPORT Enter_PABORT
IMPORT Enter_DABORT
IMPORT Enter_FIQ
;下面ENTRY指明了程序的入口,在应用程序中有且只有一个程序入口。
ENTRY
;下面是异常向量表,第一条语句是复位异常对应的跳转指令。
b ColdReset ;复位
b Enter_UNDEF ;未定义指令错误
b Enter_SWI ;软件中断
b Enter_PABORT ;预取指令错误
b Enter_DABORT ;数据存取错误
b . ;一个保留的中断向量
b IRQ_Handler ;IRQHandler
b Enter_FIQ ;FIQHandler
;处理IRQ中断
EXPORT IRQ_Handler ;导入 IRQ_Handler
IRQ_Handler ;IRQ中断处理函数
IMPORT ISR_IrqHandler ;导入ISR_IrqHandler
STMFD sp!, {r0-r12, lr} ;寄存器入栈
BL ISR_IrqHandler ;跳转到ISR_IrqHandler函数
LDMFD sp!, {r0-r12, lr};寄存器出栈
SUBS pc, lr, #4 ;返回
;系统上电或复位后跳转到此处开始进行运行。
EXPORT ColdReset
ColdReset
;关看门狗定时器
ldr r0,=WTCON ;R0=WTCON,后面有类似的操作时注释略
ldr r1,=0x0 ;R1=0
str r1,[r0] ;将R1的内容存入R0
;关所有中断
ldr r0,=INTMSK
ldr r1,=0xffffffff ;关闭所有中断
str r1,[r0] ;将R1的内容存入R0
ldr r0,=INTSUBMSK
ldr r1,=0x7ff ;关闭所有子中断
str r1,[r0] ;将R1的内容存入R0
;初始化堆栈
bl InitStacks ;跳转到InitStacks设置各模式的堆栈
;复制excption table到SRAM0x0地址处
;导入相应的标号
IMPORT |Load$$EXCEPTION_EXEC$$Base|
IMPORT |Image$$EXCEPTION_EXEC$$Base|
IMPORT |I
文档评论(0)