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

📄 startup.s

📁 ucosII 2.84版源码
💻 S
📖 第 1 页 / 共 2 页
字号:
2
	ldr		r8,=I_PMST ;INTMSK work-around.
	ldr		r9,[r8]
	str		r9,[r8]
	
	ldmfd	sp!,{r8-r9}
	add		sp,sp,#4
	subs	pc,lr,#4

;****************************************************
;*	START											*
;****************************************************
ResetHandler
	ldr		r0, =WTCON		;watch dog disable 
	ldr		r1, =0x0 		
	str		r1, [r0]
	   		
	ldr		r0, =INTMSK
	ldr		r1, =0x07ffffff	;all interrupt disable
	str		r1, [r0]
	
	;****************************************************
	;*	Set clock control registers						*
	;****************************************************
	ldr		r0, =LOCKTIME
	ldr		r1, =0xfff
	str		r1, [r0]
	
	[ PLLONSTART
	ldr		r0, =PLLCON							;temporary setting of PLL
	ldr		r1, =((M_DIV<<12)+(P_DIV<<4)+S_DIV)	;Fin=10MHz,Fout=60MHz
	str		r1, [r0]
	]
	
	ldr		r0, =CLKCON		 
	ldr		r1, =0x7ff8							;All unit block CLK enable	
	str		r1, [r0]
	
	;****************************************
	;*  change BDMACON reset value for BDMA *   
	;****************************************
	ldr		r0, =BDIDES0       
	ldr		r1, =0x40000000		;BDIDESn reset value should be 0x40000000	 
	str		r1, [r0]
	   		    
	ldr		r0, =BDIDES1      
	ldr		r1, =0x40000000		;BDIDESn reset value should be 0x40000000	 
	str		r1, [r0]
	
	;****************************************************
	;*	Set memory control registers					* 	
	;****************************************************
	ldr		r0,=SMRDATA
	ldmia	r0,{r1-r13}
	ldr		r0,=0x01c80000		;BWSCON Address
	stmia	r0,{r1-r13}
	
	;****************************************************
	;*	Initialize stacks								*
	;*  current is SVC mode, after boot                 * 
	;****************************************************
	ldr		sp, =SvcStackBase	;this could not be executed, if InitStacks is not a C function
								;must be executed, because stack is nedded if InitStacks is a C function
	bl		InitStacks
	
	;****************************************************
	;*	Setup IRQ handler								*
	;****************************************************
	ldr		r0, =HandleIRQ		;This routine is needed
	ldr		r1, =IsrIRQ			;if there is not 'subs pc,lr,#4' at 0x18, 0x1c
	str		r1, [r0]
	
	;****************************************************
	;*	Setup SWI handler								*
	;****************************************************
	ldr		r0, =HandleSWI
	ldr		r1, =SoftwareInterrupt
	str		r1, [r0]
	
	
	b		__main


;****************************************************
;*	The function for initializing stack				*
;****************************************************
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'
	
	mov		r2, lr					;save return address, current mode is SVCMODE
	   		
	mrs		r0, cpsr
	bic		r0, r0, #MODEMASK
	orr		r1, r0, #UNDEFMODE|NOINT
	msr		cpsr_cxsf, r1			;UndefMode
	ldr		sp, =UndefStackBase
	   		
	orr		r1, r0, #ABORTMODE|NOINT
	msr		cpsr_cxsf, r1			;AbortMode
	ldr		sp, =AbortStackBase
	   		
	orr		r1, r0, #IRQMODE|NOINT
	msr		cpsr_cxsf, r1			;IrqMode
	ldr		sp, =IrqStackBase
	   		
	orr		r1, r0, #FIQMODE|NOINT
	msr		cpsr_cxsf, r1			;FiqMode
	ldr		sp, =FiqStackBase
	   		
	orr		r1, r0, #SVCMODE|NOINT
	msr		cpsr_cxsf, r1			;SvcMode
	ldr		sp, =SvcStackBase

	bic		r0, r0, #MODEMASK|NOINT
	orr		r1, r0, #SYSMODE
	msr		cpsr_cxsf, r1			;SysMode
	ldr		sp, =SysStackBase
	
	
	;USER mode is not initialized
	mov		pc, r2					;use R2 save return address before
									;The LR register may be not valid for the mode changes


