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

📄 init.s

📁 ucos在EP9302上的移植,运行正常,欢迎使用.
💻 S
字号:
;**************************************************************************
;                                                                         *
;   PROJECT     : ARM9 port test                                          *
;                                                                         *
;   MODULE      : INIT.s                                                  *
;                                                                         *
;   AUTHOR      : samping                                                 *
;                 URL  :                                                  *
;                 EMAIL: samping1982@yahoo.com.cn                         *
;                                                                         *
;   PROCESSOR   : EP9302 (32 bit ARM920T RISC core from CIRRUS Logic)     *
;                                                                         *
;   IDE         : SDT 2.51 & ADS 1.2                                      *
;                                                                         *
;   DESCRIPTION :                                                         *
;                 EP9302 processor Start up assembly code file.           *
;   DATE        : 2007.3.9                                                *
;                                                                         *
;*************************************************************************/

;**************************************************************************
;
;修改人:		tsczz
;修改日期:		3.21
;
;**************************************************************************






; Register definition

EP9302_WATCHDOG  				EQU          	0x80940000

VIC1_base						EQU			 	0x800b0000
VIC2_base						EQU				0x800c0000
	
VIC1IntClear					EQU   			(VIC1_base+0x0014)
VIC2IntClear					EQU				(VIC2_base+0x0014)

EP9302_SDRAMCTRL            	EQU             0x80060000
EP9302_SDRAMCTRL_GlConfig		EQU				(EP9302_SDRAMCTRL+0x0004)
EP9302_SDRAMCTRL_RefrshTimr		EQU				(EP9302_SDRAMCTRL+0x0008)
EP9302_SDRAMCTRL_BootSts  		EQU				(EP9302_SDRAMCTRL+0x000c)
EP9302_SDRAMCTRL_DEVCFG_0       EQU				(EP9302_SDRAMCTRL+0x0010)
EP9302_SDRAMCTRL_DEVCFG_1       EQU				(EP9302_SDRAMCTRL+0x0014)
EP9302_SDRAMCTRL_DEVCFG_2       EQU				(EP9302_SDRAMCTRL+0x0018)
EP9302_SDRAMCTRL_DEVCFG_3       EQU				(EP9302_SDRAMCTRL+0x001c)

EP9302_CLKSET1					EQU				0x80930020

R1_I	EQU	(1<<12)
R1_M    EQU	(1)


;Pre-defined MODE constants
USERMODE    EQU 	0x10
FIQMODE     EQU 	0x11
IRQMODE     EQU 	0x12
SVCMODE     EQU 	0x13
ABORTMODE   EQU 	0x17
UNDEFMODE   EQU 	0x1b
MODEMASK    EQU 	0x1f
NOINT       EQU 	0xc0


;Pre-defined stack size
_USE_STKSIZE  EQU 256
_SVC_STKSIZE  EQU 256*9
_UND_STKSIZE  EQU 256
_ABT_STKSIZE  EQU 256
_IRQ_STKSIZE  EQU 256
_FIQ_STKSIZE  EQU 0


SRAM_SADDR    EQU 0x00000000
SRAM_SIZE     EQU 32*1024*1024           ; 32M SDRAM
SRAM_EADDR    EQU SRAM_SADDR+SRAM_SIZE-1 ; SRAM end address


STK_SIZE      EQU _SVC_STKSIZE+_UND_STKSIZE+_ABT_STKSIZE+_IRQ_STKSIZE+_FIQ_STKSIZE

STK_SADDR     EQU SRAM_EADDR+1-STK_SIZE
ISR_BADDR     EQU 0x00100000




		MACRO
$HandlerLabel HANDLER $HandleLabel

$HandlerLabel
        sub sp,sp,#4
        stmfd sp!,{r0}
        ldr r0,=$HandleLabel
        ldr r0,[r0]
        str r0,[sp,#4]
        ldmfd sp!,{r0,pc}
        MEND
        
        
      	IMPORT	|Image$$RO$$Limit|  
      	IMPORT	|Image$$RW$$Base|   
      	IMPORT	|Image$$ZI$$Base|   
        IMPORT	|Image$$ZI$$Limit|  



        AREA  Start, CODE, READONLY

        ENTRY
ResetEntry
        b ResetHandler              ; for debug
        b HandlerUndef              ; handlerUndef
        b HandlerSWI                ; SWI interrupt handler
        b HandlerPabort             ; handlerPAbort
        b HandlerDabort             ; handlerDAbort
        b .                         ; handlerReserved
        b HandlerIRQ                ; handlerIRQ
        b HandlerFIQ                ; handlerFIQ

HandlerFIQ     HANDLER HandleFIQ
HandlerIRQ     HANDLER HandleIRQ
HandlerUndef   HANDLER HandleUndef
HandlerSWI     HANDLER HandleSWI
HandlerDabort  HANDLER HandleDabort
HandlerPabort  HANDLER HandlePabort



;*****************************************************************************
;
; ResetHandler is the startup code to be used
;
;*****************************************************************************
ResetHandler
        ldr    r0,=EP9302_WATCHDOG     	 	; watch dog disable 
        ldr    r1,=0xAA55         
        str    r1,[r0]

        ldr    r0,=VIC1IntClear
        ldr    r1,=0xffffffff				; VIC1 interrupt disable
        str    r1,[r0]

		ldr	   r0,=VIC2IntClear				; VIC2 interrupt disable		
		str	   r1,[r0]
		
		
		

; **************************************************************************
;pll setting
; **************************************************************************
;pll1		
		ldr r0,=0x6+(0x7<<5)+(0x17<<11)+(0x1<<16)+(0x0<<18)+(0x2<<20)+(0x1<<23)+(0x1<<24)+(0x0<<25)
		ldr r1,=EP9302_CLKSET1
		str r0,[r1]
		
		NOP
		NOP
		NOP
		NOP
		NOP

;pll2 disable at reset by default




;******************************************************************************
;disable mmu
;******************************************************************************
;void MMU_DisableMMU
   mrc p15,0,r0,c1,c0,0
   bic r0,r0,#R1_M
   mcr p15,0,r0,c1,c0,0
   
;void MMU_DisableICache
   mrc p15,0,r0,c1,c0,0
   bic r0,r0,#R1_I
   mcr p15,0,r0,c1,c0,0
  
  
  
 
;****************************************************************************
;Define Stacks
;The follow section defines the stack pointer for IRQ and SVC modes.
;This is optional as the debugger will assign its own stack area with the
;$top_of_memory variable in "debugger internals".
;However, this code is necessary if this program is used to launch an
;embedded applications in C or assembly.
;****************************************************************************

		ldr sp,=SVCStack            ; Why?

        bl InitStacks

;*****************************************************************************
; 初始化C程序的运行环境
;*****************************************************************************

    	LDR	  	R0,=|Image$$RO$$Limit|
    	LDR	    R1,=|Image$$RW$$Base|	
    	LDR	    R3,=|Image$$ZI$$Base|	
    	
		                    ; 如果映像文件只有一个执行域,那么Image$$RO$$Limit和Image$$RW$$Base
    	CMP	  	R0,R1       ; 是一样的,也即是execution view下RW section下的地址和load view
    	BEQ	    LOOP1       ; 下RW section的地址相同,这样不需要移动RW section
    	
LOOP0	CMP	    R1,R3	    ; 当不相等时,就需要copy RW section 到execution view下指定地址
    	LDRCC   R2,[R0],#4      
    	STRCC   R2,[R1],#4 
    	BCC	    LOOP0
    	
LOOP1	LDR	    R1,=|Image$$ZI$$Limit|    ;为初始化ZI section段做一些准备工作
    	MOV	    R2,#0
    	
LOOP2	CMP	    R3,R1       ;真正初始化ZI section段
    	STRCC   R2,[R3],#4  
    	BCC	    LOOP2
;*****************************************************************************
; end初始化C程序的运行环境
   	
       
program
        ;
        ; Call the actual C program.
        ; Should never return.
        ;
    	IMPORT  Main
    	B		Main



InitStacks
        ; Do not use DRAM,such as stmfd,ldmfd......
        ; SVCstack is initialized before
        ; Under toolkit ver 2.50, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'
        
        mrs r0,cpsr
        bic r0,r0,#MODEMASK
        orr r1,r0,#UNDEFMODE|NOINT
        msr cpsr_cxsf,r1            ; UndefMode
        ldr sp,=UndefStack
        
        orr r1,r0,#ABORTMODE|NOINT
        msr cpsr_cxsf,r1            ; AbortMode
        ldr sp,=AbortStack

        orr r1,r0,#IRQMODE|NOINT
        msr cpsr_cxsf,r1            ; IRQMode
        ldr sp,=IRQStack
        
        orr r1,r0,#FIQMODE|NOINT
        msr cpsr_cxsf,r1            ; FIQMode
        ldr sp,=FIQStack

        bic r0,r0,#MODEMASK|NOINT
        orr r1,r0,#SVCMODE
        msr cpsr_cxsf,r1            ; SVCMode
        ldr sp,=SVCStack

        ; USER mode is not initialized.

        mov pc,lr                   ; The LR register may be not valid for the mode changes.




;*****************************************************************************
;
; Zero-initialized read/write data area for stacks.
; This area is determined by the RW value in the Linker under "entry and base".  
;*****************************************************************************


        AREA  SYS_STK, DATA, READWRITE, NOINIT
        
;*****************************************************************************
;
; Memory buffers to contain the stacks for the various processor modes which
; we will be using.
;
;*****************************************************************************
		^       (ISR_BADDR-0xD00)

UserStack       #       _SVC_STKSIZE
SVCStack        #       _UND_STKSIZE
UndefStack      #       _ABT_STKSIZE
AbortStack      #       _IRQ_STKSIZE
IRQStack        #       _FIQ_STKSIZE
FIQStack        #       0 


        AREA  ISR_HOOK, DATA, READWRITE, NOINIT
        
        ^  		ISR_BADDR
HandleReset     # 4
HandleUndef     # 4
HandleSWI       # 4
HandlePabort    # 4
HandleDabort    # 4
HandleReserved  # 4
HandleIRQ       # 4
HandleFIQ       # 4

HandleUnused1		# 4
HandleUnused2		# 4
HandleCOMMRX		# 4
HandleCOMMTX		# 4
HandleTC1OI			# 4
HandleTC2OI			# 4
HandleAACINTR		# 4
HandleDMAM2P0		# 4
HandleDMAM2P1		# 4
HandleDMAM2P2		# 4
HandleDMAM2P3		# 4
HandleDMAM2P4		# 4
HandleDMAM2P5		# 4
HandleDMAM2P6		# 4
HandleDMAM2P7		# 4
HandleDMAM2P8		# 4
HandleDMAM2P9		# 4
HandleDMAM2M0		# 4
HandleDMAM2M1		# 4
HandleReserved3		# 4
HandleGPIO0INTR		# 4
HandleGPIO1INTR		# 4
HandleGPIO2INTR		# 4
HandleUART1RXINTR1	# 4
HandleUART1TXINTR1	# 4
HandleUART2RXINTR2	# 4
HandleUART2TXINTR2	# 4
HandleReserved4		# 4
HandleReserved5		# 4
HandleReserved6		# 4
HandleReserved7		# 4
HandleReserved8		# 4

HandleINT_EXT0		# 4
HandleINT_EXT1		# 4
HandleReserved9		# 4
HandleTINTR			# 4
HandleWEINT			# 4
HandleINT_RTC		# 4
HandleINT_IrDA		# 4
HandleINT_MAC		# 4
HandleINT_EXT2		# 4
HandleReserved10	# 4
HandleReserved11	# 4
HandleReserved12	# 4
HandleReserved13	# 4
HandleINT_SSP1RX	# 4
HandleINT_SSP1TX	# 4
HandleReserved14	# 4
HandleReserved15	# 4
HandleReserved16	# 4
HandleReserved17	# 4
HandleTC3OI			# 4
HandleINT_UART1		# 4
HandleSSPINTR		# 4
HandleINT_UART2		# 4
HandleReserved18	# 4
HandleUSHINTR		# 4
HandleReserved19	# 4
HandleReserved20	# 4
HandleGPIOINTR		# 4
HandleSAIINTR		# 4
HandleUnused21		# 4
HandleUnused22		# 4
HandleUnused23		# 4

;
;*****************************************************************************
;
		END

⌨️ 快捷键说明

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