comparison libs/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/FLASH/Dual_Boot/HiTOP/STM3210X-XL_BANK1/cstart_thumb2.asm @ 0:c59513fd84fb

Initial commit of STM32 test code.
author Daniel O'Connor <darius@dons.net.au>
date Mon, 03 Oct 2011 21:19:15 +1030
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:c59513fd84fb
1
2
3 ;; NOTE: To allow the use of this file for both ARMv6M and ARMv7M,
4 ;; we will only use 16-bit Thumb intructions.
5
6 .extern _lc_ub_stack ; usr/sys mode stack pointer
7 .extern _lc_ue_stack ; symbol required by debugger
8 .extern _lc_ub_table ; ROM to RAM copy table
9 .extern main
10 .extern _Exit
11 .extern exit
12 .weak exit
13 .global __get_argcv
14 .weak __get_argcv
15 .extern __argcvbuf
16 .weak __argcvbuf
17 .extern __init_hardware
18 .extern __init_vector_table
19 .extern SystemInit
20
21 .if @defined('__PROF_ENABLE__')
22 .extern __prof_init
23 .endif
24 .if @defined('__POSIX__')
25 .extern posix_main
26 .extern _posix_boot_stack_top
27 .endif
28
29 .global _START
30
31 .section .text.cstart
32
33 .thumb
34 _START:
35 ;; anticipate possible ROM/RAM remapping
36 ;; by loading the 'real' program address
37 ldr r1,=_Next
38 bx r1
39 _Next:
40 ;; initialize the stack pointer
41 ldr r1,=_lc_ub_stack ; TODO: make this part of the vector table
42 mov sp,r1
43
44 ;; call a user function which initializes hardware
45 ;; such as ROM/RAM re-mapping or MMU configuration
46 bl __init_hardware
47
48 ;ldr r0, =SystemInit
49 ;bx r0
50 bl SystemInit
51
52 ;; copy initialized sections from ROM to RAM
53 ;; and clear uninitialized data sections in RAM
54
55 ldr r3,=_lc_ub_table
56 movs r0,#0
57 cploop:
58 ldr r4,[r3,#0] ; load type
59 ldr r5,[r3,#4] ; dst address
60 ldr r6,[r3,#8] ; src address
61 ldr r7,[r3,#12] ; size
62
63 cmp r4,#1
64 beq copy
65 cmp r4,#2
66 beq clear
67 b done
68
69 copy:
70 subs r7,r7,#1
71 ldrb r1,[r6,r7]
72 strb r1,[r5,r7]
73 bne copy
74
75 adds r3,r3,#16
76 b cploop
77
78 clear:
79 subs r7,r7,#1
80 strb r0,[r5,r7]
81 bne clear
82
83 adds r3,r3,#16
84 b cploop
85
86 done:
87 ;; initialize or copy the vector table
88 bl __init_vector_table
89
90 .if @defined('__POSIX__')
91
92 ;; posix stack buffer for system upbringing
93 ldr r0,=_posix_boot_stack_top
94 ldr r0, [r0]
95 mov sp,r0
96
97 .else
98
99 ;; load r10 with end of USR/SYS stack, which is
100 ;; needed in case stack overflow checking is on
101 ;; NOTE: use 16-bit instructions only, for ARMv6M
102 ldr r0,=_lc_ue_stack
103 mov r10,r0
104
105 .endif
106
107 .if @defined('__PROF_ENABLE__')
108 bl __prof_init
109 .endif
110
111 .if @defined('__POSIX__')
112 ;; call posix_main with no arguments
113 bl posix_main
114 .else
115 ;; retrieve argc and argv (default argv[0]==NULL & argc==0)
116 bl __get_argcv
117 ldr r1,=__argcvbuf
118 ;; call main
119 bl main
120 .endif
121
122 ;; call exit using the return value from main()
123 ;; Note. Calling exit will also run all functions
124 ;; that were supplied through atexit().
125 bl exit
126
127 __get_argcv: ; weak definition
128 movs r0,#0
129 bx lr
130
131 .ltorg
132 .endsec
133
134 .calls '_START','__init_hardware'
135 .calls '_START','__init_vector_table'
136 .if @defined('__PROF_ENABLE__')
137 .calls '_START','__prof_init'
138 .endif
139 .if @defined('__POSIX__')
140 .calls '_START','posix_main'
141 .else
142 .calls '_START','__get_argcv'
143 .calls '_START','main'
144 .endif
145 .calls '_START','exit'
146 .calls '_START','',0
147
148 .end