



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章的附录 系统引导程序的代码下面是一个基于S3C2410芯片的嵌入式系统引导(启动)程序Startup.s文件中的汇编源程序。通过对这段程序的分析,巩固所学的汇编指令知识,并学习嵌入式系统引导程序的编写方法。程序中各条指令及指示符的具体含义请参照3.1节和3.3.1小节中的说明。;Startup Code for S3C2410 : Startup.s;下面指令包含2410addr.s文件,该文件中定义了S3C2410内部寄存器地址对应的变量。GET 2410addr.s ; 某些ARM920T CPSR寄存器位的定义,定义了部分常量。USERMODE EQU0x10 ; USERMODE等都是一些常量名称FIQMODE EQU0x11IRQMODE EQU0x12SVCMODE EQU0x13ABORTMODE EQU0x17UNDEFMODE EQU0x1bMODEMASK EQU0x1fNOINT EQU0xc0;定义IRQ和FIQ相关的寄存器I_Bit*0x80F_Bit*0x40; 定义MMU相关的寄存器。CtrlMMU*1CtrlAlign*2CtrlCache*4CtrlWBuff*8CtrlBigEnd*128CtrlSystem*256CtrlROM*512TLB_L0_INIT*0x0C02;AREA指示汇编器汇编一段新的代码,为保证下面的代码为起始代码,应在ARM连接器的layout选项中指明Startup.o(Init) (如图1-33所示),或用scatter格式的描述性文件说明。AREAInit,CODE,READONLY;IMPORT提供汇编器在当前汇编中未曾定义的符号名。IMPORT _use_no_semihosting_swiIMPORTEnter_UNDEFIMPORTEnter_SWIIMPORTEnter_PABORTIMPORTEnter_DABORTIMPORTEnter_FIQ;下面ENTRY指明了程序的入口,在应用程序中有且只有一个程序入口。ENTRY;下面是异常向量表,第一条语句是复位异常对应的跳转指令。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_IrqHandler ;跳转到ISR_IrqHandler函数LDMFDsp!, r0-r12, lr;寄存器出栈SUBSpc, lr,#4 ;返回;系统上电或复位后跳转到此处开始进行运行。 EXPORT ColdResetColdReset;关看门狗定时器ldrr0,=WTCON;R0=WTCON,后面有类似的操作时注释略ldrr1,=0x0;R1=0strr1,r0 ;将R1的内容存入R0;关所有中断ldrr0,=INTMSKldrr1,=0xffffffff;关闭所有中断strr1,r0;将R1的内容存入R0ldrr0,=INTSUBMSKldrr1,=0x7ff;关闭所有子中断strr1,r0 ;将R1的内容存入R0;初始化堆栈blInitStacks;跳转到InitStacks设置各模式的堆栈;复制excption table到SRAM0x0地址处;导入相应的标号IMPORT|Load$EXCEPTION_EXEC$Base|IMPORT|Image$EXCEPTION_EXEC$Base|IMPORT|Image$EXCEPTION_EXEC$Length|ldrr0,=|Load$EXCEPTION_EXEC$Base|;源数据ldrr1,=|Image$EXCEPTION_EXEC$Base|;目的地址处ldrr2,=|Image$EXCEPTION_EXEC$Length| ;大少长度exception_cploopsubr2,r2,#4 ;R2=R2-4ldmiar0!,r3 ;将R0指向的内容压入R3,之后R0地址自增stmiar1!,r3;将R3中的内容取出到R1,之后R1地址自增cmpr2, #0 ;判断R2是否为0bge exception_cploop ;大于0则继续循环;下面调转到C语言的主函数处IMPORT _mainBL_main ;进入MAIN函数B.;下面是初始化堆栈的子函数IMPORT UserStack ;导入UserStackIMPORT SVCStack ;导入SVCStackIMPORT UndefStack;导入UndefStackIMPORT IRQStack;导入IRQStackIMPORT AbortStack;导入AbortStackIMPORT FIQStack;导入FIQStackInitStacksmrsr0,cpsr ;CPSR的值存入R0bicr0,r0,#MODEMASK ;R0中的相应位清0orrr1,r0,#UNDEFMODE|NOINT ;R1=R0 ORR #UNDEFMODE|NOINT中断也禁止了,后面类似的操作时注释略msrcpsr_cxsf,r1;转到未定义模式ldrsp,=UndefStack ;设置SPorrr1,r0,#ABORTMODE|NOINTmsrcpsr_cxsf,r1;转到中止模式ldrsp,=AbortStack ;设置SPorrr1,r0,#IRQMODE|NOINTmsrcpsr_cxsf,r1;转到IRQ模式ldrsp,=IRQStack ;设置SPorrr1,r0,#FIQMODE|NOINTmsrcpsr_cxsf,r1;转到FIQ模式ldrsp,=FIQStack ;设置SPorrr1,r0,#SVCMODE|NOINTmsrcpsr_cxsf,r1;转到管理模式ldrsp,=SVCStack ;设置SPmovpc,lr ;LR的值传给PC,子程序返回END;Stratup.s程序结束上述程序代码中,ENTRY指明了程序的入口。因为,ARM920T要求中断向量表必须设置在从0x0地址开始,连续84字节的空间中,因此,在ENTRY的后面紧接着8条跳转指令,分别对应复位、未定义指令错误、软件中断、预取指令错误、数据存取错误、一个保留的中断向量、IRQ和FIQ等异常的处理。 系统上电或复位后,首先执行的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建设部建筑设计协议书
- 可爱的小鸟150字(12篇)
- 名著导读:高一语文阅读理解教案
- 时间像小马车节奏课件
- 人教版四年级上册第二单元《公顷和平方千米》单元检测卷(含答案)
- 纪检业务知识培训课件前言
- 早教课程示范课完整课件
- 农民专业合作社种植联产合同
- 2025年日语J.TEST考试A-D级模拟试卷
- 初识化学实验探究课教案
- 城市地下管网施工质量、安全、进度和文明施工保证措施
- 全工程咨询管理办法
- 2025-2030中国重水市场运行态势与未来竞争力剖析报告
- 企业职工感恩教育
- 2025至2030全球及中国计算流体动力学(CFD)模拟工具行业发展趋势分析与未来投资战略咨询研究报告
- GB 17051-2025二次供水设施卫生规范
- 山西线上红娘培训课件
- 临沧市市级机关遴选真题2024
- 【物化生 高考西北卷】2025年高考招生考试真题物理+化学+生物试卷(适用陕西、山西、青海、宁夏四省)
- 2025年普通高等学校招生全国统一考试数学试题(天津卷)含答案
- 2025-2030中国工控机(IPC)行业应用态势与前景动态预测报告
评论
0/150
提交评论