📄 44binit.s
字号:
;/*
;************************************************************************************************************
;** 初始化应用程序执行环境 **
;************************************************************************************************************
;*/
LDR r0, =|Image$$RO$$Limit| ;//输入ROM区中的RW地址(即:存储RO代码最后地址的下一地址)
LDR r1, =|Image$$RW$$Base| ;//RAM区的开始地址
LDR r3, =|Image$$ZI$$Base| ;//零初始化区的开始地址
CMP r0, r1 ;//比较地址是否相同?
BEQ %F1
0
CMP r1, r3 ;//比较地址是否相同?
LDRCC r2, [r0], #4 ;//把ROM区中的RW地址中的数据放入寄存器
STRCC r2, [r1], #4 ;//把寄存器中的数据放入RAM区中,放完后,刚好到达ZI区的首地址
BCC %B0
1
LDR r1, =|Image$$ZI$$Limit| ;//零初始化区的末地址的下一地址
MOV r2, #0
2
CMP r3, r1 ;//对零初始化区进行零初始化
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
;//设置系统模式堆栈
MSR CPSR_c, #SYSMODE | NOINT ;//在此不能开中断
LDR SP, =StackUsr
MSR CPSR_c, #SVCMODE| NOINT ;//开中断
MOV PC, R0
LTORG
;/************************************ 切换到系统模式下启动中断 ********************************************/
EXPORT StartInterrupt
StartInterrupt
MSR CPSR_c, #SVCMODE
MOV PC, LR
;/*
;************************************************************************************************************
;** 该函数输入掉电模式 **
;************************************************************************************************************
;*/
;//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
;/*
;************************************************************************************************************
;** 存储器配置应优化以利于性能发挥 **
;************************************************************************************************************
;*** 存储器访问周期参数的设定基则 ***
; 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
;/*
;************************************************************************************************************
;** 数据区分配各模式的堆栈空间 **
;************************************************************************************************************
*/
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
;/*
;************************************************************************************************************
;** 数据区确定存放中断向量的地址 **
;************************************************************************************************************
*/
^ _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 + -