__user_initial_stackheap
	ldr		r0, =HeapBase
	ldr		r2, =HeapLimit
	ldr		r3, =StackLimit
	ldr		r1, =SysStackBase
	mov		pc, lr


;**********************************************************************
;*      The function for disable interrupt                            *
;*  This functions works only if the processor is in previliged mode  *
;**********************************************************************
;vDisableInterrupt
;    mrs	    r0,cpsr
;    orr	    r0,r0,#NOINT
;    msr	    cpsr_cxsf,r0
;    mov	    pc,lr


;**********************************************************************
;*      The function for enable interrupt                             *
;*  This functions works only if the processor is in previliged mode  *
;**********************************************************************
;vEnableInterrupt
;    mrs	    r0,cpsr
;    bic	    r0,r0,#NOINT
;    msr	    cpsr_cxsf,r0
;    mov	    pc,lr


	LTORG

SMRDATA DATA
;*****************************************************************
;* Memory configuration has to be optimized for best performance *
;* The following parameter is not optimized.                     *
;*****************************************************************

;*** memory access cycle parameter strategy ***
; 1) Even FP-DRAM, EDO setting has more late fetch point by half-clock
; 2) The memory settings,here, are made the safe parameters even at 66Mhz.
; 3) FP-DRAM Parameters:tRCD=3 for tRAC, tcas=2 for pad delay, tcp=2 for bus load.
; 4) DRAM refresh rate is for 40Mhz. 

	[ BUSWIDTH=16
		DCD	0x11000012	;Bank0=OM[1:0], Bank1=16bit, Bank2-Bank5=8bit, Bank6-Bank7=16bit
	| ;BUSWIDTH=32
		DCD	0x22222220	;Bank0=OM[1:0], Bank1~Bank7=32bit
	]
	DCD	((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))	;GCS0
	DCD	((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))	;GCS1 
	DCD	((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))	;GCS2
	DCD	((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))	;GCS3
	DCD	((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))	;GCS4
	DCD	((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))	;GCS5
	[ BDRAMTYPE="DRAM" 
	DCD	((B6_MT<<15)+(B6_Trcd<<4)+(B6_Tcas<<3)+(B6_Tcp<<2)+(B6_CAN))	;GCS6 check the MT value in parameter.a
	DCD	((B7_MT<<15)+(B7_Trcd<<4)+(B7_Tcas<<3)+(B7_Tcp<<2)+(B7_CAN))	;GCS7
	| ;"SDRAM"
	DCD	((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))	;GCS6
	DCD	((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))	;GCS7
	]
	DCD	((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)	;REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk, tchr=3clk,count=1019
	DCD	0x17			;SCLK power down mode, BANKSIZE 16M/16M
	DCD	0x20			;MRSR6 CL=2clk
	DCD	0x20			;MRSR7


	PRESERVE8
	AREA Heap_Base, DATA, NOINIT, READWRITE
	LTORG
HeapBase			SPACE	0


	PRESERVE8
	AREA Heap_Limit, DATA, NOINIT, READWRITE
	LTORG
HeapLimit			SPACE	0


	PRESERVE8
	AREA Stack_Limit, DATA, NOINIT, READWRITE
	LTORG
StackLimit			SPACE	0

;the stack increase from high address to low address

	PRESERVE8
	AREA Stacks, DATA, NOINIT, READWRITE
	LTORG
SysStackLimit		SPACE	SYS_STACKLENGTH*4
SysStackBase		SPACE	0
SvcStackLimit		SPACE	SVC_STACKLENGTH*4
SvcStackBase		SPACE	0
UndefStackLimit		SPACE	UNDEF_STACKLENGTH*4
UndefStackBase		SPACE	0
AbortStackLimit		SPACE	ABORT_STACKLENGTH*4
AbortStackBase		SPACE	0
IrqStackLimit		SPACE	IRQ_STACKLENGTH*4
IrqStackBase		SPACE	0
FiqStackLimit		SPACE	FIRQ_STACKLENGTH*4
FiqStackBase		SPACE	0


	PRESERVE8
	AREA Isr_Table, DATA, NOINIT, READWRITE
	LTORG
;		^	_ISR_STARTADDRESS    ;0xC7FFF00
HandleReset			SPACE	4
HandleUndef			SPACE	4
HandleSWI			SPACE	4
HandlePabort		SPACE	4
HandleDabort		SPACE	4
HandleReserved		SPACE	4
HandleIRQ			SPACE	4
HandleFIQ			SPACE	4

;Do not use the label 'IntVectorTable',
;because armasm.exe can not recognize this label correctly.
;the value is different with an address you think it may be.
;IntVectorTable
HandleADC			SPACE	4
HandleRTC			SPACE	4
HandleUTXD1			SPACE	4
HandleUTXD0			SPACE	4
HandleSIO			SPACE	4
HandleIIC			SPACE	4
HandleURXD1			SPACE	4
HandleURXD0			SPACE	4
HandleTIMER5		SPACE	4
HandleTIMER4		SPACE	4
HandleTIMER3		SPACE	4
HandleTIMER2		SPACE	4
HandleTIMER1		SPACE	4
HandleTIMER0		SPACE	4
HandleUERR01		SPACE	4
HandleWDT			SPACE	4
HandleBDMA1			SPACE	4
HandleBDMA0			SPACE	4
HandleZDMA1			SPACE	4
HandleZDMA0			SPACE	4
HandleTICK			SPACE	4
HandleEINT4567		SPACE	4
HandleEINT3			SPACE	4
HandleEINT2			SPACE	4
HandleEINT1			SPACE	4
HandleEINT0			SPACE	4   ;0xc1(c7)fff84


	PRESERVE8
	AREA Vector_Table, CODE, READONLY

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

;The following is used for the vectored interrupt.
HandlerADC		VHANDLER HandleADC
HandlerRTC		VHANDLER HandleRTC
HandlerUTXD1	VHANDLER HandleUTXD1
HandlerUTXD0	VHANDLER HandleUTXD0
HandlerSIO		VHANDLER HandleSIO
HandlerIIC		VHANDLER HandleIIC
HandlerURXD1	VHANDLER HandleURXD1
HandlerURXD0	VHANDLER HandleURXD0
HandlerTIMER5	VHANDLER HandleTIMER5
HandlerTIMER4	VHANDLER HandleTIMER4
HandlerTIMER3	VHANDLER HandleTIMER3
HandlerTIMER2	VHANDLER HandleTIMER2
HandlerTIMER1	VHANDLER HandleTIMER1
HandlerTIMER0	VHANDLER HandleTIMER0
HandlerUERR01	VHANDLER HandleUERR01
HandlerWDT		VHANDLER HandleWDT
HandlerBDMA1	VHANDLER HandleBDMA1
HandlerBDMA0	VHANDLER HandleBDMA0
HandlerZDMA1	VHANDLER HandleZDMA1
HandlerZDMA0	VHANDLER HandleZDMA0
HandlerTICK		VHANDLER HandleTICK
HandlerEINT4567	VHANDLER HandleEINT4567
HandlerEINT3	VHANDLER HandleEINT3
HandlerEINT2	VHANDLER HandleEINT2
HandlerEINT1	VHANDLER HandleEINT1
HandlerEINT0	VHANDLER HandleEINT0


	END

⌨️ 快捷键说明

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