summaryrefslogtreecommitdiff
path: root/bsp/maxim/libraries/MAX32660PeriphDriver/CMSIS/Device/Maxim/MAX32660/Source/ARM/startup_max32660.s
blob: 611155a14910ca2cfec62fdad69df08a061f9934 (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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
 ;
 ; Permission is hereby granted, free of charge, to any person obtaining a
 ; copy of this software and associated documentation files (the "Software"),
 ; to deal in the Software without restriction, including without limitation
 ; the rights to use, copy, modify, merge, publish, distribute, sublicense,
 ; and/or sell copies of the Software, and to permit persons to whom the
 ; Software is furnished to do so, subject to the following conditions:
 ;
 ; The above copyright notice and this permission notice shall be included
 ; in all copies or substantial portions of the Software.
 ;
 ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 ; OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 ; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 ; IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
 ; OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 ; ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 ; OTHER DEALINGS IN THE SOFTWARE.
 ;
 ; Except as contained in this notice, the name of Maxim Integrated
 ; Products, Inc. shall not be used except as stated in the Maxim Integrated
 ; Products, Inc. Branding Policy.
 ;
 ; The mere transfer of this software does not imply any licenses
 ; of trade secrets, proprietary technology, copyrights, patents,
 ; trademarks, maskwork rights, or any other form of intellectual
 ; property whatsoever. Maxim Integrated Products, Inc. retains all
 ; ownership rights.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; To map FreeRTOS function names to their CMSIS equivalents add following lines to FreeRTOSConfig.h
; #define vPortSVCHandler SVC_Handler
; #define xPortPendSVHandler PendSV_Handler
; #define xPortSysTickHandler SysTick_Handler
; *------- <<< Use Configuration Wizard in Context Menu to Modify Stack Size and Heap Size. >>> ----

; <h> Stack Configuration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size      EQU     0x00001000

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp    ; Name used with Keil Configuration Wizard and Keil MicroLib

; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000C00

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

                PRESERVE8
                THUMB


; Vector Table Mapped to Address 0 at Reset

                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size
                EXPORT  __isr_vector
                IMPORT  SysTick_Handler

__isr_vector    DCD     __initial_sp              ; Top of Stack
                DCD     Reset_Handler             ; Reset Handler
                DCD     NMI_Handler               ; NMI Handler
                DCD     HardFault_Handler         ; Hard Fault Handler
                DCD     MemManage_Handler         ; MPU Fault Handler
                DCD     BusFault_Handler          ; Bus Fault Handler
                DCD     UsageFault_Handler        ; Usage Fault Handler
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     SVC_Handler               ; SVCall Handler
                DCD     DebugMon_Handler          ; Debug Monitor Handler
                DCD     0                         ; Reserved
                DCD     PendSV_Handler            ; PendSV Handler
                DCD     SysTick_Handler           ; SysTick Handler

                ; Device-specific Interrupts
                DCD     PF_IRQHandler             ; 0x10  0x0040  16: Power Fail
                DCD     WDT0_IRQHandler           ; 0x11  0x0044  17: Watchdog 0
                DCD     RSV00_IRQHandler          ; 0x12  0x0048  18: RSV00
                DCD     RTC_IRQHandler            ; 0x13  0x004C  19: RTC
                DCD     RSV01_IRQHandler          ; 0x14  0x0050  20: RSV1
                DCD     TMR0_IRQHandler           ; 0x15  0x0054  21: Timer 0
                DCD     TMR1_IRQHandler           ; 0x16  0x0058  22: Timer 1
                DCD     TMR2_IRQHandler           ; 0x17  0x005C  23: Timer 2
                DCD     RSV02_IRQHandler          ; 0x18  0x0060  24: RSV02
                DCD     RSV03_IRQHandler          ; 0x19  0x0064  25: RSV03
                DCD     RSV04_IRQHandler          ; 0x1A  0x0068  26: RSV04
                DCD     RSV05_IRQHandler          ; 0x1B  0x006C  27: RSV05
                DCD     RSV06_IRQHandler          ; 0x1C  0x0070  28: RSV06
                DCD     I2C0_IRQHandler           ; 0x1D  0x0074  29: I2C0
                DCD     UART0_IRQHandler          ; 0x1E  0x0078  30: UART 0
                DCD     UART1_IRQHandler          ; 0x1F  0x007C  31: UART 1
                DCD     SPI0_IRQHandler           ; 0x20  0x0080  32: SPIY17
                DCD     SPI1_IRQHandler           ; 0x21  0x0084  33: SPIMSS
                DCD     RSV07_IRQHandler          ; 0x22  0x0088  34: RSV07
                DCD     RSV08_IRQHandler          ; 0x23  0x008C  35: RSV08
                DCD     RSV09_IRQHandler          ; 0x24  0x0090  36: RSV09
                DCD     RSV10_IRQHandler          ; 0x25  0x0094  37: RSV10
                DCD     RSV11_IRQHandler          ; 0x26  0x0098  38: RSV11
                DCD     FLC_IRQHandler            ; 0x27  0x009C  39: FLC
                DCD     GPIO0_IRQHandler          ; 0x28  0x00A0  40: GPIO0
                DCD     RSV12_IRQHandler          ; 0x29  0x00A4  41: RSV12
                DCD     RSV13_IRQHandler          ; 0x2A  0x00A8  42: RSV13
                DCD     RSV14_IRQHandler          ; 0x2B  0x00AC  43: RSV14
                DCD     DMA0_IRQHandler           ; 0x2C  0x00B0  44: DMA0
                DCD     DMA1_IRQHandler           ; 0x2D  0x00B4  45: DMA1
                DCD     DMA2_IRQHandler           ; 0x2E  0x00B8  46: DMA2
                DCD     DMA3_IRQHandler           ; 0x2F  0x00BC  47: DMA3
                DCD     RSV15_IRQHandler          ; 0x30  0x00C0  48: RSV15
                DCD     RSV16_IRQHandler          ; 0x31  0x00C4  49: RSV16
                DCD     RSV17_IRQHandler          ; 0x32  0x00C8  50: RSV17
                DCD     RSV18_IRQHandler          ; 0x33  0x00CC  51: RSV18
                DCD     I2C1_IRQHandler           ; 0x34  0x00D0  52: I2C1
                DCD     RSV19_IRQHandler          ; 0x35  0x00D4  53: RSV19
                DCD     RSV20_IRQHandler          ; 0x36  0x00D8  54: RSV20
                DCD     RSV21_IRQHandler          ; 0x37  0x00DC  55: RSV21
                DCD     RSV22_IRQHandler          ; 0x38  0x00E0  56: RSV22
                DCD     RSV23_IRQHandler          ; 0x39  0x00E4  57: RSV23
                DCD     RSV24_IRQHandler          ; 0x3A  0x00E8  58: RSV24
                DCD     RSV25_IRQHandler          ; 0x3B  0x00EC  59: RSV25
                DCD     RSV26_IRQHandler          ; 0x3C  0x00F0  60: RSV26
                DCD     RSV27_IRQHandler          ; 0x3D  0x00F4  61: RSV27
                DCD     RSV28_IRQHandler          ; 0x3E  0x00F8  62: RSV28
                DCD     RSV29_IRQHandler          ; 0x3F  0x00FC  63: RSV29
                DCD     RSV30_IRQHandler          ; 0x40  0x0100  64: RSV30
                DCD     RSV31_IRQHandler          ; 0x41  0x0104  65: RSV31
                DCD     RSV32_IRQHandler          ; 0x42  0x0108  66: RSV32
                DCD     RSV33_IRQHandler          ; 0x43  0x010C  67: RSV33
                DCD     RSV34_IRQHandler          ; 0x44  0x0110  68: RSV34
                DCD     RSV35_IRQHandler          ; 0x45  0x0114  69: RSV35
                DCD     GPIOWAKE_IRQHandler       ; 0x46  0x0118  70: GPIO Wakeup
__isr_vector_end

__isr_vector_size       EQU  __isr_vector_end - __isr_vector
__Vectors       EQU     __isr_vector
__Vectors_End   EQU     __isr_vector_end
__Vectors_Size  EQU     __isr_vector_size

                AREA    |.text|, CODE, READONLY

Reset_Handler   PROC
                EXPORT Reset_Handler                    [WEAK]
                IMPORT PreInit
                ;IMPORT SystemInit
                IMPORT __main
                LDR     R0, =PreInit            ; Call to PreInit (prior to RAM initialization)
                BLX     R0
                LDR     R0, =__main             ; SystemInit() is called from post scatter memory initialization in function  $Sub$$__main_after_scatterload - system_max32660.c
                BX      R0
__SPIN
                WFI
                BL __SPIN
                ENDP

; Dummy Exception Handlers (infinite loops which can be modified)

NMI_Handler\
                PROC
                EXPORT  NMI_Handler             [WEAK]
                B       .
                ENDP

HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler       [WEAK]
                B       .
                ENDP

MemManage_Handler\
                PROC
                EXPORT  MemManage_Handler       [WEAK]
                B       .
                ENDP

BusFault_Handler\
                PROC
                EXPORT  BusFault_Handler        [WEAK]
                B       .
                ENDP

UsageFault_Handler\
                PROC
                EXPORT  UsageFault_Handler      [WEAK]
                B       .
                ENDP

SVC_Handler\
                PROC
                EXPORT  SVC_Handler             [WEAK]
                B       .
                ENDP

DebugMon_Handler\
                PROC
                EXPORT  DebugMon_Handler        [WEAK]
                B       .
                ENDP

PendSV_Handler\
                PROC
                EXPORT  PendSV_Handler          [WEAK]
                B       .
                ENDP
Default_Handler\
                PROC
                ; MAX32660 Device-specific Interrupts
                EXPORT PF_IRQHandler            [WEAK] ;  0x10  0x0040  16: Power Fail
                EXPORT WDT0_IRQHandler          [WEAK] ;  0x11  0x0044  17: Watchdog 0
                EXPORT RSV00_IRQHandler         [WEAK] ;  0x12  0x0048  18: RSV00
                EXPORT RTC_IRQHandler           [WEAK] ;  0x13  0x004C  19: RTC
                EXPORT RSV01_IRQHandler         [WEAK] ;  0x14  0x0050  20: RSV01
                EXPORT TMR0_IRQHandler          [WEAK] ;  0x15  0x0054  21: Timer 0
                EXPORT TMR1_IRQHandler          [WEAK] ;  0x16  0x0058  22: Timer 1
                EXPORT TMR2_IRQHandler          [WEAK] ;  0x17  0x005C  23: Timer 2
                EXPORT RSV02_IRQHandler         [WEAK] ;  0x18  0x0060  24: RSV02
                EXPORT RSV03_IRQHandler         [WEAK] ;  0x19  0x0064  25: RSV03
                EXPORT RSV04_IRQHandler         [WEAK] ;  0x1A  0x0068  26: RSV04
                EXPORT RSV05_IRQHandler         [WEAK] ;  0x1B  0x006C  27: RSV05
                EXPORT RSV06_IRQHandler         [WEAK] ;  0x1C  0x0070  28: RSV06
                EXPORT I2C0_IRQHandler          [WEAK] ;  0x1D  0x0074  29: I2C0
                EXPORT UART0_IRQHandler         [WEAK] ;  0x1E  0x0078  30: UART 0
                EXPORT UART1_IRQHandler         [WEAK] ;  0x1F  0x007C  31: UART 1
                EXPORT SPI0_IRQHandler          [WEAK] ;  0x20  0x0080  32: SPIY17
                EXPORT SPI1_IRQHandler          [WEAK] ;  0x21  0x0084  33: SPIMSS
                EXPORT RSV07_IRQHandler         [WEAK] ;  0x22  0x0088  34: RSV07
                EXPORT RSV08_IRQHandler         [WEAK] ;  0x23  0x008C  35: RSV08
                EXPORT RSV09_IRQHandler         [WEAK] ;  0x24  0x0090  36: RSV09
                EXPORT RSV10_IRQHandler         [WEAK] ;  0x25  0x0094  37: RSV10
                EXPORT RSV11_IRQHandler         [WEAK] ;  0x26  0x0098  38: RSV11
                EXPORT FLC_IRQHandler           [WEAK] ;  0x27  0x009C  39: FLC
                EXPORT GPIO0_IRQHandler         [WEAK] ;  0x28  0x00A0  40: GPIO0
                EXPORT RSV12_IRQHandler         [WEAK] ;  0x29  0x00A4  41: RSV12
                EXPORT RSV13_IRQHandler         [WEAK] ;  0x2A  0x00A8  42: RSV13
                EXPORT RSV14_IRQHandler         [WEAK] ;  0x2B  0x00AC  43: RSV14
                EXPORT DMA0_IRQHandler          [WEAK] ;  0x2C  0x00B0  44: DMA0
                EXPORT DMA1_IRQHandler          [WEAK] ;  0x2D  0x00B4  45: DMA1
                EXPORT DMA2_IRQHandler          [WEAK] ;  0x2E  0x00B8  46: DMA2
                EXPORT DMA3_IRQHandler          [WEAK] ;  0x2F  0x00BC  47: DMA3
                EXPORT RSV15_IRQHandler         [WEAK] ;  0x30  0x00C0  48: RSV15
                EXPORT RSV16_IRQHandler         [WEAK] ;  0x31  0x00C4  49: RSV16
                EXPORT RSV17_IRQHandler         [WEAK] ;  0x32  0x00C8  50: RSV17
                EXPORT RSV18_IRQHandler         [WEAK] ;  0x33  0x00CC  51: RSV18
                EXPORT I2C1_IRQHandler          [WEAK] ;  0x34  0x00D0  52: I2C1
                EXPORT RSV19_IRQHandler         [WEAK] ;  0x35  0x00D4  53: RSV19
                EXPORT RSV20_IRQHandler         [WEAK] ;  0x36  0x00D8  54: RSV20
                EXPORT RSV21_IRQHandler         [WEAK] ;  0x37  0x00DC  55: RSV21
                EXPORT RSV22_IRQHandler         [WEAK] ;  0x38  0x00E0  56: RSV22
                EXPORT RSV23_IRQHandler         [WEAK] ;  0x39  0x00E4  57: RSV23
                EXPORT RSV24_IRQHandler         [WEAK] ;  0x3A  0x00E8  58: RSV24
                EXPORT RSV25_IRQHandler         [WEAK] ;  0x3B  0x00EC  59: RSV25
                EXPORT RSV26_IRQHandler         [WEAK] ;  0x3C  0x00F0  60: RSV26
                EXPORT RSV27_IRQHandler         [WEAK] ;  0x3D  0x00F4  61: RSV27
                EXPORT RSV28_IRQHandler         [WEAK] ;  0x3E  0x00F8  62: RSV28
                EXPORT RSV29_IRQHandler         [WEAK] ;  0x3F  0x00FC  63: RSV29
                EXPORT RSV30_IRQHandler         [WEAK] ;  0x40  0x0100  64: RSV30
                EXPORT RSV31_IRQHandler         [WEAK] ;  0x41  0x0104  65: RSV31
                EXPORT RSV32_IRQHandler         [WEAK] ;  0x42  0x0108  66: RSV32
                EXPORT RSV33_IRQHandler         [WEAK] ;  0x43  0x010C  67: RSV33
                EXPORT RSV34_IRQHandler         [WEAK] ;  0x44  0x0110  68: RSV34
                EXPORT RSV35_IRQHandler         [WEAK] ;  0x45  0x0114  69: RSV35
                EXPORT GPIOWAKE_IRQHandler      [WEAK] ;  0x46  0x0118  70: GPIO Wakeup

;*******************************************************************************
; Default handler implementations
;*******************************************************************************
PF_IRQHandler                                   ;  0x10  0x0040  16: Power Fail
WDT0_IRQHandler                                 ;  0x11  0x0044  17: Watchdog 0
RSV00_IRQHandler                                ;  0x12  0x0048  18: RSV00
RTC_IRQHandler                                  ;  0x13  0x004C  19: RTC
RSV01_IRQHandler                                ;  0x14  0x0050  20: RSV01
TMR0_IRQHandler                                 ;  0x15  0x0054  21: Timer 0
TMR1_IRQHandler                                 ;  0x16  0x0058  22: Timer 1
TMR2_IRQHandler                                 ;  0x17  0x005C  23: Timer 2
RSV02_IRQHandler                                ;  0x18  0x0060  24: RSV02
RSV03_IRQHandler                                ;  0x19  0x0064  25: RSV03
RSV04_IRQHandler                                ;  0x1A  0x0068  26: RSV04
RSV05_IRQHandler                                ;  0x1B  0x006C  27: RSV05
RSV06_IRQHandler                                ;  0x1C  0x0070  28: RSV06
I2C0_IRQHandler                                 ;  0x1D  0x0074  29: I2C0
UART0_IRQHandler                                ;  0x1E  0x0078  30: UART 0
UART1_IRQHandler                                ;  0x1F  0x007C  31: UART 1
SPI0_IRQHandler                                 ;  0x20  0x0080  32: SPI0
SPI1_IRQHandler                                 ;  0x21  0x0084  33: SPI1
RSV07_IRQHandler                                ;  0x22  0x0088  34: RSV07
RSV08_IRQHandler                                ;  0x23  0x008C  35: RSV08
RSV09_IRQHandler                                ;  0x24  0x0090  36: RSV09
RSV10_IRQHandler                                ;  0x25  0x0094  37: RSV10
RSV11_IRQHandler                                ;  0x26  0x0098  38: RSV11
FLC_IRQHandler                                  ;  0x27  0x009C  39: FLC
GPIO0_IRQHandler                                ;  0x28  0x00A0  40: GPIO0
RSV12_IRQHandler                                ;  0x29  0x00A4  41: RSV12
RSV13_IRQHandler                                ;  0x2A  0x00A8  42: RSV13
RSV14_IRQHandler                                ;  0x2B  0x00AC  43: RSV14
DMA0_IRQHandler                                 ;  0x2C  0x00B0  44: DMA0
DMA1_IRQHandler                                 ;  0x2D  0x00B4  45: DMA1
DMA2_IRQHandler                                 ;  0x2E  0x00B8  46: DMA2
DMA3_IRQHandler                                 ;  0x2F  0x00BC  47: DMA3
RSV15_IRQHandler                                ;  0x30  0x00C0  48: RSV15
RSV16_IRQHandler                                ;  0x31  0x00C4  49: RSV16
RSV17_IRQHandler                                ;  0x32  0x00C8  50: RSV17
RSV18_IRQHandler                                ;  0x33  0x00CC  51: RSV18
I2C1_IRQHandler                                 ;  0x34  0x00D0  52: I2C1
RSV19_IRQHandler                                ;  0x35  0x00D4  53: RSV19
RSV20_IRQHandler                                ;  0x36  0x00D8  54: RSV20
RSV21_IRQHandler                                ;  0x37  0x00DC  55: RSV21
RSV22_IRQHandler                                ;  0x38  0x00E0  56: RSV22
RSV23_IRQHandler                                ;  0x39  0x00E4  57: RSV23
RSV24_IRQHandler                                ;  0x3A  0x00E8  58: RSV24
RSV25_IRQHandler                                ;  0x3B  0x00EC  59: RSV25
RSV26_IRQHandler                                ;  0x3C  0x00F0  60: RSV26
RSV27_IRQHandler                                ;  0x3D  0x00F4  61: RSV27
RSV28_IRQHandler                                ;  0x3E  0x00F8  62: RSV28
RSV29_IRQHandler                                ;  0x3F  0x00FC  63: RSV29
RSV30_IRQHandler                                ;  0x40  0x0100  64: RSV30
RSV31_IRQHandler                                ;  0x41  0x0104  65: RSV31
RSV32_IRQHandler                                ;  0x42  0x0108  66: RSV32
RSV33_IRQHandler                                ;  0x43  0x010C  67: RSV33
RSV34_IRQHandler                                ;  0x44  0x0110  68: RSV34
RSV35_IRQHandler                                ;  0x45  0x0114  69: RSV35
GPIOWAKE_IRQHandler                             ;  0x46  0x0118  70: GPIO Wakeup

                B       .
                ENDP

                ALIGN

;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
                IF      :DEF:__MICROLIB

                EXPORT  __initial_sp
                EXPORT  __heap_base
                EXPORT  __heap_limit

                ELSE

                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap

__user_initial_stackheap\
                PROC

                LDR     R0, =  Heap_Mem
                LDR     R1, = (Stack_Mem + Stack_Size)
                LDR     R2, = (Heap_Mem +  Heap_Size)
                LDR     R3, = Stack_Mem
                BX      LR
                ENDP

                ALIGN

                ENDIF

                END

;;;;;;;;;;;;;;;;;;;;;;;;;
;; End of file.
;;;;;;;;;;;;;;;;;;;;;;;;;