系统引导程序代码注释

系统引导程序代码注释

ID:20877693

大小:40.50 KB

页数:4页

时间:2018-10-17

系统引导程序代码注释_第1页
系统引导程序代码注释_第2页
系统引导程序代码注释_第3页
系统引导程序代码注释_第4页
资源描述:

《系统引导程序代码注释》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第3章的附录系统引导程序的代码下面是一个基于S3C2410芯片的嵌入式系统引导(启动)程序Startup.s文件中的汇编源程序。通过对这段程序的分析,巩固所学的汇编指令知识,并学习嵌入式系统引导程序的编写方法。程序中各条指令及指示符的具体含义请参照3.1节和3.3.1小节中的说明。;StartupCodeforS3C2410:Startup.s;下面指令包含2410addr.s文件,该文件中定义了S3C2410内部寄存器地址对应的变量。GET2410addr.s;某些ARM920TCPSR寄存器位的定义,定义了部分常量。USERMODEEQU0x10;USERMODE等

2、都是一些常量名称FIQMODEEQU0x11IRQMODEEQU0x12SVCMODEEQU0x13ABORTMODEEQU0x17UNDEFMODEEQU0x1bMODEMASKEQU0x1fNOINTEQU0xc0;定义IRQ和FIQ相关的寄存器I_Bit*0x80F_Bit*0x40;定义MMU相关的寄存器。CtrlMMU*1CtrlAlign*2CtrlCache*4CtrlWBuff*8CtrlBigEnd*128CtrlSystem*256CtrlROM*512TLB_L0_INIT*0x0C02;AREA指示汇编器汇编一段新的代码,为保证下面的代码为起始代

3、码,应在ARM连接器的layout选项中指明Startup.o(Init)(如图1-33所示),或用scatter格式的描述性文件说明。AREAInit,CODE,READONLY;IMPORT提供汇编器在当前汇编中未曾定义的符号名。IMPORT__use_no_semihosting_swiIMPORTEnter_UNDEFIMPORTEnter_SWIIMPORTEnter_PABORTIMPORTEnter_DABORTIMPORTEnter_FIQ;下面ENTRY指明了程序的入口,在应用程序中有且只有一个程序入口。ENTRY;下面是异常向量表,第一条语句是复位异

4、常对应的跳转指令。bColdReset;复位bEnter_UNDEF;未定义指令错误bEnter_SWI;软件中断bEnter_PABORT;预取指令错误bEnter_DABORT;数据存取错误b.;一个保留的中断向量bIRQ_Handler;IRQHandlerbEnter_FIQ;FIQHandler;处理IRQ中断EXPORTIRQ_Handler;导入IRQ_HandlerIRQ_Handler;IRQ中断处理函数IMPORTISR_IrqHandler;导入ISR_IrqHandlerSTMFDsp!,{r0-r12,lr};寄存器入栈BLISR_IrqHan

5、dler;跳转到ISR_IrqHandler函数LDMFDsp!,{r0-r12,lr};寄存器出栈SUBSpc,lr,#4;返回;系统上电或复位后跳转到此处开始进行运行。EXPORTColdResetColdReset;关看门狗定时器ldrr0,=WTCON;R0=WTCON,后面有类似的操作时注释略ldrr1,=0x0;R1=0strr1,[r0];将R1的内容存入R0;关所有中断ldrr0,=INTMSKldrr1,=0xffffffff;关闭所有中断strr1,[r0];将R1的内容存入R0ldrr0,=INTSUBMSKldrr1,=0x7ff;关闭所有子中断

6、strr1,[r0];将R1的内容存入R0;初始化堆栈blInitStacks;跳转到InitStacks设置各模式的堆栈;复制excptiontable到SRAM0x0地址处;导入相应的标号IMPORT

7、Load$$EXCEPTION_EXEC$$Base

8、IMPORT

9、Image$$EXCEPTION_EXEC$$Base

10、IMPORT

11、Image$$EXCEPTION_EXEC$$Length

12、ldrr0,=

13、Load$$EXCEPTION_EXEC$$Base

14、;源数据ldrr1,=

15、Image$$EXCEPTION_EXEC$$Base

16、;目的地址处ldrr2

17、,=

18、Image$$EXCEPTION_EXEC$$Length

19、;大少长度exception_cploopsubr2,r2,#4;R2=R2-4ldmiar0!,{r3};将R0指向的内容压入R3,之后R0地址自增stmiar1!,{r3};将R3中的内容取出到R1,之后R1地址自增cmpr2,#0;判断R2是否为0bgeexception_cploop;大于0则继续循环;下面调转到C语言的主函数处IMPORT__mainBL__main;进入MAIN函数B.;下面是初始化堆栈的子函数IMPORTUserStack;导入UserStac

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。