Mercurial > ~darius > hgwebdir.cgi > stm32temp
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 |