?? hms30c7202init.s
字號(hào):
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;
@;; Copyright (c) 2000-2001 Hyundai Electronics, Ltd. All rights reserved.
@;;
@;; ArMon Startup Code for
@;; HMS7201/7202 : CStartup.s
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;; Some ARM720 CPSR bit discriptions
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.equ Mode_USR32, 0x10
.equ Mode_FIQ32, 0x11
.equ Mode_IRQ32, 0x12
.equ Mode_ABT32, 0x17
.equ Mode_UND32, 0x1b
.equ Mode_SVC32, 0x13
.equ I_Bit, 0x80
.equ F_Bit, 0x40
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;; MMU Register discription
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@p15 CP 15
@c0 CN 0
@c1 CN 1
@c2 CN 2
@c3 CN 3
.equ CtrlMMU, 1
.equ CtrlAlign, 2
.equ CtrlCache, 4
.equ CtrlWBuff, 8
.equ CtrlBigEnd, 128
.equ CtrlSystem, 256
.equ CtrlROM, 512
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;; SDRAM Mode Register
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ 22 20 21 19 18 18 16 15 14 13 12 11 _AMBA address pin
@ A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00 _SDRAM address pin
@ OPCODE | 0 | LMODE |BT | BL
@ OPCODE
@ 'b0000 : Burst Read/Write
@ 'bxx01 : Reserved
@ 'bxx10 : Burst read and Single write
@ 'bxx11 : Reserved
@ LMODE ( CE Latency )
@ 'b000 : Reserved
@ 'b001 : -
@ 'b010 : CAS2
@ 'b011 : CAS3
@ 'b1xx : Reserved
@ BT : Burst Type
@ 'b0 : Sequential
@ 'b1 : Interleave
@ BL : Burst Length
@ BT=0 BT=1
@ 'b000 : 1 1
@ 'b001 : 2 2
@ 'b010 : 4 4
@ 'b011 : 8 8
@ 'b100 : R R
@ 'b101 : R R
@ 'b110 : R R
@ 'b111 : F.P. R
@;
.equ SDRAM_MODE_CAS2, (0x20<<11) @0x10000
.equ SDRAM_MODE_CAS3, (0x30<<11) @0x18000
.equ SDRAM_MODE_BL1, (0x00<<11) @0x0
.equ SDRAM_MODE_BL2, (0x01<<11) @0x800
.equ SDRAM_MODE_BL4, (0x02<<11) @0x1000
.equ SDRAM_MODE_BL8, (0x03<<11) @0x1800
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;; SDRAM Init Register Value
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.equ SDRAM_CTRL_RFE, 0x00800000 @; Refresh Enable
.equ SDRAM_CTRL_APE, 0x00400000 @; AutoPrecharge Enable
.equ SDRAM_CTRL_CAS2, 0x00200000 @; CAS2
.equ SDRAM_CTRL_CAS3, 0x00300000 @; CAS3
.equ SDRAM_CTRL_BTE, 0x00080000 @; Data Bus Tristate Enable
.equ SDRAM_CTRL_CCL, 0x00040000 @; Clock Control Enable
.equ SDRAM_CTRL_WBE, 0x00020000 @; Write Buffer Enable
.equ SDRAM_CTRL_B1E, 0x000000c0 @; BANK1 Enable
.equ SDRAM_CTRL_B0E, 0x0000000c @; BANK0 Enable
.equ SDRAM_CTRL_CAS2_AP, 0x00e200cc @ Disable DataBusTri
@.equ SDRAM_CTRL_CAS2_AP, 0x00ea00cc @ Data Bus trista
.equ SDRAM_CTRL_CAS2_NAP, 0x40a2000c
.equ SDRAM_CTRL_CAS3_AP, 0x00fa00cc
.equ SDRAM_CTRL_CAS3_NAP, 0x00ba00cc
.equ SDRAM_CTRL_CAS2_TEST, 0x00a400cc
.equ SDRAM_CASL, SDRAM_MODE_CAS2
.equ SDRAM_CTRL, SDRAM_CTRL_CAS2_NAP @iikoy
@.equ SDRAM_CTRL, SDRAM_CTRL_CAS2_TEST
@.equ SDRAM_CASL, SDRAM_MODE_CAS3
@.equ SDRAM_CTRL, SDRAM_CTRL_CAS3_AP
@.equ SDRAM_CTRL, SDRAM_CTRL_CAS3_NAP
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;; Start here
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.text
@.extern syscall_handler
@.extern IRQHandler
@.extern FIQHandler
ENTRY:
B ColdReset
B UndefHandler
B syscall_handler
B PrefetchAbort
B DataAbort
B ReservedHandler
B IRQHandler
B FIQHandler
.align
IRQHandler:
@將要使用的寄存器壓棧r0,r1
stmdb sp!, {r0-r11, ip, lr}
ldr r0 ,=0x80024090 @中斷ID寄存器
ldr r0 ,[r0]
and r0 ,r0,#0x1f @取出iqr ID
ldr r1 ,=0x80024010 @SVR0
add r1 ,r1,r0, asl #2
ldr pc ,[r1]
ldmia sp!, {r0-r11, ip, lr}/* pop r0-r11, ip, lr */
subs pc, r14, #4
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ .if 1-STANDALONE @IF STANDALONE = 0
@; #define TF_ARMON_MAGIC 0x41524d4f // ARMO
@ .extern partition_table
@ .long 0x41524d4f @cmpmi r2, pc, asr #26
@ .long partition_table
@ .endif
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;; Leave as nops
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;; GBLA counter
@;;counter SETA 0
@;; WHILE counter<64 ; Entries for 0-63M
@;; DCD &0
@;;counter SETA counter+1
@;; WEND
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;; Abort Handlers
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.extern abort
.align
UndefHandler:
mov r0, #0
sub r1, lr, #4
bl abort
B terminate
.align
PrefetchAbort:
mov r0, #1
sub r1, lr, #4
bl abort
B terminate
.align
DataAbort:
mov r0, #2
sub r1, lr, #4
bl abort
B terminate
.align
ReservedHandler:
mov r0, #3
sub r1, lr, #4
bl abort
B terminate
.align
syscall_handler:
b syscall_handler
.align
FIQHandler:
b FIQHandler
ColdReset:
ldr r0,=0x8002b000
mov r1,#0x0
str r1,[r0] @disable watchdog
ldr r0,=0x80024000
str r1,[r0] @disable all interrupt
ldr r0,=0x80024004
str r1,[r0] @clear all interrupt pending bits
ldr r0,=0x80003000
ldr r1, [r0]
and r1, r1, #0x3
orr r1, r1, #0x40
str r1, [r0] @設(shè)置MEMCFG0寄存器ROM chip0,禁止突發(fā)模式,正常訪問等待狀態(tài)數(shù)為8
mov r1, #0x1000
resetLoop:
bl delay10us
sub r1, r1, #1
cmp r1, #0
bne resetLoop
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; set system clock to 70 MHz
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ldr r0,=0x80001000
ldr r1, [r0, #0x28]
bic r1, r1, #0xff
@;;;;;;; orr r1, r1, #0x76 ; 100 Mhz
orr r1, r1, #0x66 @ 70.04 Mhz
@;;;;;;; orr r1, r1, #0x6e ; 84.7 Mhz
str r1, [r0, #0x28]
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; Initialize SDRAM Controller and Seting Mode Register
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; 7202 support 2 banks, so initialize both of them
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;; ldr r2, =0x00a200cc
ldr r2, =SDRAM_CTRL
mov r1, #0x80000000
ldr r3, [r1, #0]
cmp r3, r2
beq L5
@ IO_SdramControl = CAS2|SDRAM_WB;
mov r1, #0x220000
@;;mov r1, #0x320000 @ CAS3
mov r2, #0x80000000
str r1, [r2, #0]
mov r1, #0x1000
10:
bl delay10us
sub r1, r1, #1
cmp r1, #0
bne 10b
@ IO_SdramControl = CAS2|SDRAM_WB|SDRAM_E0;
mov r1, #0x08
add r1, r1, #0x220000
@ add r1, r1, #0x320000 @ CAS3
mov r2, #0x80000000
str r1, [r2, #0]
mov r1, #0x1000
20:
bl delay10us
sub r1, r1, #1
cmp r1, #0
bne 20b
@ IO_SdramRefresh = 0x20;
mov r2, #0x20
@@mov r2, #0x10
mov r1, #0x80000000
str r2, [r1, #4]
@ IO_SdramControl = CAS2|SDRAM_WB|SDRAM_REFRESH;
mov r1, #0xa20000
mov r2, #0x80000000
str r1, [r2, #0]
mov r1, #0x1000
30:
bl delay10us
sub r1, r1, #1
cmp r1, #0
bne 30b
@ SDRAM Mode Register Setting
@ Tmp = IO(SdramModeReg | SdramModeBurstLength8 | SdramModeCAS2 |Device0);
mov r1, #SDRAM_CASL @ CAS2
@@30: mov r1, #SDRAM_MODE_BL8 @ CAS3
add r1, r1, #0x01800
add r1, r1, #0x44000000
ldr r1, [r1, #0]
mov r0, r1
@ Tmp = IO(SdramModeReg | SdramModeBurstLength8 | SdramModeCAS2 |Device1);
mov r1, #SDRAM_CASL @ CAS2
@@ mov r1, #SDRAM_MODE_BL8 @ CAS3
add r1, r1, #0x01800
add r1, r1, #0x46000000
ldr r1, [r1, #0]
mov r0, r1
@ IO_SdramControl = SDRAM_REFRESH| AUTO_PRECHARGE_DISABLE
@ |CAS2|SDRAM_WB|SDRAM_E1|SDRAM_B1|SDRAME0|SDRAM_B0
@;; ldr r2, =0x00e200cc @ CAS2, AutoPrecharge
@;; ldr r2, =0x00a200cc @ CAS2, No AutoPrecharge
@;; ldr r2, =0x00ba00cc @ CAS3
@;; ldr r2, =0x00fa00cc @ CAS3
ldr r2, =SDRAM_CTRL
mov r1, #0x80000000
str r2, [r1, #0]
mov r2, #1 @;;2003/1/29
mov r1, #0x80000000
str r2, [r1, #8]
@ IO_SdramRefresh = 0x118 @;; <-- 0x320; 2003/1/29
mov r2, #0x118
@ mov r2, #0x50
mov r1, #0x80000000
str r2, [r1, #4]
#endif
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; End of Initialization
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; disable remap
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
L5:
ldr r0, =0x80001040
mov r1, #0x0
str r1, [r0]
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; MMU Initialization ( disable MMU )
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #0x00000001
mcr p15, 0, r0, c1, c0, 0
nop
nop
nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; Now Switch to RUN Mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ldr r0, =0x80001000
mov r1, #1
str r1, [r0]
nop
nop
nop
nop
nop
# ********************************************************
# * Copy and paste RW data/zero initialized data *
# ********************************************************
ldr r0, =Image_RO_Limit /* Get pointer to ROM data */
ldr r1, =Image_RW_Base /* and RAM copy */
ldr r3, =Image_ZI_Base /* Zero init base => top of initialised data */
cmp r0, r1 /* Check that they are different */
beq F1
F0:
cmp r1, r3 /* Copy init data */
LDRCC r2, [r0], #4 /* --> LDRCC r2, [r0] + ADD r0, r0, #4 */
strcc r2, [r1], #4 /* --> strcc r2, [r1] + ADD r1, r1, #4 */
bcc F0
F1:
ldr r1, =Image_ZI_Limit /* Top of zero init segment */
mov r2, #0
F2:
cmp r3, r1 /* Zero init */
strcc r2, [r3], #4
bcc F2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; Stack Setup for each MODE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@; Set up SVC stack to be 4K on top of zero-init data
LDR r1, =installStack
ADD sp, r1, #4096
@; Set up IRQ and FIQ stacks
MOV r0, #(Mode_IRQ32 | I_Bit)
MSR cpsr_csxf, r0
MOV r0, r0
ADD sp, r1, #4096*2
MOV r0, #(Mode_FIQ32 | I_Bit | F_Bit)
MSR cpsr_csxf, r0
MOV r0, r0
ADD sp, r1, #4096*3
@; Set up undefine stacks
MOV r0, #(Mode_UND32 | I_Bit | F_Bit)
MSR cpsr_csxf, r0
MOV r0, r0
ADD sp, r1, #(4096*3+512)
@; Set up abort stacks
MOV r0, #(Mode_ABT32 | I_Bit | F_Bit)
MSR cpsr_csxf, r0
MOV r0, r0
ADD sp, r1, #(4096*3+1024)
@; Enter SVC mode
MOV r0,#Mode_SVC32
MSR cpsr_csxf, r0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; Stack Setup for each MODE end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MRS r0, CPSR
bic r0, r0, #(I_Bit | F_Bit) /* enable interrupt */
msr CPSR_cxsf, r0
# jump to Main()
.extern Main
BL Main
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; Abnormal Termination
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
terminate:
B terminate
delay10us:
mov r0, #10
_delay1us:
sub r0, r0, #1
cmp r0, #0
bne _delay1us
mov pc, lr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;;; Stack Memory Allocation
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.data
@AREA Stack, ALIGN=10, DATA, NOINIT
installStack:
.zero 4096*5
TOPinstallStack:
.end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; End of CStartup.s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -