xref: /nrf52832-nimble/rt-thread/libcpu/arm/sep4020/start_rvds.S (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero;==============================================================================================
2*10465441SEvalZero;	star_rvds.s	for Keil MDK 4.10
3*10465441SEvalZero;
4*10465441SEvalZero;   SEP4020 start up code
5*10465441SEvalZero;
6*10465441SEvalZero; Change Logs:
7*10465441SEvalZero; Date           Author       Notes
8*10465441SEvalZero; 2010-03-17     zchong
9*10465441SEvalZero;=============================================================================================
10*10465441SEvalZero
11*10465441SEvalZeroPMU_PLTR        EQU     0x10001000     	; PLL���ȶ�����ʱ��
12*10465441SEvalZeroPMU_PMCR        EQU     0x10001004      ; ϵͳ��ʱ��PLL�Ŀ��ƼĴ���
13*10465441SEvalZeroPMU_PUCR        EQU     0x10001008      ; USBʱ��PLL�Ŀ��ƼĴ���
14*10465441SEvalZeroPMU_PCSR        EQU     0x1000100C      ; �ڲ�ģ��ʱ��Դ�����Ŀ��ƼĴ���
15*10465441SEvalZeroPMU_PDSLOW      EQU     0x10001010      ; SLOW״̬��ʱ�ӵķ�Ƶ����
16*10465441SEvalZeroPMU_PMDR        EQU     0x10001014      ; оƬ����ģʽ�Ĵ���
17*10465441SEvalZeroPMU_RCTR        EQU     0x10001018      ; Reset���ƼĴ���
18*10465441SEvalZeroPMU_CLRWAKUP    EQU     0x1000101C      ; WakeUp����Ĵ���
19*10465441SEvalZero
20*10465441SEvalZeroRTC_CTR			EQU	 	0x1000200C		; RTC���ƼĴ���
21*10465441SEvalZero
22*10465441SEvalZeroINTC_IER		EQU		0x10000000		; IRQ�ж�����Ĵ���
23*10465441SEvalZeroINTC_IMR		EQU		0x10000008		; IRQ�ж����μĴ���
24*10465441SEvalZeroINTC_IFSR		EQU		0x10000030		; IRQ�ж�����״̬�Ĵ���
25*10465441SEvalZeroINTC_FIER		EQU 	0x100000C0		; FIQ�ж�����Ĵ���
26*10465441SEvalZeroINTC_FIMR		EQU		0x100000C4		; FIQ�ж����μĴ���
27*10465441SEvalZero
28*10465441SEvalZeroEMI_CSACONF     EQU     0x11000000     	; CSA�������üĴ���
29*10465441SEvalZeroEMI_CSECONF     EQU     0x11000010      ; CSE�������üĴ���
30*10465441SEvalZeroEMI_CSFCONF     EQU     0x11000014      ; CSF�������üĴ���
31*10465441SEvalZeroEMI_SDCONF1     EQU     0x11000018      ; SDRAMʱ�����üĴ���1
32*10465441SEvalZeroEMI_SDCONF2     EQU     0x1100001C      ; SDRAMʱ�����üĴ���2, SDRAM��ʼ���õ���������Ϣ
33*10465441SEvalZeroEMI_REMAPCONF   EQU     0x11000020      ; Ƭѡ�ռ估��ַӳ��REMAP���üĴ���
34*10465441SEvalZero
35*10465441SEvalZeroMode_USR        EQU     0x10
36*10465441SEvalZeroMode_FIQ        EQU     0x11
37*10465441SEvalZeroMode_IRQ        EQU     0x12
38*10465441SEvalZeroMode_SVC        EQU     0x13
39*10465441SEvalZeroMode_ABT        EQU     0x17
40*10465441SEvalZeroMode_UND        EQU     0x1B
41*10465441SEvalZeroMode_SYS        EQU     0x1F
42*10465441SEvalZero
43*10465441SEvalZeroI_Bit           EQU     0x80            ; when I bit is set, IRQ is disabled
44*10465441SEvalZeroF_Bit           EQU     0x40            ; when F bit is set, FIQ is disabled
45*10465441SEvalZeroNOINT     		EQU     0xc0
46*10465441SEvalZeroMASK_MODE		EQU		0x0000003F
47*10465441SEvalZeroMODE_SVC32		EQU		0x00000013
48*10465441SEvalZero
49*10465441SEvalZero; Internal Memory Base Addresses
50*10465441SEvalZeroFLASH_BASE      EQU     0x20000000
51*10465441SEvalZeroRAM_BASE        EQU     0x04000000
52*10465441SEvalZeroSDRAM_BASE      EQU     0x30000000
53*10465441SEvalZero
54*10465441SEvalZero; Stack
55*10465441SEvalZeroUnused_Stack_Size  EQU     0x00000100
56*10465441SEvalZeroSvc_Stack_Size  EQU     0x00001000
57*10465441SEvalZeroAbt_Stack_Size  EQU     0x00000000
58*10465441SEvalZeroFiq_Stack_Size  EQU     0x00000000
59*10465441SEvalZeroIrq_Stack_Size  EQU     0x00001000
60*10465441SEvalZeroUsr_Stack_Size  EQU     0x00000000
61*10465441SEvalZero
62*10465441SEvalZero;SVC STACK
63*10465441SEvalZero                AREA    STACK, NOINIT, READWRITE, ALIGN=3
64*10465441SEvalZeroSvc_Stack    	SPACE   Svc_Stack_Size
65*10465441SEvalZero__initial_sp
66*10465441SEvalZeroSvc_Stack_Top
67*10465441SEvalZero
68*10465441SEvalZero;IRQ STACK
69*10465441SEvalZero				AREA	STACK, NOINIT, READWRITE, ALIGN=3
70*10465441SEvalZeroIrq_Stack		SPACE	Irq_Stack_Size
71*10465441SEvalZeroIrq_Stack_Top
72*10465441SEvalZero
73*10465441SEvalZero;UNUSED STACK
74*10465441SEvalZero				AREA	STACK, NOINIT, READWRITE, ALIGN=3
75*10465441SEvalZeroUnused_Stack	SPACE	Unused_Stack_Size
76*10465441SEvalZeroUnused_Stack_Top
77*10465441SEvalZero
78*10465441SEvalZero
79*10465441SEvalZero; Heap
80*10465441SEvalZeroHeap_Size       EQU     0x0000100
81*10465441SEvalZero
82*10465441SEvalZero                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
83*10465441SEvalZero				EXPORT	Heap_Mem
84*10465441SEvalZero__heap_base
85*10465441SEvalZeroHeap_Mem        SPACE   Heap_Size
86*10465441SEvalZero__heap_limit
87*10465441SEvalZero
88*10465441SEvalZero                PRESERVE8
89*10465441SEvalZero
90*10465441SEvalZero;  Area Definition and Entry Point
91*10465441SEvalZero;  Startup Code must be linked first at Address at which it expects to run.
92*10465441SEvalZero
93*10465441SEvalZero                AREA    RESET, CODE, READONLY
94*10465441SEvalZero                ARM
95*10465441SEvalZero
96*10465441SEvalZero;  Exception Vectors
97*10465441SEvalZero;  Mapped to Address 0.
98*10465441SEvalZero;  Absolute addressing mode must be used.
99*10465441SEvalZero;  Dummy Handlers are implemented as infinite loops which can be modified.
100*10465441SEvalZero			EXPORT Entry_Point
101*10465441SEvalZeroEntry_Point
102*10465441SEvalZeroVectors         LDR     PC,Reset_Addr
103*10465441SEvalZero                LDR     PC,Undef_Addr
104*10465441SEvalZero                LDR     PC,SWI_Addr
105*10465441SEvalZero                LDR     PC,PAbt_Addr
106*10465441SEvalZero                LDR     PC,DAbt_Addr
107*10465441SEvalZero                NOP                            ; Reserved Vector
108*10465441SEvalZero                LDR     PC,IRQ_Addr
109*10465441SEvalZero                LDR     PC,FIQ_Addr
110*10465441SEvalZero
111*10465441SEvalZeroReset_Addr      DCD     Reset_Handler
112*10465441SEvalZeroUndef_Addr      DCD     Undef_Handler
113*10465441SEvalZeroSWI_Addr        DCD     SWI_Handler
114*10465441SEvalZeroPAbt_Addr       DCD     PAbt_Handler
115*10465441SEvalZeroDAbt_Addr       DCD     DAbt_Handler
116*10465441SEvalZero                DCD     0                      ; Reserved Address
117*10465441SEvalZeroIRQ_Addr        DCD     IRQ_Handler
118*10465441SEvalZeroFIQ_Addr        DCD     FIQ_Handler
119*10465441SEvalZero
120*10465441SEvalZeroUndef_Handler   B       Undef_Handler
121*10465441SEvalZeroSWI_Handler     B		SWI_Handler
122*10465441SEvalZeroPAbt_Handler    B       Abort_Handler
123*10465441SEvalZeroDAbt_Handler    B       Abort_Handler
124*10465441SEvalZeroFIQ_Handler     B       FIQ_Handler
125*10465441SEvalZero
126*10465441SEvalZeroAbort_Handler	PROC
127*10465441SEvalZero				ARM
128*10465441SEvalZero				EXPORT	Abort_Handler
129*10465441SEvalZeroDeadLoop	BHI	DeadLoop    ; Abort happened in irq mode, halt system.
130*10465441SEvalZero				ENDP
131*10465441SEvalZero
132*10465441SEvalZero
133*10465441SEvalZero; Reset Handler
134*10465441SEvalZero				;IMPORT	__user_initial_stackheap
135*10465441SEvalZero                EXPORT  Reset_Handler
136*10465441SEvalZeroReset_Handler
137*10465441SEvalZero
138*10465441SEvalZero;****************************************************************
139*10465441SEvalZero;* Shutdown watchdog
140*10465441SEvalZero;****************************************************************
141*10465441SEvalZero				LDR		R0,=RTC_CTR
142*10465441SEvalZero				LDR		R1,=0x0
143*10465441SEvalZero				STR		R1,[R0]
144*10465441SEvalZero
145*10465441SEvalZero;****************************************************************
146*10465441SEvalZero;* shutdown interrupts
147*10465441SEvalZero;****************************************************************
148*10465441SEvalZero				MRS		R0, CPSR
149*10465441SEvalZero				BIC		R0, R0, #MASK_MODE
150*10465441SEvalZero				ORR		R0, R0, #MODE_SVC32
151*10465441SEvalZero				ORR 	R0, R0, #I_Bit
152*10465441SEvalZero				ORR 	R0, R0, #F_Bit
153*10465441SEvalZero				MSR		CPSR_c, r0
154*10465441SEvalZero
155*10465441SEvalZero				LDR		R0,=INTC_IER
156*10465441SEvalZero				LDR		R1,=0x0
157*10465441SEvalZero				STR		R1,[R0]
158*10465441SEvalZero				LDR		R0,=INTC_IMR
159*10465441SEvalZero				LDR		R1,=0xFFFFFFFF
160*10465441SEvalZero				STR		R1,[R0]
161*10465441SEvalZero
162*10465441SEvalZero				LDR		R0,=INTC_FIER
163*10465441SEvalZero				LDR		R1,=0x0
164*10465441SEvalZero				STR		R1,[R0]
165*10465441SEvalZero				LDR		R0,=INTC_FIMR
166*10465441SEvalZero				LDR		R1,=0x0F
167*10465441SEvalZero				STR		R1,[R0]
168*10465441SEvalZero
169*10465441SEvalZero;****************************************************************
170*10465441SEvalZero;* Initialize Stack Pointer
171*10465441SEvalZero;****************************************************************
172*10465441SEvalZero
173*10465441SEvalZero			    LDR		SP, =Svc_Stack_Top	;init SP_svc
174*10465441SEvalZero
175*10465441SEvalZero			    MOV		R4, #0xD2			;chmod to irq and init SP_irq
176*10465441SEvalZero			    MSR		cpsr_c, R4
177*10465441SEvalZero			    LDR		SP, =Irq_Stack_Top
178*10465441SEvalZero
179*10465441SEvalZero			    MOV		R4, #0XD1			;chomod to fiq and init SP_fiq
180*10465441SEvalZero			    MSR		cpsr_c, R4
181*10465441SEvalZero			    LDR		SP, =Unused_Stack_Top
182*10465441SEvalZero
183*10465441SEvalZero			    MOV		R4, #0XD7			;chomod to abt and init SP_ABT
184*10465441SEvalZero			    MSR		cpsr_c, R4
185*10465441SEvalZero			    LDR		SP, =Unused_Stack_Top
186*10465441SEvalZero
187*10465441SEvalZero			    MOV		R4, #0XDB			;chomod to undf and init SP_UNDF
188*10465441SEvalZero			    MSR		cpsr_c, R4
189*10465441SEvalZero			    LDR		SP, =Unused_Stack_Top
190*10465441SEvalZero
191*10465441SEvalZero			                                ;chomod to abt and init SP_sys
192*10465441SEvalZero			    MOV 	R4, #0xDF           ;all interrupts disabled
193*10465441SEvalZero			    MSR		cpsr_c, R4       ;SYSTEM mode, @32-bit code mode
194*10465441SEvalZero			    LDR		SP, =Unused_Stack_Top
195*10465441SEvalZero
196*10465441SEvalZero			    MOV		R4, #0XD3           ;chmod to svc modle, CPSR IRQ bit  is disable
197*10465441SEvalZero			    MSR		cpsr_c, R4
198*10465441SEvalZero
199*10465441SEvalZero
200*10465441SEvalZero
201*10465441SEvalZero;****************************************************************
202*10465441SEvalZero;* Initialize PMU & System Clock
203*10465441SEvalZero;****************************************************************
204*10465441SEvalZero
205*10465441SEvalZero			    LDR    R4,    =PMU_PCSR         ; ������ģ��ʱ��
206*10465441SEvalZero			    LDR    R5,    =0x0001ffff
207*10465441SEvalZero			    STR    R5,    [ R4 ]
208*10465441SEvalZero
209*10465441SEvalZero			    LDR    R4,    =PMU_PLTR         ; ����PLL�ȶ�����ʱ��Ϊ����ֵ50us*100M.
210*10465441SEvalZero			    LDR    R5,    =0x00fa00fa
211*10465441SEvalZero			    STR    R5,    [ R4 ]
212*10465441SEvalZero
213*10465441SEvalZero			    LDR    R4,    =PMU_PMDR         ; ��SLOWģʽ����NORMALģʽ
214*10465441SEvalZero			    LDR    R5,    =0x00000001
215*10465441SEvalZero			    STR    R5,    [ R4 ]
216*10465441SEvalZero
217*10465441SEvalZero			    LDR    R4,    =PMU_PMCR         ; ����ϵͳʱ��Ϊ80MHz
218*10465441SEvalZero			    LDR    R5,    =0x00004009       ; 400b -- 88M
219*10465441SEvalZero			    STR    R5,    [ R4 ]
220*10465441SEvalZero
221*10465441SEvalZero			    ;PMU_PMCR�Ĵ�����15λ��Ҫ�дӵ͵��ߵķ�ת�����ܴ���PLL��ʱ������
222*10465441SEvalZero			    LDR    R4,    =PMU_PMCR
223*10465441SEvalZero			    LDR    R5,    =0x0000c009
224*10465441SEvalZero			    STR    R5,    [ R4 ]
225*10465441SEvalZero
226*10465441SEvalZero;****************************************************************
227*10465441SEvalZero;* ��ʼ��EMI
228*10465441SEvalZero;****************************************************************
229*10465441SEvalZero
230*10465441SEvalZero				IF		:DEF:INIT_EMI
231*10465441SEvalZero
232*10465441SEvalZero		    	LDR    	R4,    =EMI_CSACONF     ; CSAƬѡʱ���������
233*10465441SEvalZero		    	LDR    	R5,    =0x08a6a6a1
234*10465441SEvalZero		    	STR    	R5,    [ R4 ]
235*10465441SEvalZero
236*10465441SEvalZero		    	LDR    	R4,    =EMI_CSECONF     ; CSEƬѡʱ���������,�������
237*10465441SEvalZero		    	LDR    	R5,    =0x8cfffff1
238*10465441SEvalZero		    	STR    	R5,    [ R4 ]
239*10465441SEvalZero
240*10465441SEvalZero		    	LDR    	R4,    =EMI_SDCONF1     ; SDRAM��������1
241*10465441SEvalZero		    	LDR    	R5,    =0x1E104177
242*10465441SEvalZero		    	STR    	R5,    [ R4 ]
243*10465441SEvalZero
244*10465441SEvalZero		    	LDR    	R4,    =EMI_SDCONF2     ; SDRAM��������2
245*10465441SEvalZero		    	LDR   	R5,    =0x80001860
246*10465441SEvalZero		    	STR    	R5,    [ R4 ]
247*10465441SEvalZero
248*10465441SEvalZero				ENDIF
249*10465441SEvalZero
250*10465441SEvalZero; Copy Exception Vectors to Internal RAM
251*10465441SEvalZero
252*10465441SEvalZero				IF      :DEF:RAM_INTVEC
253*10465441SEvalZero
254*10465441SEvalZero				ADR     R8, 	Vectors         ; Source
255*10465441SEvalZero				LDR     R9, 	=RAM_BASE       ; Destination
256*10465441SEvalZero				LDMIA   R8!, 	{R0-R7}        	; Load Vectors
257*10465441SEvalZero				STMIA   R9!, 	{R0-R7}        	; Store Vectors
258*10465441SEvalZero				LDMIA   R8!, 	{R0-R7}        	; Load Handler Addresses
259*10465441SEvalZero				STMIA   R9!, 	{R0-R7}        	; Store Handler Addresses
260*10465441SEvalZero
261*10465441SEvalZero				ENDIF
262*10465441SEvalZero
263*10465441SEvalZero; Remap on-chip RAM to address 0
264*10465441SEvalZero
265*10465441SEvalZero				IF      :DEF:REMAP
266*10465441SEvalZero
267*10465441SEvalZero				LDR     R0, 	=EMI_REMAPCONF
268*10465441SEvalZero				IF		:DEF:RAM_INTVEC
269*10465441SEvalZero				MOV     R1, 	#0x80000000
270*10465441SEvalZero				ELSE
271*10465441SEvalZero				MOV		R1,		#0x0000000b
272*10465441SEvalZero				ENDIF
273*10465441SEvalZero				STR     R1, 	[R0, #0]   ; Remap
274*10465441SEvalZero
275*10465441SEvalZero				ENDIF
276*10465441SEvalZero
277*10465441SEvalZero;***************************************************************
278*10465441SEvalZero;* Open irq interrupt
279*10465441SEvalZero;***************************************************************
280*10465441SEvalZero
281*10465441SEvalZero			    MRS		R4, cpsr
282*10465441SEvalZero			    BIC		R4, R4, #0x80  		    ; set bit7 to zero
283*10465441SEvalZero			    MSR		cpsr_c, R4
284*10465441SEvalZero
285*10465441SEvalZero; Enter the C code
286*10465441SEvalZero				IMPORT  __main
287*10465441SEvalZero				LDR		R0,=__main
288*10465441SEvalZero				BX		R0
289*10465441SEvalZero
290*10465441SEvalZero
291*10465441SEvalZero                IMPORT rt_interrupt_enter
292*10465441SEvalZero                IMPORT rt_interrupt_leave
293*10465441SEvalZero                IMPORT rt_thread_switch_interrupt_flag
294*10465441SEvalZero                IMPORT rt_interrupt_from_thread
295*10465441SEvalZero                IMPORT rt_interrupt_to_thread
296*10465441SEvalZero                IMPORT rt_hw_trap_irq
297*10465441SEvalZero
298*10465441SEvalZeroIRQ_Handler     PROC
299*10465441SEvalZero                EXPORT IRQ_Handler
300*10465441SEvalZero                STMFD   sp!, {r0-r12,lr}
301*10465441SEvalZero                BL  rt_interrupt_enter
302*10465441SEvalZero                BL  rt_hw_trap_irq
303*10465441SEvalZero                BL  rt_interrupt_leave
304*10465441SEvalZero
305*10465441SEvalZero                ; if rt_thread_switch_interrupt_flag set, jump to
306*10465441SEvalZero                ; rt_hw_context_switch_interrupt_do and don't return
307*10465441SEvalZero                LDR r0, =rt_thread_switch_interrupt_flag
308*10465441SEvalZero                LDR r1, [r0]
309*10465441SEvalZero                CMP r1, #1
310*10465441SEvalZero                BEQ rt_hw_context_switch_interrupt_do
311*10465441SEvalZero
312*10465441SEvalZero                LDMFD   sp!, {r0-r12,lr}
313*10465441SEvalZero                SUBS    pc, lr, #4
314*10465441SEvalZero                ENDP
315*10465441SEvalZero
316*10465441SEvalZero; /*
317*10465441SEvalZero; * void rt_hw_context_switch_interrupt_do(rt_base_t flag)
318*10465441SEvalZero; */
319*10465441SEvalZerort_hw_context_switch_interrupt_do   PROC
320*10465441SEvalZero                EXPORT rt_hw_context_switch_interrupt_do
321*10465441SEvalZero                MOV     r1,  #0         ; clear flag
322*10465441SEvalZero                STR     r1,  [r0]
323*10465441SEvalZero
324*10465441SEvalZero                LDMFD   sp!, {r0-r12,lr}; reload saved registers
325*10465441SEvalZero                STMFD   sp!, {r0-r3}    ; save r0-r3
326*10465441SEvalZero                MOV     r1,  sp
327*10465441SEvalZero                ADD     sp,  sp, #16    ; restore sp
328*10465441SEvalZero                SUB     r2,  lr, #4     ; save old task's pc to r2
329*10465441SEvalZero
330*10465441SEvalZero                MRS     r3,  spsr       ; get cpsr of interrupt thread
331*10465441SEvalZero
332*10465441SEvalZero                ; switch to SVC mode and no interrupt
333*10465441SEvalZero                MSR     cpsr_c, #I_Bit :OR F_Bit :OR Mode_SVC
334*10465441SEvalZero
335*10465441SEvalZero                STMFD   sp!, {r2}       ; push old task's pc
336*10465441SEvalZero                STMFD   sp!, {r4-r12,lr}; push old task's lr,r12-r4
337*10465441SEvalZero                MOV     r4,  r1         ; Special optimised code below
338*10465441SEvalZero                MOV     r5,  r3
339*10465441SEvalZero                LDMFD   r4!, {r0-r3}
340*10465441SEvalZero                STMFD   sp!, {r0-r3}    ; push old task's r3-r0
341*10465441SEvalZero                STMFD   sp!, {r5}       ; push old task's cpsr
342*10465441SEvalZero                MRS     r4,  spsr
343*10465441SEvalZero                STMFD   sp!, {r4}       ; push old task's spsr
344*10465441SEvalZero
345*10465441SEvalZero                LDR     r4,  =rt_interrupt_from_thread
346*10465441SEvalZero                LDR     r5,  [r4]
347*10465441SEvalZero                STR     sp,  [r5]       ; store sp in preempted tasks's TCB
348*10465441SEvalZero
349*10465441SEvalZero                LDR     r6,  =rt_interrupt_to_thread
350*10465441SEvalZero                LDR     r6,  [r6]
351*10465441SEvalZero                LDR     sp,  [r6]       ; get new task's stack pointer
352*10465441SEvalZero
353*10465441SEvalZero                LDMFD   sp!, {r4}       ; pop new task's spsr
354*10465441SEvalZero                MSR     spsr_cxsf, r4
355*10465441SEvalZero                LDMFD   sp!, {r4}       ; pop new task's psr
356*10465441SEvalZero                MSR     cpsr_cxsf, r4
357*10465441SEvalZero
358*10465441SEvalZero                LDMFD   sp!, {r0-r12,lr,pc} ; pop new task's r0-r12,lr & pc
359*10465441SEvalZero                ENDP
360*10465441SEvalZero
361*10465441SEvalZero
362*10465441SEvalZero
363*10465441SEvalZero				ALIGN
364*10465441SEvalZero				IF      :DEF:__MICROLIB
365*10465441SEvalZero
366*10465441SEvalZero				EXPORT  __heap_base
367*10465441SEvalZero				EXPORT  __heap_limit
368*10465441SEvalZero				EXPORT __initial_sp
369*10465441SEvalZero
370*10465441SEvalZero				ELSE	;__MICROLIB
371*10465441SEvalZero; User Initial Stack & Heap
372*10465441SEvalZero				AREA    |.text|, CODE, READONLY
373*10465441SEvalZero
374*10465441SEvalZero				IMPORT  __use_two_region_memory
375*10465441SEvalZero				EXPORT  __user_initial_stackheap
376*10465441SEvalZero__user_initial_stackheap
377*10465441SEvalZero
378*10465441SEvalZero				LDR     R0, =  Heap_Mem
379*10465441SEvalZero				LDR     R1, = (Svc_Stack + 	   Svc_Stack_Size)
380*10465441SEvalZero				LDR     R2, = (Heap_Mem +      Heap_Size)
381*10465441SEvalZero				LDR     R3, = Svc_Stack
382*10465441SEvalZero				BX      LR
383*10465441SEvalZero				ALIGN
384*10465441SEvalZero				ENDIF
385*10465441SEvalZero				END
386