设为首页 加入收藏

TOP

ARM启动文件2440init.s分析(六)
2014-11-24 14:39:15 来源: 作者: 【 】 浏览:68
Tags:ARM 启动 文件 2440init.s分析


strcc r1, [r2], #4


bcc %B0



mov r0, #0


ldr r3, EndOfBSS


1


cmp r2, r3


strcc r0, [r2], #4


bcc %B1



ldr pc, =%F2 ;gotocompiler address


2



; [CLKDIV_VAL>1 ; meansFclk:Hclk is not 1:1.


; bl MMU_SetAsyncBusMode


; |


; blMMU_SetFastBusMode ; default value.


; ]




;===========================================================


; Setup IRQ handler


; 把中断服务函数的总入口地址,赋给HandleIRQ地址(文件最低端定义)


ldr r0,=HandleIRQ ;Thisroutine is needed


ldr r1,=IsrIRQ ;ifthere is not 'subs pc,lr,#4' at 0x18, 0x1c


str r1,[r0]





[:LNOT:THUMBCODE


bl Main ;Do not use main() because ......


b .


]



[THUMBCODE ;for start-up code for Thumbmode


orr lr,pc,#1


bx lr


CODE16


bl Main ;Do not use main() because ......


b .


CODE32


]




;function initializing stacks


InitStacks ; 初始化栈空间(各个模式下的),为c函数运行做准备


;Donot use DRAM,such as stmfd,ldmfd......


;SVCstackis initialized before


;Undertoolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'


mrs r0,cpsr


bic r0,r0,#MODEMASK


orr r1,r0,#UNDEFMODE|NOINT


msr cpsr_cxsf,r1 ;UndefMode


ldr sp,=UndefStack ; UndefStack=0x33FF_5C00



orr r1,r0,#ABORTMODE|NOINT


msr cpsr_cxsf,r1 ;AbortMode


ldr sp,=AbortStack ; AbortStack=0x33FF_6000



orr r1,r0,#IRQMODE|NOINT


msr cpsr_cxsf,r1 ;IRQMode


ldr sp,=IRQStack ;IRQStack=0x33FF_7000



orr r1,r0,#FIQMODE|NOINT


msr cpsr_cxsf,r1 ;FIQMode


ldr sp,=FIQStack ;FIQStack=0x33FF_8000



bic r0,r0,#MODEMASK|NOINT


orr r1,r0,#SVCMODE


msr cpsr_cxsf,r1 ;SVCMode


ldr sp,=SVCStack ;SVCStack=0x33FF_5800



;USERmode has not be initialized.



mov pc,lr


;TheLR register will not be valid if the current mode is not SVC mode.




LTORG



SMRDATA DATA


;配置存储器的管理方式


; Memory configuration should be optimizedfor best performance


; The following parameter is not optimized.


; Memory access cycle parameter strategy


; 1) The memory settings is safe parameters even at HCLK=75Mhz.


; 2) SDRAM refresh period is forHCLK<=75Mhz.



DCD(0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))


DCD((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) ;GCS0


DCD((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) ;GCS1


DCD((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) ;GCS2


DCD((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) ;GCS3


DCD((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) ;GCS4


DCD((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) ;GCS5


DCD((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) ;GCS6


DCD((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) ;GCS7


DCD((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Tsrc<<18)+(Tchr<<16)+REFCNT)



DCD0x32 ;SCLK power saving mode, BANKSIZE 128M/128M



DCD0x30 ;MRSR6 CL=3clk


DCD0x30 ;MRSR7 CL=3clk



;分配一个字的空间,并用后边的数值来初始化该空间 ,这里命名有些混乱


BaseOfROM DCD |Image$$RO$$Base|


TopOfROM DCD |Image$$RO$$Limit|


BaseOfBSS DCD |Image$$RW$$Base|


BaseOfZero DCD |Image$$ZI$$Base|


EndOfBSS DCD |Image$$ZI$$Limit|



ALIGN



;Function for entering power down mode


; 1. SDRAM should be in self-refresh mode.


; 2. All interrupt should be maksked forSDRAM/DRAM self-refresh.


; 3. LCD controller should be disabled forSDRAM/DRAM self-refresh.


; 4. The I-cache may have to be turned on.


; 5. The location of the following code

首页 上一页 3 4 5 6 7 8 下一页 尾页 6/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java迷题:等于,还是不等于? 下一篇jQuery倒数计时按钮—setTimeout

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: