📄 init.s
字号:
;************************************************************************************************
;Institute of automation, Chinese Academy of Sciences
;SWUST
;File Name: Init.s
;Description: Init
;Author: Lee Li
;Date: 2005-6-1
;SDRAM Configuration: Use ljg.txt,SDRAM remap to address 0x0~0x100,0000(16MB)
;************************************************************************************************
GET mem.a
GET casia1.a
CODE32
AREA Init,CODE,READONLY
ENTRY
B Reset_Handler
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;**********************************************************
;Memory Remap
;**********************************************************
Reset_Handler
LDR R1,=0x3ff0000
LDR R0,=0xE7ffff90
STR R0,[R1]
LDR r0, =0x3FF0000 + 0x3010
LDR r1, =rEXTDBWTH
LDR r2, =rROMCON0
LDR r3, =rROMCON1
LDR r4, =rROMCON2
LDR r5, =rROMCON3
LDR r6, =rROMCON4
LDR r7, =rROMCON5
LDR r8, =0x14010380
LDR r9, =rSDRAMCON1
LDR r10,=rSDRAMCON2
LDR r11,=rSDRAMCON3
LDR r12,=rSREFEXTCON
STMIA r0, {r1-r12}
ldr r0, =0x0
ldr r1, =0x200000
ldr r2, =0x400000
rom2ram_copy_loop ; Copy code from Flash to SDRAM.
ldr r3, [r0], #4
str r3, [r2], #4
subs r1, r1, #4
bne rom2ram_copy_loop
LDR r0, =0x3FF0000 + 0x3010
LDR r1, =rEXTDBWTH
LDR r2, =0x12040060
LDR r3, =rROMCON1
LDR r4, =rROMCON2
LDR r5, =rROMCON3
LDR r6, =rROMCON4
LDR r7, =rROMCON5
LDR r8, =0x10000380
LDR r9, =rSDRAMCON1
LDR r10,=rSDRAMCON2
LDR r11,=rSDRAMCON3
LDR r12,=rSREFEXTCON
STMIA r0, {r1-r12}
;**********************************************************
;Chose the entry way from any-key-inputing of PC.
;1)Enter Bootloader(press any key)
;2)Enter the uClinux(wait nearly 8 second)
;**********************************************************
;UART0 SET
;**********************************************************
;ULCON0 EQU 0x3FFD000
;UCON0 EQU 0x3FFD004
;UTXBUF0 EQU 0x3FFD00C
;URXBUF0 EQU 0x3FFD010
;UBRDIV0 EQU 0x3FFD014
;USTAT0 EQU 0x3FFD008
;**********************************************************
LDR R0,=0x03
LDR R1,=0x3FFD000
STR R0,[R1]
LDR R0,=0x0D
LDR R1,=0x3FFD004
STR R0,[R1]
LDR R0,=0x500
LDR R1,=0x3FFD014
STR R0,[R1]
LDR R0,=sendstr
LDR R1,=0x3FFD00C ;set uart application
Send1
LDRB R4,[R0],#1 ;read the end sign in dcb area
CMP R4,#0x00
BEQ OVER
STR R4,[R1]
WAIT
LDR R2,=0x3FFD008
LDR R3,[R2]
TST R3,#&40
BEQ WAIT
B Send1
OVER
LDR R1,=0x3FFD008
LDR R0,[R1]
AND R0,R0,#0xBF
STR R0,[R1] ;clear the sendbuf and sign
;*****************************************************************************
;This section make a selection for boot way of bootloader or uClinux
;*****************************************************************************
LDR R5,=0x20 ;wait selection of uclinux for 8 time
LDR R0,=0x00 ;Clear the recevbuf
LDR R1,=0x3FFD0010
STR R0,[R1]
SELECTION
LDR R0,=print
LDR R1,=0x3FFD00C
Send2
LDRB R4,[R0],#1
CMP R4,#0
BEQ CHECK
STR R4,[R1]
WAIT1 LDR R2,=0x3FFD008
LDR R3,[R2]
TST R3,#&40
BEQ WAIT1
B Send2
CHECK LDR R1,=0x01FFFF ;Set the maxvalue of delay loop
LOOP SUBS R1,R1,#1
BNE LOOP
LDR R0,=0x3FFD010
LDR R1,[R0]
CMP R5,#0
BEQ LAST
SUBS R5,R5,#1
CMP R1,#0x00
BEQ SELECTION ;get back to the selection waiting (26 time)
;**********************************************************
;end of adding code 2005-6-1
;**********************************************************
LDR R0,=0x3FF5000
LDR R1,=0xFF
STR R1,[R0]
LDR R0,=0x3FF5008
LDR R1,=0xFF
STR R1,[R0]
B Next ;enter the bootloader
LAST LDR R0,=0x10000
MOV PC,R0 ;enter uClinux
Next
;********************************************************
;Initialise system stack for different processor modes
;;Change to Interrupt Mode (IRQ)
;********************************************************
mov r0, #0x12
MSR cpsr_c, r0
mov sp,#0x70000
;********************************************************
;Change to Fast Interrupt Mode (FIQ)
;********************************************************
mov r0,#0x11
MSR cpsr_c, r0
mov sp,#0x7f000
;********************************************************
;Change to Supervisor Mode (SVC)
;********************************************************
mov r0,#0x13
MSR cpsr_c, r0
mov sp,#0x80000
;********************************************************
;Change to User Mode (USR)
;********************************************************
mov r0,#0x10
MSR cpsr_c, r0
mov sp,#0x83000
;********************************************************
;Clear INTPEND Register
;********************************************************
LDR R1,=0x3FF4000
MVN R0,#0
STR R0,[R1]
;********************************************************
;External Timing Register
;********************************************************
LDR R0,=0x3FF300C
LDR R1,=0x0fffffff
STR R1,[R0]
LDR R0,=0x3FF3008
LDR R1,=0x0fffffff
STR R1,[R0]
;********************************************************
IMPORT C_Entry
BL C_Entry
B .
sendstr DCB &A,&D,"Press any key to Bootloader...",&A,&D,0
print DCB ".",0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -