⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hms30c7202init.s

📁 基于ARM核的HMS7202
💻 S
字号:
@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@;;
@;; 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] @设置MEMCFG0寄存器ROM chip0,禁止突发模式,正常访问等待状态数为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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -