资源描述:
《start.S详解 2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、/****************************************************************************CPU_init_criticalregisters**setupimportantregisters*setupmemorytiming***************************************************************************/@CPU初始化 #ifndefCONFIG_SKIP_LOWLEVE
2、L_INITcpu_init_crit:/**flushv4I/Dcaches*/@初始化CACHES mov r0,#0mcr p15,0,r0,c7,c7,0 /*flushv3/v4cache*/mcr p15,0,r0,c8,c7,0 /*flushv4TLB*/ /**disableMMUstuffandcaches*/@关闭MMU和CACHESmrc p15,0,r0,c1,c0,0bic r0,r0,#0x00002300 @clearbits13,9:8(--V---RS)bic r0,r
3、0,#0x00000087 @clearbits7,2:0(B----CAM)orr r0,r0,#0x00000002 @setbit2(A)Alignorr r0,r0,#0x00001000 @setbit12(I)I-Cachemcr p15,0,r0,c1,c0,0@对协处理器的操作还是看不懂,暂时先不管吧,有时间研究一下ARM技术手册的协处理器部分。 /**beforerelocating,wehavetosetupRAMtiming*becausememorytimingisboard-de
4、pendend,youwill*findalowlevel_init.Sinyourboarddirectory.*/@初始化RAM时钟,因为内存是跟开发板密切相关的,所以这部分在/开发板目录/lowlevel_init.S中实现mov ip,lr@保存LR,以便正常返回,注意前面是通过BL跳到cpu_init_crit来的。@(ARM9有37个寄存器,ARM7有27个)37个寄存器=7个未分组寄存器(R0~R7)+2×(5个分组寄存器R8~R12)+6×2(R13=SP,R14=lr分组寄存器)+1(R1
5、5=PC)+1(CPSR)+5(SPSR)用途和访问权限:R0~R7:USR(用户模式)、fiq(快速中断模式)、irq(中断模式)、svc(超级用法模式)、abt、undR8~R12:R8_usr~R12_usr(usr,irq,svc,abt,und)R8_fiq~R12_fiq(fiq)R11=fpR12=IP(从反汇编上看,fp和ip一般用于存放SP的值)R13~R14:R13_usrR14_usr(每种模式都有自己的寄存器)SP~lr:R13_fiqR14_fiqR13_irqR14_irqR13
6、_svcR14_svcR13_abtR14_abtR13_undR14_undR15(PC):都可以访问(即PC的值为当前指令的地址值加8个字节)R16 :((CurrentProgramStatusRegister,当前程序状态寄存器))SPSR_fiq,SPSR_irq,SPSR_abt,SPSR_und(USR模式没有) #if defined(CONFIG_AT91RM9200EK) #elsebl lowlevel_init@跳到底层硬件初始化,这部分代码在自己建立的开发板目录下的lowlev
7、el_init.S中。 #endifmov lr,ipmov pc,lr@返回到主程序 #endif/*CONFIG_SKIP_LOWLEVEL_INIT*/ /****************************************************************************Interrupthandling***************************************************************************/@这段没有看
8、明白,不过好像跟移植关系不是很大,先放一放。@@IRQstackframe.@#defineS_FRAME_SIZE 72 #defineS_OLD_R0 68#defineS_PSR 64#defineS_PC 60#defineS_LR 56#defineS_SP 52 #defineS_IP 48#defineS_FP 44#defineS_R10 40#defineS_R9 36#defi