1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
|
.section .stack, "aw"
.stack_size = 0x200
.stack_space: .space .stack_size
.section .heap, "aw"
.heap_size = 0x200
.heap_space: .space .heap_size
.section .vectors, "a"
.global __Vectors
.global __Vectors_End
.global __Vectors_Size
.type __Vectors, %function
__Vectors:
.word .stack_space + .stack_size // Stack Pointer
.word Reset_Handler // Reset
.word NMI_Handler // NMI
.word HardFault_Handler // Hard Fault
.word 0 // Reserved
.word 0 // Reserved
.word 0 // Reserved
.word 0 // Reserved
.word 0 // Reserved
.word 0 // Reserved
.word 0 // Reserved
.word SVC_Handler // SVCall
.word 0 // Reserved
.word 0 // Reserved
.word PendSV_Handler // PendSV
.word SysTick_Handler // SysTick
// 中断处理函数
.word IRQ000_Handler
.word IRQ001_Handler
.word IRQ002_Handler
.word IRQ003_Handler
.word IRQ004_Handler
.word IRQ005_Handler
.word IRQ006_Handler
.word IRQ007_Handler
.word IRQ008_Handler
.word IRQ009_Handler
.word IRQ010_Handler
.word IRQ011_Handler
.word IRQ012_Handler
.word IRQ013_Handler
.word IRQ014_Handler
.word IRQ015_Handler
.word IRQ016_Handler
.word IRQ017_Handler
.word IRQ018_Handler
.word IRQ019_Handler
.word IRQ020_Handler
.word IRQ021_Handler
.word IRQ022_Handler
.word IRQ023_Handler
.word IRQ024_Handler
.word IRQ025_Handler
.word IRQ026_Handler
.word IRQ027_Handler
.word IRQ028_Handler
.word IRQ029_Handler
.word IRQ030_Handler
.word IRQ031_Handler
.global __Vectors_End
__Vectors_End:
.global __Vectors_Size
__Vectors_Size = __Vectors_End - __Vectors
.section .text
.global Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
// 重置处理
ldr r0, =0xE000ED08
ldr r1, =.stack_space
str r1, [r0] // 设置堆栈指针
bl SystemInit // 调用系统初始化
bl entry // 调用主函数
b . // 无限循环
// 异常处理程序
.type NMI_Handler, %function
NMI_Handler:
b .
.type HardFault_Handler, %function
HardFault_Handler:
b .
.type SVC_Handler, %function
SVC_Handler:
b .
.type PendSV_Handler, %function
PendSV_Handler:
b .
.type SysTick_Handler, %function
SysTick_Handler:
b .
.type Default_Handler, %function
Default_Handler:
b .
// 中断处理函数的默认实现
.weak IRQ000_Handler
.thumb_set IRQ000_Handler, Default_Handler
.weak IRQ001_Handler
.thumb_set IRQ001_Handler, Default_Handler
.weak IRQ002_Handler
.thumb_set IRQ002_Handler, Default_Handler
.weak IRQ003_Handler
.thumb_set IRQ003_Handler, Default_Handler
.weak IRQ004_Handler
.thumb_set IRQ004_Handler, Default_Handler
.weak IRQ005_Handler
.thumb_set IRQ005_Handler, Default_Handler
.weak IRQ006_Handler
.thumb_set IRQ006_Handler, Default_Handler
.weak IRQ007_Handler
.thumb_set IRQ007_Handler, Default_Handler
.weak IRQ008_Handler
.thumb_set IRQ008_Handler, Default_Handler
.weak IRQ009_Handler
.thumb_set IRQ009_Handler, Default_Handler
.weak IRQ010_Handler
.thumb_set IRQ010_Handler, Default_Handler
.weak IRQ011_Handler
.thumb_set IRQ011_Handler, Default_Handler
.weak IRQ012_Handler
.thumb_set IRQ012_Handler, Default_Handler
.weak IRQ013_Handler
.thumb_set IRQ013_Handler, Default_Handler
.weak IRQ014_Handler
.thumb_set IRQ014_Handler, Default_Handler
.weak IRQ015_Handler
.thumb_set IRQ015_Handler, Default_Handler
.weak IRQ016_Handler
.thumb_set IRQ016_Handler, Default_Handler
.weak IRQ017_Handler
.thumb_set IRQ017_Handler, Default_Handler
.weak IRQ018_Handler
.thumb_set IRQ018_Handler, Default_Handler
.weak IRQ019_Handler
.thumb_set IRQ019_Handler, Default_Handler
.weak IRQ020_Handler
.thumb_set IRQ020_Handler, Default_Handler
.weak IRQ021_Handler
.thumb_set IRQ021_Handler, Default_Handler
.weak IRQ022_Handler
.thumb_set IRQ022_Handler, Default_Handler
.weak IRQ023_Handler
.thumb_set IRQ023_Handler, Default_Handler
.weak IRQ024_Handler
.thumb_set IRQ024_Handler, Default_Handler
.weak IRQ025_Handler
.thumb_set IRQ025_Handler, Default_Handler
.weak IRQ026_Handler
.thumb_set IRQ026_Handler, Default_Handler
.weak IRQ027_Handler
.thumb_set IRQ027_Handler, Default_Handler
.weak IRQ028_Handler
.thumb_set IRQ028_Handler, Default_Handler
.weak IRQ029_Handler
.thumb_set IRQ029_Handler, Default_Handler
.weak IRQ030_Handler
.thumb_set IRQ030_Handler, Default_Handler
.weak IRQ031_Handler
.thumb_set IRQ031_Handler, Default_Handler
.end
|