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

📄 init.s

📁 开发三星s3c44b0引导程序
💻 S
📖 第 1 页 / 共 2 页
字号:
;/**********************************************************************/
;/*                                                                    */
;/*   MODULE:      UADSLMCU/KS8947/init.s                              */
;/*   PURPOSE:     Hardware Initialiation code                         */
;/*   Description: S5N8947 BSP ver.1.0.                                */
;/*                                                                    */
;/*--------------------------------------------------------------------*/
;/*              COPYRIGHT 2001 SAMSUNG ELECTRONICS.                   */
;/*--------------------------------------------------------------------*/
;/*                                                                    */
;/*                                                                    */
;/**********************************************************************/


;/**********************************************************************/
;/*                                                                    */ 
;/*       Copyright (c) 2003 上海量子光电公司                          */
;/*                                                                    */
;/*                                                                    */
;/**********************************************************************/

        GET     board.inc

        IMPORT  InstallVector
        IMPORT  SysInitVars

        AREA    INIT, CODE, READONLY

;************************************************************************
;*    HdwInit: Do startup initialization that can't be done in C.       *
;*                                                                      *
;*     SYNTAX: void HdwInit(void);                                      *
;*       NOTE: Called from "begin.s", not C code.  Doesn't return.      *
;*                                                                      *
;************************************************************************
        EXPORT  HdwInit
        EXPORT  RomHdwInit
RomHdwInit
HdwInit
    ;/------------------------------------------------------------------/
    ;/ Some hardware requires a rom/ram remap to get RAM at low         /
    ;/ address and ROM up higher.  This is a good place to do this      /
    ;/------------------------------------------------------------------/

    ;/------------------------------------------------------------------/
    ;/ Configure System Memroy                                          /
    ;/                                                                  /
    ;/ To initialize the memory system, which includes:                 /
    ;/    - Set up base pointer for special-register file.              /
    ;/    - Specify the access timing control parameters for various    /
    ;/      external memories.                                          /
    ;/    - Configure the external memory allocation.                   /
    ;/------------------------------------------------------------------/

    ;/------------------------------------------------------------------/
    ;/ Setup Register SYSCFG                                            /
    ;/    - Special Register Base Addr : 0x3ff0000                      /
    ;/    - Cache and Write Buffer Enable according to the environments /    
    ;/------------------------------------------------------------------/
    ; The default value of ROM_IMAGE is TRUE

    [ ROM_IMAGE      
SetSysCfg
;/----------------------------------------------------------------------/
;/ SDRAM setting :                                                      /
;/----------------------------------------------------------------------/
SYNC_DRAM_CONFIGURATION
      	LDR     r0, =0x3FF0000		  
		LDR     r1, =0x83FF0000   		; Start_addr = 0x3FF0000, WE=0
		STR     r1, [r0]                ; Cache OFF

    ;/------------------------------------------------------------------/
    ;/ Initialize Memory Configuration.                                 /
    ;/ This operation must be done at a time.                           /
    ;/------------------------------------------------------------------/    
		ADD		r0, pc, #(SystemInitData_SDRAM-.-8)
	    LDMIA   r0, {r1-r10}
		LDR     r0, =0x3FF0000 + 0x3010 ; ROMCON Offset : 0x3010
		STMIA   r0, {r1-r10}

		
    ;/------------------------------------------------------------------/
    ;/ Test whether SDRAM can be used or not.                           /
    ;/------------------------------------------------------------------/    
		;LDR 	r1, =EXTHND_BASE
		;STR     r1,[r1]                 ; write to SDRAM base
		;LDR     r2,[r1]                 ; read from SDRAM base
		;CMP     r2,r1                   ; compare above two data
		; SetSVC is not necessary
		;BEQ     SetSVC                  ; if equal, branch to SetSVC
                                        ; else, set SDRAM environment    
        ;B .
    ]
    
    [ REMAP
    ;/------------------------------------------------------------------/
	;/ Copy ROM image to EDO DRAM, Change ROM and DRAM Base pointer     /
	;/------------------------------------------------------------------/
		IMPORT |Image$$RO$$Base|
		IMPORT |Image$$RW$$Limit|
		
DRAM_BASE EQU 0x1700000

ROM2DRAM_COPY_START
1		LDR r0, =|Image$$RO$$Base| ; Get pointer to ROM data
		LDR r1, =|Image$$RW$$Limit| ; and RAM copy
		LDR r2, =DRAM_BASE ; Copy DRAM area base
		SUB r1, r1, r0 ; [r1] is loop count
		ADD r1, r1, #4; [r1] is loop count
		MOV r0, #0
ROM2DRAM_COPY_LOOP
		LDR r3, [r0], #4
		STR r3, [r2], #4
		SUBS r1, r1, #4; Down Count
		BNE ROM2DRAM_COPY_LOOP
	;/------------------------------------------------------------------/
	;/ Change Base address of ROM and DRAM                              /
	;/------------------------------------------------------------------/
		;LDR r13, =SetSVC
		LDR r13, PtInitRemap
		ADD r0, pc, #-(8+.-SystemInitDataSDRAM_S)
		LDMIA r0, {r1-r10}
		LDR r0, =0x3FF0000 + 0x3010 ; ROMCntr Offset : 0x3010
		STMIA r0, {r1-r10}
		MOV pc, r13
		NOP
		NOP
		NOP
PtInitRemap
		DCD SetSVC
	]

    ;/------------------------------------------------------------------/
    ;/ If we are in User mode, get into SVC mode by SWI call.           /
    ;/------------------------------------------------------------------/
