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

📄 init.s

📁 本source code 為s3c4510的bootloader
💻 S
📖 第 1 页 / 共 3 页
字号:
; [31]    Sync DRAM interface for 4 DRAM banksSYNC_DRAM_CONFIGURATION     IF :DEF: ROM_AT_ADDRESS_ZERO;ROM and RAM Configuration(Multiple Load and Store);/* ROM sturtup tests & monitor */   	LDR     r0, =SystemInitDataSDRAM	LDMIA   r0, {r1-r12}	LDR	r0, =0x3FF0000 + 0x3010 ; EXTDBWTH Offset : 0x3010	STMIA   r0, {r1-r12}    ENDIF	LDR	r0, =0x3FF0000		 	LDR	r1, =0x83FFFFA0   	; SetValue = 0x83FFFFA1	STR	r1, [r0]	  	; Cache,WB disable                           		; Start_addr = 0x3FF00000INITIALIZE_C;=====================================; Initialise memory required by C code;=====================================    	IMPORT  |Image$$RO$$Limit|  ; End of ROM code (=start of ROM data)    	IMPORT  |Image$$RW$$Base|   ; Base of RAM to initialise    	IMPORT  |Image$$ZI$$Base|   ; Base and limit of area        IMPORT  |Image$$RW$$Limit|  ;    	IMPORT  |Image$$ZI$$Limit|  ; to zero initialise    IF :DEF: ROM_AT_ADDRESS_ZERO;/* ROM_AT_ADDRESS_ZERO defined in ROM startup tests and in Monitor */    IF :DEF: LED_ONLY;/* Monitor */;/* RO area - ROM bank 0; RW, ZI in internal SDRAM */;/* => copy RW area to internal SDRAM */;/* Image$$RW$$Base must be set to 0x3FE0000 in linker command line */    	LDR     r0, =|Image$$RO$$Limit|;    	LDR     r1, =|Image$$RW$$Base|;        LDR     r3, =|Image$$RW$$Limit|;1       CMP     r1, r3 			; while(r1 < r3)    	LDRLO   r2, [r0], #4	     	; [r0 += 4]    	STRLO   r2, [r1], #4	     	; [r1 += 4]    	BLO     %1    ELSE;/* ROM Startup, copy  RO/RW areas to external DRAM */;/* ! Image$$RO$$Limit must be equal Image$$RW$$Base ! */        MOV     r0, #0         MOV     r1, #0x1000000    	LDR     r3, =|Image$$ZI$$Base|;0   	CMP     r0, r3               ; while(r0 < r3)    	LDRLO   r2, [r0], #4	     ; [r0 += 4]    	STRLO   r2, [r1], #4	     ; [r1 += 4]    	BLO     %0    ENDIF     ENDIF 	;/* Init ZI area */    	MOV     r2, #0    	LDR     r1, =|Image$$ZI$$Base|;    	LDR     r3, =|Image$$ZI$$Limit|;    IF :DEF: ROM_AT_ADDRESS_ZERO    IF :DEF: LED_ONLY    ELSE        ORR     r1, r1, #0x1000000        ORR     r3, r3, #0x1000000    ENDIF    ENDIF 2  	CMP     r1, r3                   	STRLO   r2, [r1], #4    	BLO     %2;/***********************************************************************/;/*---+------------+							*/;/*   |            |							*/;/*   |            |        +------------+ Image$$ZI$$Limit		*/;/*   |            |        |            |                 		*/;/*   |            |        | ZI Output  | ZI execution  		*/;/* R |            |        |    section |    region  			*/;/* A |            |        |            |                 		*/;/* M |            |        |            | Image$$ZI$$Base 		*/;/*   |            |        +------------+	    is equal     	*/;/*   |            |        |            | Iage$$RW$$Limit 		*/;/*   |            |        |            |                 		*/;/*   |            |        | RW Output  | RW execution 		*/;/*   |            |        |    section |    region 			*/;/*   |            |        |            |                 		*/;/*---+------------+--------+------------+ Image$$RW$$Base		*/;/*   | RW Output  |        |            |				*/;/* R |    section | single |            |  				*/;/* O +------------+ load   +------------+ Image$$RO$$Limit     	*/;/*   |            | region |            |                 		*/;/* M | RO Output  |        | RO Output  | RO execution  		*/;/*   |    section |        |    section |    region   			*/;/*---+------------+--------+------------+ 				*/	;/*    LOAD VIEW            EXECUTION VIEW				*/;/***********************************************************************/	;====================================================	; Now change to user mode and set up user mode stack.	;====================================================        MRS     r0, cpsr	BIC	r0, r0, #LOCK_MASK | MODE_MASK	ORR	r1, r0, #USR_MODE	MSR	cpsr_csxf, r1			; 	LDR	sp, =USR_STACK;/* Call C_Entry application routine with a pointer to the first */;/* available memory address after ther compiler's global data   */;/* This memory may be used by the application.                  */	;===========================	; Now we enter the C Program	;===========================;/* UART0 Baud Rate Register */   	LDR	r1, =UARTBRD0			; I/O port data register        LDR     r2, =0x00280       		; 38400;/* 0x00a20 //   9600 // cnt0 = 162 cnt1 = 0, 0 */;/* 0x00500 //  19200 // cnt0 =  80 cnt1 = 0, 1 */;/* 0x00280 //  38400 // cnt0 =  40 cnt1 = 0, 2 */;/* 0x001a0 //  57600 // cnt0 =  26 cnt1 = 0, 3 */;/* 0x000d0 // 115200 // cnt0 =  13 cnt1 = 0, 4 */;/* 0x00060 // 230400 // cnt0 =   6 cnt1 = 0, 5 */;/* 0x00020 // 460800 // cnt0 =   2 cnt1 = 0, 6 not available*/        STR     r2, [r1]	LDR	r0, =0x3FF0000	   		; SYSCFG register address 	LDR 	r1,[r0]		   		; Read SYSCFG register value	LDR	r2, =0x0C000000	   		; lo bits of PID(product id); [30:26]; 00000 = KS32C5000; 00001 = KS32C50100 s3c4510x; 11001 = s3c4510B; 00011 = s3c4530X; 10011 = s3c4530A	AND	r0, r1, r2         		; 	CMP	r0, r2	BEQ 	UART0_S3C4530_CONFUART0_S3C4510_CONF;/* UART0 Line Control Register */	LDR	r1, =UARTLCON0			; I/O port data register        LDR     r2, =0x03        		; ULCON_WL8 0x03, word lengt 8 bit        STR     r2, [r1];/* UART0 Control register */    	LDR	r1, =UARTCONT0			; I/O port data register        LDR     r2, =0x09        		; Tx mode int, Rx mode int           STR     r2, [r1]	B 	P16_startUART0_S3C4530_CONF	LDR	r1, =UCON0			; I/O port data register        LDR     r2, =0x00003005       		; word len 8 bit, tx mode int, rx mode int        STR     r2, [r1]P16_start;/* write 0/1 to port P16 */;////////////////////////////////////////////////////////////////////////////////        LDR     r3, =0x4			; 03.04.2002 loop countP16_write	LDR	r0, =0x00000			; write 0 to port P16	LDR	r1, =IOPDATA			; I/O port data register	MOV	r2, #0x040000			; loop counterP16_write_0	STR	r0, [r1]			; 1 cycle, write to I/O port data register	SUBS	r2, r2, #1			; 1 cycle, Down Count	BNE 	P16_write_0			; 3 cycles	LDR	r0, =0x10000			; write 1 to port P16	MOV	r2, #0x040000			; loop counterP16_write_1	STR	r0, [r1]			; write to I/O port data register	SUBS	r2, r2, #1			; Down Count	BNE 	P16_write_1			;        SUBS    r3, r3, #1 			;        BNE     P16_write			;    IF :DEF: ROM_AT_ADDRESS_ZERO    IF :DEF: LED_ONLY               ;/* Monitor, DRAM remain start from 0x01000000 (16M-32M)*/    ELSE ;/* ROM startup test, remap DRAM to 0x00000000, ROM to 0x02000000 */   	LDR     r0, =SystemWorkDataSDRAM	LDMIA   r0, {r1-r12}	LDR	r0, =0x3FF0000 + 0x3010 ; EXTDBWTH Offset : 0x3010	STMIA   r0, {r1-r12}    ENDIF     ENDIF        IMPORT  C_Entry				;        BL      C_Entry				;	AREA ROMDATA, DATA, READONLY    IF :DEF: ROM_AT_ADDRESS_ZERO;======================================================; DRAM System Initialize Data(KS32C5000 and KS32C50100);======================================================SystemInitData    	IF :DEF: EDO_DRAM_CONFIG 	DCD rEXTDBWTH		;	DCD initROMCON0		;	DCD initROMCON1		;     	DCD initROMCON2		;	DCD initROMCON3		;	DCD initROMCON4		;	DCD initROMCON5		; 	DCD initDRAMCON0   	;	DCD initDRAMCON1	;	DCD initDRAMCON2	;	DCD initDRAMCON3	;	DCD rREFEXTCON  	;    	ENDIF;======================================================; SDRAM System Initialize Data	(KS32C50100 only);======================================================SystemInitDataSDRAM	DCD rEXTDBWTH		;	DCD initROMCON0		;	DCD initROMCON1		;    	DCD initROMCON2		;	DCD initROMCON3		;	DCD initROMCON4		;	DCD initROMCON5		;	DCD initSDRAMCON0  	;	DCD initSDRAMCON1	;	DCD initSDRAMCON2	;	DCD initSDRAMCON3	;	DCD rSREFEXTCON 	;    	IF :DEF: LED_ONLY;/* Monitor used only SystemInitDataSDRAM memory map */	ELSESystemWorkDataSDRAM	DCD rEXTDBWTH		;	DCD workROMCON0		;	DCD workROMCON1		;    	DCD workROMCON2		;	DCD workROMCON3		;	DCD workROMCON4		;	DCD workROMCON5		;	DCD workSDRAMCON0  	;	DCD workSDRAMCON1	;	DCD workSDRAMCON2	;	DCD workSDRAMCON3	;	DCD rSREFEXTCON 	;    	ENDIF    ENDIF								ALIGN;/***********************************************************************/	AREA    START, CODE;/***********************************************************************/	EXPORT	StartDownPgmStartDownPgm	MOV	PC, r0;/***********************************************************************/	AREA SYS_STACK, NOINIT;/***********************************************************************/;/***********************************************************************/;/*NOINIT -Indicates that the data section is uninitialized, or 	*/;/*	initialized to zero. It contains only space reservation 	*/;/*	directives (DCD ,DCDU , DCQ , DCQU , DCW , DCWU  ), with no 	*/;/*	initialized values. You can decide at link time whether an 	*/;/*	AREA is uninitialized or zero-initialized (see the Linker 	*/;/*	chapter in ADS Compiler, Linker, and Utilities Guide).		*/;/*									*/;/*DATA  - Contains data, not instructions. READWRITE is the default.   */;/***********************************************************************/				;/***********************************************************************/				;/* Data definition directive SPACE					*/;/* The SPACE directive reserves a zeroed block of memory. 		*/;/* %is a synonym for SPACE.						*/;/*									*/;/* Syntax								*/;/*									*/;/* {label }SPACE expr							*/;/*									*/;/* where: expr evaluates to the number of zeroed bytes 		*/;/* 	   to reserve 							*/;/***********************************************************************/				                %       USR_STACK_SIZEUSR_STACK                %       UDF_STACK_SIZEUDF_STACK                %       ABT_STACK_SIZEABT_STACK                %       IRQ_STACK_SIZEIRQ_STACK                %       FIQ_STACK_SIZEFIQ_STACK                %       SUP_STACK_SIZESUP_STACK;/* Stack sizes are defined in evm50100.a */;/* The ATPCS,and ARMand Thumb C and C++ compilers always use */;/* a full descending stack. */;/***********************************************************************/	END

⌨️ 快捷键说明

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