?? 44binit.s
字號:
;************************************************************************************************************
;** 初始化應用程序執(zhí)行環(huán)境 **
;************************************************************************************************************
;*/
LDR r0, =|Image$$RO$$Limit| ;//輸入ROM區(qū)中的RW地址(即:存儲RO代碼最后地址的下一地址)
LDR r1, =|Image$$RW$$Base| ;//RAM區(qū)的開始地址
LDR r3, =|Image$$ZI$$Base| ;//零初始化區(qū)的開始地址
CMP r0, r1 ;//比較地址是否相同?
BEQ %F1
0
CMP r1, r3 ;//比較地址是否相同?
LDRCC r2, [r0], #4 ;//把ROM區(qū)中的RW地址中的數(shù)據(jù)放入寄存器
STRCC r2, [r1], #4 ;//把寄存器中的數(shù)據(jù)放入RAM區(qū)中,放完后,剛好到達ZI區(qū)的首地址
BCC %B0
1
LDR r1, =|Image$$ZI$$Limit| ;//零初始化區(qū)的末地址的下一地址
MOV r2, #0
2
CMP r3, r1 ;//對零初始化區(qū)進行零初始化
STRCC r2, [r3], #4
BCC %B2
;/*
;************************************************************************************************************
;** 呼叫主應用程序 **
;************************************************************************************************************
;*/
b Main
;/*
;************************************************************************************************************
;** 堆棧初始化應用程序 **
;************************************************************************************************************
;*/
InitStacks
MOV R0, LR
;//設置管理模式堆棧
MSR CPSR_c, # SVCMODE | NOINT
LDR SP, =StackSvc
;//設置中斷模式堆棧
MSR CPSR_c, #IRQMODE | NOINT
LDR SP, =StackIrq
;//設置快速中斷模式堆棧
MSR CPSR_c, #FIQMODE | NOINT
LDR SP, =StackFiq
;//設置中止模式堆棧
MSR CPSR_c, #ABORTMODE | NOINT
LDR SP, =StackAbt
;//設置未定義模式堆棧
MSR CPSR_c, #UNDEFMODE | NOINT
LDR SP, =StackUnd
;//設置系統(tǒng)模式堆棧
MSR CPSR_c, #SYSMODE | NOINT ;//在此不能開中斷
LDR SP, =StackUsr
MSR CPSR_c, #SVCMODE| NOINT ;//開中斷
MOV PC, R0
LTORG
;/************************************ 切換到系統(tǒng)模式下啟動中斷 ********************************************/
EXPORT StartInterrupt
StartInterrupt
MSR CPSR_c, #SVCMODE
MOV PC, LR
;/*
;************************************************************************************************************
;** 該函數(shù)輸入掉電模式 **
;************************************************************************************************************
;*/
;//void EnterPWDN(int CLKCON);
EnterPWDN
mov r2,r0 ;//r0=CLKCON
ldr r0,=REFRESH
ldr r3,[r0]
mov r1, r3
orr r1, r1, #0x400000 ;//打開自更新
str r1, [r0]
nop ;//等待直到自更新開始. 也許不需要。
nop
nop
nop
nop
nop
nop
;//輸入 POWERDN 模式
ldr r0,=CLKCON
str r2,[r0]
;//等待,直到進入SL_IDLE,STOP 模式,直到喚醒
mov r0,#0xff
0 subs r0,r0,#1
bne %B0
;//從DRAM/SDRAM 自更新模式中退出。
ldr r0,=REFRESH
str r3,[r0]
mov pc,lr
LTORG
;/*
;************************************************************************************************************
;** 存儲器配置應優(yōu)化以利于性能發(fā)揮 **
;************************************************************************************************************
;*** 存儲器訪問周期參數(shù)的設定基則 ***
; 1) Even FP-DRAM, EDO setting has more late fetch point by half-clock
; 2) FP-DRAM Parameters:tRCD=3 for tRAC, tcas=2 for pad delay, tcp=2 for bus load.
; 3) DRAM refresh rate is for 40Mhz.
; 4) The memory settings,here, are made the safe parameters even at 66Mhz.
;*/
SMRDATA DATA
;//bank0 16bit BOOT ROM SST39VF160/SST39VF320
;//bank1 16bit USB1.1 PDIUSBD12
;//bank2 8bit Nand Flash K9F2808U0A/K9F5608U0A
;//bank3 RTL8019
;//bank4 No Uesed
;//bank5 No Uesed
;//bank6 16bit SDRAM
;//bank7 16bit SDRAM
[ BUSWIDTH=16
DCD 0x11001002 ; //Bank0 = 16bit BootFlash SST39VF160/SST39VF320)
;// ||||||||- Bank1 = 8bit PDIUSBD12
;// ||||||--- Bank2 = 8bit Nand Flash
;// |||||---- Bank3 = 16bit RTL8019
;// ||||----- Bank4~5 = 8bit No Uesd
;// ||-------- Bank6~7 = 16bit SDRAM
| ;//BUSWIDTH=32
DCD 0x22222220 ;Bank0=OM[1:0], Bank1~Bank7=32bit
]
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
[ BDRAMTYPE="DRAM"
DCD ((B6_MT<<15)+(B6_Trcd<<4)+(B6_Tcas<<3)+(B6_Tcp<<2)+(B6_CAN)) ;//GCS6 check the MT value in parameter.a
DCD ((B7_MT<<15)+(B7_Trcd<<4)+(B7_Tcas<<3)+(B7_Tcp<<2)+(B7_CAN)) ;//GCS7
| ;//"SDRAM"
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)+(Trc<<18)+(Tchr<<16)+REFCNT) ;//REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk, tchr=3clk,count=1113
DCD 0x10 ;//SCLK power down mode, BANKSIZE 32M/32M
DCD 0x20 ;//MRSR6 CL=2clk
DCD 0x20 ;//MRSR7
ALIGN
;/*
;************************************************************************************************************
;** 數(shù)據(jù)區(qū)分配各模式的堆棧空間 **
;************************************************************************************************************
*/
AREA RamData, DATA, READWRITE
^ (_ISR_STARTADDRESS-0x500)
StackUsr # 256 ;//0x0C7ffa00
StackSvc # 256 ;//0x0C7ffb00
StackUnd # 256 ;//0x0C7ffc00
StackAbt # 256 ;//0x0C7ffd00
StackIrq # 256 ;//0x0C7ffe00
StackFiq # 0 ;//0x0C7fff00
;/*
;************************************************************************************************************
;** 數(shù)據(jù)區(qū)確定存放中斷向量的地址 **
;************************************************************************************************************
*/
^ _ISR_STARTADDRESS
HandleReset # 4
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4
HandleFIQ # 4
HandleADC # 4
HandleRTC # 4
HandleUTXD1 # 4
HandleUTXD0 # 4
HandleSIO # 4
HandleIIC # 4
HandleURXD1 # 4
HandleURXD0 # 4
HandleTIMER5 # 4
HandleTIMER4 # 4
HandleTIMER3 # 4
HandleTIMER2 # 4
HandleTIMER1 # 4
HandleTIMER0 # 4
HandleUERR01 # 4
HandleWDT # 4
HandleBDMA1 # 4
HandleBDMA0 # 4
HandleZDMA1 # 4
HandleZDMA0 # 4
HandleTICK # 4
HandleEINT4567 # 4
HandleEINT3 # 4
HandleEINT2 # 4
HandleEINT1 # 4
HandleEINT0 # 4 ; //0x0c7fff84
;/*
;************************************************************************************************************
;*- 結束文件 -*
;************************************************************************************************************
;*/
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -