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

📄 norom.s

📁 三星4510开发板Sdns100上代的演示程序
💻 S
字号:
        GET memory.a
;;        GET snds.a
        GET newsnds.a
        AREA    Init, CODE, READONLY

; --- Define entry point
        EXPORT  __main  ; defined to ensure that C runtime system
__main                  ; is not linked in
        ENTRY
; --- Setup interrupt / exception vectors
; If the DRAM is at address 0, 
; then we copy a sequence of LDR PC instructions over the vectors
; (Note: We copy LDR PC instructions because branch instructions
; could not simply be copied, the offset in the branch instruction
; would have to be modified so that it branched into ROM. Also, a
; branch instructions might not reach if the ROM is at an address
; > 32M).
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        MOV     R8, #0
        ADR     R9, Vector_Init_Block
        LDMIA   R9!, {R0-R7}
        STMIA   R8!, {R0-R7}
        LDMIA   R9!, {R0-R7}
        STMIA   R8!, {R0-R7}

; Now fall into the LDR PC, Reset_Addr instruction which will continue
; execution at 'Reset_Handler'

Vector_Init_Block
        LDR     PC, Reset_Addr
        LDR     PC, Undefined_Addr
        LDR     PC, SWI_Addr
        LDR     PC, Prefetch_Addr
        LDR     PC, Abort_Addr
        NOP
        LDR     PC, IRQ_Addr
        LDR     PC, FIQ_Addr

Reset_Addr      DCD     Reset_Handler
Undefined_Addr  DCD     SystemUndefinedHandler
SWI_Addr        DCD     SystemSwiHandler
Prefetch_Addr   DCD     SystemPrefetchHandler
Abort_Addr      DCD     SystemAbortHandler
                DCD     0       	; Reserved vector
IRQ_Addr        DCD     SystemIrqHandler
FIQ_Addr        DCD     SystemFiqHandler

    AREA Main, CODE, READONLY

;==========================================================
; The Reset Entry Point
;==========================================================
    EXPORT    Reset_Handler
Reset_Handler                           ;/* Reset Entry Point */

	LDR	r1, =IntMask
	LDR	r0, =0xFFFFFFFF
	STR	r0, [r1]

;=====================================
; Initialise STACK 
;=====================================
INITIALIZE_STACK
    MRS    r0, cpsr
    BIC    r0, r0, #LOCKOUT | MODE_MASK
    ORR    r2, r0, #USR_MODE

    ORR    r1, r0, #LOCKOUT | FIQ_MODE
    MSR    cpsr_cf, r1
    MSR    spsr_cf, r2
    LDR    sp, =FIQ_STACK

    ORR    r1, r0, #LOCKOUT | IRQ_MODE
    MSR    cpsr_cf, r1
    MSR    spsr_cf, r2
    LDR    sp, =IRQ_STACK

    ORR    r1, r0, #LOCKOUT | ABT_MODE
    MSR    cpsr_cf, r1
    MSR    spsr_cf, r2
    LDR    sp, =ABT_STACK

    ORR    r1, r0, #LOCKOUT | UDF_MODE
    MSR    cpsr_cf, r1
    MSR    spsr_cf, r2
    LDR    sp, =UDF_STACK

    ORR    r1, r0, #LOCKOUT | SUP_MODE
    MSR    cpsr_cf, r1
    MSR    spsr_cf, r2
    LDR    sp, =SUP_STACK   ; Change CPSR to SVC mode


	;=====================================
	; LED Display
	;=====================================
	LDR	r1, =IOPMOD
	LDR	r0, =0xFF
	STR	r0, [r1]

	LDR	r1, =IOPDATA
	LDR	r0, =0x55 
	STR	r0, [r1]

;=====================================
; 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$$ZI$$Limit|      ; to zero initialise

    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     %1
0   CMP     r1, r3                  ; Copy init data
    LDRCC   r2, [r0], #4
    STRCC   r2, [r1], #4
    BCC     %0
1   LDR     r1, =|Image$$ZI$$Limit| ; Top of zero init segment
    MOV     r2, #0
2   CMP     r3, r1               ; Zero init
    STRCC   r2, [r3], #4
    BCC     %2

;====================================================
; Now change to user mode and set up user mode stack.
;====================================================
    MRS    r0, cpsr
    BIC    r0, r0, #LOCKOUT | MODE_MASK
    ORR    r1, r0, #USR_MODE
    MSR    cpsr_cf, r0
    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
;===========================

        IMPORT  C_Entry
        BL      C_Entry

;===========================================
; Exception Vector Function Definition
; Consist of function Call from C-Program.
;===========================================
SystemUndefinedHandler
	IMPORT	ISR_UndefHandler
	STMFD	sp!, {r0-r12}
	B	ISR_UndefHandler
	LDMFD	sp!, {r0-r12, pc}^

SystemSwiHandler
	STMFD	sp!, {r0-r12,lr}
	LDR	r0, [lr, #-4]
	BIC	r0, r0, #0xff000000
	CMP	r0, #0xff
	BEQ	MakeSVC
	
	CMP	r0, #0xf0
	BEQ	SDRAMInit
	
	LDMFD	sp!, {r0-r12, pc}^
MakeSVC
	MRS	r1, spsr
	BIC	r1, r1, #MODE_MASK
	ORR	r2, r1, #SUP_MODE
	MSR	spsr_cf, r2
	LDMFD	sp!, {r0-r12, pc}^
	
SDRAMInit
	LDR    r0, =SystemInitDataSDRAM_S
  LDMIA  r0, {r1-r12}
  LDR    r0, =0x3FF0000 + 0x3010   ;ROMCntr Offset : 0x3010
  STMIA  r0, {r1-r12}
  MOV    pc,lr
	
SystemPrefetchHandler
	IMPORT	ISR_PrefetchHandler
	STMFD	sp!, {r0-r12, lr}
	B	ISR_PrefetchHandler
	LDMFD	sp!, {r0-r12, lr}
	;ADD	sp, sp, #4
	SUBS	pc, lr, #4

SystemAbortHandler
	IMPORT	ISR_AbortHandler
	STMFD	sp!, {r0-r12, lr}
	B	ISR_AbortHandler
	LDMFD	sp!, {r0-r12, lr}
	;ADD	sp, sp, #4
	SUBS	pc, lr, #8

SystemReserv
	SUBS	pc, lr, #4

SystemIrqHandler
	IMPORT	ISR_IrqHandler
	STMFD	sp!, {r0-r12, lr}
	BL	ISR_IrqHandler
	LDMFD	sp!, {r0-r12, lr}
	SUBS	pc, lr, #4

SystemFiqHandler
	IMPORT	ISR_FiqHandler
	STMFD	sp!, {r0-r7, lr}
	BL	ISR_FiqHandler
	LDMFD	sp!, {r0-r7, lr}
	SUBS	pc, lr, #4


    ALIGN

	AREA ROMDATA, DATA, READONLY

;======================================================
; DRAM System Initialize Data(KS32C5000 and KS32C50100)
;======================================================
SystemInitData
        DCD rEXTDBWTH   ; DRAM1(Half), ROM5(Byte), ROM1(Half), else 32bit
        DCD rROMCON0    ; 0x0000000 ~ 0x01FFFFF, ROM0,4Mbit,2cycle
        DCD rROMCON1    ; 
        DCD rROMCON2    ; 0x0400000 ~ 0x05FFFFF, ROM2
        DCD rROMCON3    ; 0x0600000 ~ 0x07FFFFF, ROM3
        DCD rROMCON4    ; 0x0800000 ~ 0x09FFFFF, ROM4
        DCD rROMCON5    ; 
        DCD rDRAMCON0   ; 0x1000000 ~ 0x13FFFFF, DRAM0 4M,
        DCD rDRAMCON1   ; 0x1400000 ~ 0x17FFFFF, DRAM1 4M,
        DCD rDRAMCON2   ; 0x1800000 ~ 0x1EFFFFF, DRAM2 16M
        DCD rDRAMCON3   ; 0x1C00000 ~ 0x1FFFFFF
        DCD rREFEXTCON  ; External I/O, Refresh


SystemInitData_S
        DCD rEXTDBWTH     ; DRAM1(Half), ROM5(Byte), ROM1(Half), else 32bit
        DCD rROMCON0_S    ; 0x1000000 ~ 0x11FFFFF, ROM0,4Mbit,2cycle
        DCD rROMCON1_S    ; 0x1200000 ~ 0x13FFFFF, ROM0
        DCD rROMCON2_S    ; 0x1400000 ~ 0x15FFFFF, ROM2
        DCD rROMCON3_S    ; 0x1600000 ~ 0x17FFFFF, ROM3
        DCD rROMCON4_S    ; 0x1800000 ~ 0x19FFFFF, ROM4
        DCD rROMCON5_S    ; 0x1A00000 ~ 0x1BFFFFF, ROM4
        DCD rDRAMCON0_S   ; 0x0000000 ~ 0x03FFFFF, DRAM0 4M,
        DCD rDRAMCON1_S   ; 0x0400000 ~ 0x07FFFFF, DRAM1 4M,
        DCD rDRAMCON2_S   ; 0x0800000 ~ 0x0EFFFFF, DRAM2 16M
        DCD rDRAMCON3_S   ; 0x0C00000 ~ 0x0FFFFFF
        DCD rREFEXTCON  ; External I/O, Refresh

;======================================================
; SDRAM System Initialize Data  (KS32C50100 only)
;======================================================
SystemInitDataSDRAM
        DCD rEXTDBWTH   ; DRAM1(Half), ROM5(Byte), ROM1(Half), else 32bit
        DCD rROMCON0    ; 0x0000000 ~ 0x01FFFFF, ROM0,4Mbit,2cycle
        DCD rROMCON1    ; 
        DCD rROMCON2    ; 0x0400000 ~ 0x05FFFFF, ROM2
        DCD rROMCON3    ; 0x0600000 ~ 0x07FFFFF, ROM3
        DCD rROMCON4    ; 0x0800000 ~ 0x09FFFFF, ROM4
        DCD rROMCON5    ; 
        DCD rSDRAMCON0  ; 0x1000000 ~ 0x13FFFFF, DRAM0 4M,
        DCD rSDRAMCON1  ; 0x1400000 ~ 0x17FFFFF, DRAM1 4M,
        DCD rSDRAMCON2  ; 0x1800000 ~ 0x1EFFFFF, DRAM2 16M
        DCD rSDRAMCON3  ; 0x1C00000 ~ 0x1FFFFFF
        DCD rSREFEXTCON ; External I/O, Refresh

SystemInitDataSDRAM_S
        DCD rEXTDBWTH      ; DRAM1(Half), ROM5(Byte), ROM1(Half), else 32bit
        DCD rROMCON0_S     ; 0x1000000 ~ 0x11FFFFF, ROM0,4Mbit,2cycle
        DCD rROMCON1_S     ; 0x1200000 ~ 0x13FFFFF, ROM0
        DCD rROMCON2_S     ; 0x1400000 ~ 0x15FFFFF, ROM2
        DCD rROMCON3_S     ; 0x1600000 ~ 0x17FFFFF, ROM3
        DCD rROMCON4_S     ; 0x1800000 ~ 0x19FFFFF, ROM4
        DCD rROMCON5_S     ; 0x1A00000 ~ 0x1BFFFFF, ROM4
        DCD rSDRAMCON0_S   ; 0x0000000 ~ 0x03FFFFF, DRAM0 4M,
        DCD rSDRAMCON1_S   ; 0x0400000 ~ 0x07FFFFF, DRAM1 4M,
        DCD rSDRAMCON2_S   ; 0x0800000 ~ 0x0EFFFFF, DRAM2 16M
        DCD rSDRAMCON3_S   ; 0x0C00000 ~ 0x0FFFFFF
        DCD rSREFEXTCON    ; External I/O, Refresh
        
SystemInitDataSDRAM_S2
        DCD 0x0aa0300a   ; DRAM1(Half), ROM5(Byte), ROM1(Half), else 32bit
        DCD 0x1204002C   ; 0x1000000 ~ 0x11FFFFF, ROM0,4Mbit,2cycle
        DCD 0x1605002C   ; 0x1200000 ~ 0x13FFFFF, ROM0
        DCD 0x16044060   ; 0x1400000 ~ 0x15FFFFF, ROM2
        DCD 0x18058060   ; 0x1600000 ~ 0x17FFFFF, ROM3
        DCD 0x1a060060   ; 0x1800000 ~ 0x19FFFFF, ROM4
        DCD 0x1c068060   ; 0x1A00000 ~ 0x1BFFFFF, ROM4
        DCD 0x10000390   ; 0x0000000 ~ 0x03FFFFF, DRAM0 4M,
        DCD 0x00000110   ; 0x0400000 ~ 0x07FFFFF, DRAM1 4M,
        DCD 0x00000110   ; 0x0800000 ~ 0x0EFFFFF, DRAM2 16M
        DCD 0x00000110   ; 0x0C00000 ~ 0x0FFFFFF
        DCD 0xffa982fe   ; External I/O, Refres
;/***************************************************/
    AREA SYS_STACK, NOINIT
;/***************************************************/
                %       USR_STACK_SIZE
USR_STACK
                %       UDF_STACK_SIZE
UDF_STACK
                %       ABT_STACK_SIZE
ABT_STACK
                %       IRQ_STACK_SIZE
IRQ_STACK
                %       FIQ_STACK_SIZE
FIQ_STACK
                %       SUP_STACK_SIZE
SUP_STACK

;/***************************************************/

    END

⌨️ 快捷键说明

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