欢迎来到天天文库
浏览记录
ID:30181592
大小:91.54 KB
页数:5页
时间:2018-12-27
《启动代码startups分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、启动代码start.s(相当于bootloader的前端代码),开机就执行的代码,即0x0000处放置的代码。给CPU一个合适的工作环境。面向CPU内核和外围硬件,所以一般用汇编编写。1、在起始地址分配中断向量表即中断处理函数(CPU要求的),以为向量空间只有4字节,所以一般只是一个跳转指令,去别处执行。2、之后初始化存储器系统3、初始多个模式下的堆栈(模式切换时,硬件给SP置位)4、初始化有特殊要求的外围设备,如LED灯、看门狗5、初始化用户的执行环境(在FLASH中运行太慢了,把代码整体搬迁到RAM中)6、切换处理器的工
2、作模式7、调用主程序(没见到有存储控制器的配置代码,也没见到有时钟初始化代码)下面分析,所给的2410的启动代码实现了以上的那些功能,实现得显然不全,或者不需要,或者在工程代码的其它部分实现。读程序时注意,所有程序都是逐行顺序执行的,要看清跳转指令。GET2410addr.s//用到了2410addr.s中的寄存器地址宏定义;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SomeARM920CPSRbitdiscriptions;;;;;;;;;
3、;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Pre-definedconstants//预定义的变量,一下后续代码中使用方便,与CPSR相关USERMODEEQU0x10FIQMODEEQU0x11IRQMODEEQU0x12SVCMODEEQU0x13ABORTMODEEQU0x17UNDEFMODEEQU0x1bMODEMASKEQU0x1fNOINTEQU0xc0I_Bit*0x80F_Bit*0x40;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4、;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MMURegisterdiscription;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;p15CP15;c0CN0;c1CN1;c2CN2;c3CN3CtrlMMU*1CtrlAlign*2CtrlCache*4CtrlWBuff*8CtrlBigEnd*128CtrlSystem*256CtrlROM*512;initializationL0isMMUFULL_ACCESS
5、,DOMAIN,SECTIONTLB_L0_INIT*0x0C02;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Starthere//执行代码从这里开始;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//IMPORT,定义表示这是一个外部变量的标号,不是在本程序定义的//EXPORT,表示本程序里面用到的变量提供给其他模块调用的。//以上两个在汇编和C语言混合编程的时候用
6、到AREAInit,CODE,READONLYIMPORT__use_no_semihosting_swiIMPORTEnter_UNDEF//有点extern的感觉IMPORTEnter_SWIIMPORTEnter_PABORTIMPORTEnter_DABORTIMPORTEnter_FIQENTRY//这是程序的入口//中断/异常向量表(跳转),上电第一条就执行bColdReset,跳转到ColdReset。bColdResetbEnter_UNDEF;UndefinedInstructionbEnter_SWI;s
7、yscall_handlerorSWIbEnter_PABORT;PrefetchAbortbEnter_DABORT;DataAbortb.;ReservedHandlerbIRQ_Handler;IRQHandlerbEnter_FIQ;FIQHandler;dealwithIRQinterruptEXPORTIRQ_Handler//IRQ中断处理子程序IRQ_HandlerIMPORTISR_IrqHandler//服务程序在外部定义STMFDsp!,{r0-r12,lr}BLISR_IrqHandler//跳转至服
8、务程序LDMFDsp!,{r0-r12,lr}SUBSpc,lr,#4;=======;ENTRY;=======EXPORTColdResetColdReset//上电执行复位异常函数,就跳转到这里来ldrr0,=WTCON;watchdogdisable//关闭看门狗,还没初始化完系统
此文档下载收益归作者所有