summaryrefslogtreecommitdiff
path: root/bsp/synwit/libraries/SWM320_CSL/CMSIS/DeviceSupport/startup/gcc/startup_SWM320.s
blob: c0bf32e04a159e00f30aebb47b3ce943bc444e50 (plain)
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
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406

  .syntax unified
  .cpu cortex-m4
  .fpu softvfp
  .thumb

.global  g_pfnVectors
.global  Default_Handler

/* start address for the initialization values of the .data section. 
defined in linker script */
.word  _sidata
/* start address for the .data section. defined in linker script */  
.word  _sdata
/* end address for the .data section. defined in linker script */
.word  _edata
/* start address for the .bss section. defined in linker script */
.word  _sbss
/* end address for the .bss section. defined in linker script */
.word  _ebss
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */

/**
 * @brief  This is the code that gets called when the processor first
 *          starts execution following a reset event. Only the absolutely
 *          necessary set is performed, after which the application
 *          supplied main() routine is called. 
 * @param  None
 * @retval : None
*/

    .section  .text.Reset_Handler
  .weak  Reset_Handler
  .type  Reset_Handler, %function
Reset_Handler:  
  ldr   sp, =_estack    		 /* set stack pointer */

/* Copy the data segment initializers from flash to SRAM */  
  movs  r1, #0
  b  LoopCopyDataInit

CopyDataInit:
  ldr  r3, =_sidata
  ldr  r3, [r3, r1]
  str  r3, [r0, r1]
  adds  r1, r1, #4
    
LoopCopyDataInit:
  ldr  r0, =_sdata
  ldr  r3, =_edata
  adds  r2, r0, r1
  cmp  r2, r3
  bcc  CopyDataInit
  ldr  r2, =_sbss
  b  LoopFillZerobss
/* Zero fill the bss segment. */  
FillZerobss:
  movs  r3, #0
  str  r3, [r2], #4
    
LoopFillZerobss:
  ldr  r3, = _ebss
  cmp  r2, r3
  bcc  FillZerobss
/* Call the application's entry point.*/
  bl  entry
  bx  lr    
.size  Reset_Handler, .-Reset_Handler

/**
 * @brief  This is the code that gets called when the processor receives an 
 *         unexpected interrupt.  This simply enters an infinite loop, preserving
 *         the system state for examination by a debugger.
 * @param  None     
 * @retval None       
*/
    .section  .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
    b  Infinite_Loop
    .size  Default_Handler, .-Default_Handler
/******************************************************************************
*
* The minimal vector table for a Cortex M3. Note that the proper constructs
* must be placed on this to ensure that it ends up at physical address
* 0x0000.0000.
* 
*******************************************************************************/
    .section  .isr_vector,"a",%progbits
    .type  g_pfnVectors, %object
    .size  g_pfnVectors, .-g_pfnVectors
    
g_pfnVectors:
    .word  _estack
    .word  Reset_Handler
    .word  NMI_Handler
    .word  HardFault_Handler
    .word  MemManage_Handler
    .word  BusFault_Handler
    .word  UsageFault_Handler
    .word  0
    .word  0
    .word  0
    .word  0
    .word  SVC_Handler
    .word  DebugMon_Handler
    .word  0
    .word  PendSV_Handler
    .word  SysTick_Handler
  
    /* External Interrupts */
    .word     GPIOA0_Handler
    .word     GPIOA1_Handler
    .word     GPIOA2_Handler
    .word     GPIOA3_Handler
    .word     GPIOA4_Handler
    .word     GPIOA5_Handler
    .word     GPIOA6_Handler
    .word     GPIOA7_Handler
    .word     GPIOB0_Handler
    .word     GPIOB1_Handler
    .word     GPIOB2_Handler
    .word     GPIOB3_Handler
    .word     GPIOB4_Handler
    .word     GPIOB5_Handler
    .word     GPIOB6_Handler
    .word     GPIOB7_Handler
    .word     GPIOC0_Handler
    .word     GPIOC1_Handler
    .word     GPIOC2_Handler
    .word     GPIOC3_Handler
    .word     GPIOC4_Handler
    .word     GPIOC5_Handler
    .word     GPIOC6_Handler
    .word     GPIOC7_Handler                                 
    .word     GPIOM0_Handler
    .word     GPIOM1_Handler
    .word     GPIOM2_Handler
    .word     GPIOM3_Handler
    .word     GPIOM4_Handler
    .word     GPIOM5_Handler
    .word     GPIOM6_Handler
    .word     GPIOM7_Handler                                            
    .word     DMA_Handler
    .word     LCD_Handler
    .word     NORFLC_Handler
    .word     CAN_Handler
    .word     PULSE_Handler
    .word     WDT_Handler
    .word     PWM_Handler
    .word     UART0_Handler
    .word     UART1_Handler
    .word     UART2_Handler
    .word     UART3_Handler
    .word     0
    .word     I2C0_Handler
    .word     I2C1_Handler
    .word     SPI0_Handler
    .word     ADC0_Handler
    .word     RTC_Handler
    .word     ANAC_Handler
    .word     SDIO_Handler
    .word     GPIOA_Handler
    .word     GPIOB_Handler
    .word     GPIOC_Handler
    .word     GPIOM_Handler
    .word     GPION_Handler
    .word     GPIOP_Handler
    .word     ADC1_Handler
    .word     FPU_Handler
    .word     SPI1_Handler
    .word     TIMR0_Handler
    .word     TIMR1_Handler
    .word     TIMR2_Handler
    .word     TIMR3_Handler
    .word     TIMR4_Handler
    .word     TIMR5_Handler  
/*******************************************************************************
*
* Provide weak aliases for each Exception handler to the Default_Handler. 
* As they are weak aliases, any function with the same name will override 
* this definition.
* 
*******************************************************************************/
    .weak      NMI_Handler
    .thumb_set NMI_Handler,Default_Handler

    .weak      HardFault_Handler
    .thumb_set HardFault_Handler,Default_Handler

    .weak      MemManage_Handler
    .thumb_set MemManage_Handler,Default_Handler

    .weak      BusFault_Handler
    .thumb_set BusFault_Handler,Default_Handler

    .weak      UsageFault_Handler
    .thumb_set UsageFault_Handler,Default_Handler

    .weak      SVC_Handler
    .thumb_set SVC_Handler,Default_Handler

    .weak      DebugMon_Handler
    .thumb_set DebugMon_Handler,Default_Handler

    .weak      PendSV_Handler
    .thumb_set PendSV_Handler,Default_Handler

    .weak      SysTick_Handler
    .thumb_set SysTick_Handler,Default_Handler              

    .weak      GPIOA0_Handler                   
    .thumb_set GPIOA0_Handler,Default_Handler      

    .weak      GPIOA1_Handler      
    .thumb_set GPIOA1_Handler,Default_Handler

    .weak      GPIOA2_Handler            
    .thumb_set GPIOA2_Handler,Default_Handler

    .weak      GPIOA3_Handler                  
    .thumb_set GPIOA3_Handler,Default_Handler

    .weak      GPIOA4_Handler         
    .thumb_set GPIOA4_Handler,Default_Handler

    .weak      GPIOA5_Handler      
    .thumb_set GPIOA5_Handler,Default_Handler

    .weak      GPIOA6_Handler         
    .thumb_set GPIOA6_Handler,Default_Handler

    .weak      GPIOA7_Handler         
    .thumb_set GPIOA7_Handler,Default_Handler

    .weak      GPIOB0_Handler         
    .thumb_set GPIOB0_Handler,Default_Handler 

    .weak      GPIOB1_Handler         
    .thumb_set GPIOB1_Handler,Default_Handler

    .weak      GPIOB2_Handler         
    .thumb_set GPIOB2_Handler,Default_Handler

    .weak      GPIOB3_Handler               
    .thumb_set GPIOB3_Handler,Default_Handler

    .weak      GPIOB4_Handler               
    .thumb_set GPIOB4_Handler,Default_Handler

    .weak      GPIOB5_Handler               
    .thumb_set GPIOB5_Handler,Default_Handler

    .weak      GPIOB6_Handler               
    .thumb_set GPIOB6_Handler,Default_Handler 

    .weak      GPIOB7_Handler              
    .thumb_set GPIOB7_Handler,Default_Handler

    .weak      GPIOC0_Handler               
    .thumb_set GPIOC0_Handler,Default_Handler

    .weak      GPIOC1_Handler               
    .thumb_set GPIOC1_Handler,Default_Handler

    .weak      GPIOC2_Handler      
    .thumb_set GPIOC2_Handler,Default_Handler

    .weak      GPIOC3_Handler   
    .thumb_set GPIOC3_Handler,Default_Handler

    .weak      GPIOC4_Handler            
    .thumb_set GPIOC4_Handler,Default_Handler

    .weak      GPIOC5_Handler            
    .thumb_set GPIOC5_Handler,Default_Handler

    .weak      GPIOC6_Handler      
    .thumb_set GPIOC6_Handler,Default_Handler

    .weak      GPIOC7_Handler   
    .thumb_set GPIOC7_Handler,Default_Handler

    .weak      GPIOM0_Handler            
    .thumb_set GPIOM0_Handler,Default_Handler

    .weak      GPIOM1_Handler            
    .thumb_set GPIOM1_Handler,Default_Handler

    .weak      GPIOM2_Handler            
    .thumb_set GPIOM2_Handler,Default_Handler

    .weak      GPIOM3_Handler   
    .thumb_set GPIOM3_Handler,Default_Handler

    .weak      GPIOM4_Handler   
    .thumb_set GPIOM4_Handler,Default_Handler

    .weak      GPIOM5_Handler   
    .thumb_set GPIOM5_Handler,Default_Handler

    .weak      GPIOM6_Handler   
    .thumb_set GPIOM6_Handler,Default_Handler
        
    .weak      GPIOM7_Handler            
    .thumb_set GPIOM7_Handler,Default_Handler

    .weak      DMA_Handler            
    .thumb_set DMA_Handler,Default_Handler

    .weak      LCD_Handler      
    .thumb_set LCD_Handler,Default_Handler

    .weak      NORFLC_Handler      
    .thumb_set NORFLC_Handler,Default_Handler
                
    .weak      CAN_Handler               
    .thumb_set CAN_Handler,Default_Handler

    .weak      PULSE_Handler               
    .thumb_set PULSE_Handler,Default_Handler

    .weak      WDT_Handler         
    .thumb_set WDT_Handler,Default_Handler

    .weak      PWM_Handler               
    .thumb_set PWM_Handler,Default_Handler

    .weak      UART0_Handler            
    .thumb_set UART0_Handler,Default_Handler

    .weak      UART1_Handler            
    .thumb_set UART1_Handler,Default_Handler

    .weak      UART2_Handler            
    .thumb_set UART2_Handler,Default_Handler

    .weak      UART3_Handler               
    .thumb_set UART3_Handler,Default_Handler

    .weak      I2C0_Handler               
    .thumb_set I2C0_Handler,Default_Handler

    .weak      I2C1_Handler               
    .thumb_set I2C1_Handler,Default_Handler

    .weak      SPI0_Handler               
    .thumb_set SPI0_Handler,Default_Handler

    .weak      ADC0_Handler               
    .thumb_set ADC0_Handler,Default_Handler

    .weak      RTC_Handler      
    .thumb_set RTC_Handler,Default_Handler

    .weak      ANAC_Handler               
    .thumb_set ANAC_Handler,Default_Handler

    .weak      SDIO_Handler               
    .thumb_set SDIO_Handler,Default_Handler

    .weak      GPIOA_Handler               
    .thumb_set GPIOA_Handler,Default_Handler

    .weak      GPIOB_Handler      
    .thumb_set GPIOB_Handler,Default_Handler

    .weak      GPIOC_Handler   
    .thumb_set GPIOC_Handler,Default_Handler

    .weak      GPIOM_Handler   
    .thumb_set GPIOM_Handler,Default_Handler

    .weak      GPION_Handler                  
    .thumb_set GPION_Handler,Default_Handler  

    .weak      GPIOP_Handler                  
    .thumb_set GPIOP_Handler,Default_Handler 

    .weak      ADC1_Handler                  
    .thumb_set ADC1_Handler,Default_Handler 

    .weak      FPU_Handler                  
    .thumb_set FPU_Handler,Default_Handler 

    .weak      SPI1_Handler                  
    .thumb_set SPI1_Handler,Default_Handler 

    .weak      TIMR0_Handler                  
    .thumb_set TIMR0_Handler,Default_Handler 

    .weak      TIMR1_Handler                  
    .thumb_set TIMR1_Handler,Default_Handler 

    .weak      TIMR2_Handler                  
    .thumb_set TIMR2_Handler,Default_Handler 

    .weak      TIMR3_Handler                  
    .thumb_set TIMR3_Handler,Default_Handler 

    .weak      TIMR4_Handler                  
    .thumb_set TIMR4_Handler,Default_Handler 

    .weak      TIMR5_Handler                  
    .thumb_set TIMR5_Handler,Default_Handler