SetSVC
        MRS     r0, cpsr
        AND     r1, r0, #PSR_Mode_Mask
        TEQ     r1, #PSR_SVC_Mode       ; Test if in SVC mode
        BEQ     InitINT                 ; if not, skip.

    ;/------------------------------------------------------------------/
    ;/ Setup temporary SWI vector to enter SVC mode.                    /
    ;/ ; Later this vector is to be changed.                            /
    ;/------------------------------------------------------------------/
        ;IMPORT  SWIWrapper
        ;LDR     r0, =HandleSwi          ; SWI exception handler address
        ;LDR     r1, =SWIWrapper         ;                ( = 0x1000008)  
        ;STR     r1, [r0]
        ;SWI     0xff                    ; Set SVC mode.

InitINT
    ;/------------------------------------------------------------------/
    ;/ Enable the FIQ if requested                                      /
    ;/------------------------------------------------------------------/
    [ :DEF: ENABLE_FIQ_FOREVER
        MRS     r0, cpsr
        BIC     r0, r0, #PSR_F_Bit
        MSR     cpsr_cxsf, r0
    ]

    ;/------------------------------------------------------------------/
    ;/ Initialize Interrupt Contollers(20 Interrupts)                                  /
    ;/------------------------------------------------------------------/
        LDR     r0, =INTMODE            ; Init Interupt Mode Register
        LDR     r1, =0x0                ; -> All IRQ mode
        STR     r1, [r0]

        LDR     r0, =INTPEND            ; Init Interupt Pending Register
        LDR     r1, =0x7fffff            ; -> Clear all pending bits
        STR     r1, [r0]

        LDR     r0, =INTMASK            ; Init Interrupt Mask Register
        LDR     r1, =0xffffff           ; -> Diasable all interrupts
        STR     r1, [r0]
		
    ;/------------------------------------------------------------------/
    ;/ Initialize the C run time environment                            /
    ;/------------------------------------------------------------------/
        BL      SysInitVars             ; begin.s / rombegin.s  
   
;/----------------------------------------------------------------------/
;/ Go into each mode in turn and set up the stack pointer for that mode./
;/ The stacks are defined in the BSS segment at the end of this file.   /
;/ If you wish to change the sizes of the stacks they should be         /

⌨️ 快捷键说明

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