]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Maxim/TARGET_MAX32610/TOOLCHAIN_GCC_ARM/startup_max32610.S
Merge commit '1fe4406f374291ab2e86e95a97341fd9c475fcb8'
[qmk_firmware.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_Maxim / TARGET_MAX32610 / TOOLCHAIN_GCC_ARM / startup_max32610.S
diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Maxim/TARGET_MAX32610/TOOLCHAIN_GCC_ARM/startup_max32610.S b/tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Maxim/TARGET_MAX32610/TOOLCHAIN_GCC_ARM/startup_max32610.S
new file mode 100644 (file)
index 0000000..cda4da9
--- /dev/null
@@ -0,0 +1,262 @@
+/*******************************************************************************
+ * Copyright (C) 2015 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.
+ *******************************************************************************
+ */
+
+    .syntax unified
+    .arch armv7-m
+
+/* Memory Model
+   The HEAP starts at the end of the DATA section and grows upward.
+   
+   The STACK starts at the end of the RAM and grows downward.
+   
+   The HEAP and stack STACK are only checked at compile time:
+   (DATA_SIZE + HEAP_SIZE + STACK_SIZE) < RAM_SIZE
+   
+   This is just a check for the bare minimum for the Heap+Stack area before
+   aborting compilation, it is not the run time limit:
+   Heap_Size + Stack_Size = 0x80 + 0x80 = 0x100
+ */
+    .section .stack
+    .align 3
+#ifdef __STACK_SIZE
+    .equ    Stack_Size, __STACK_SIZE
+#else
+    .equ    Stack_Size, 0x00001000
+#endif
+    .globl    __StackTop
+    .globl    __StackLimit
+__StackLimit:
+    .space    Stack_Size
+    .size __StackLimit, . - __StackLimit
+__StackTop:
+    .size __StackTop, . - __StackTop
+
+    .section .heap
+    .align 3
+#ifdef __HEAP_SIZE
+    .equ    Heap_Size, __HEAP_SIZE
+#else
+    .equ    Heap_Size, 0x00000C00
+#endif
+    .globl    __HeapBase
+    .globl    __HeapLimit
+__HeapBase:
+    .space    Heap_Size
+    .size __HeapBase, . - __HeapBase
+__HeapLimit:
+    .size __HeapLimit, . - __HeapLimit
+
+    .section .isr_vector
+    .align 2
+    .globl __isr_vector
+__isr_vector:
+    .long    __StackTop            /* Top of Stack */
+    .long    Reset_Handler         /* Reset Handler */
+    .long    NMI_Handler           /* NMI Handler */
+    .long    HardFault_Handler     /* Hard Fault Handler */
+    .long    MemManage_Handler     /* MPU Fault Handler */
+    .long    BusFault_Handler      /* Bus Fault Handler */
+    .long    UsageFault_Handler    /* Usage Fault Handler */
+    .long    0                     /* Reserved */
+    .long    0                     /* Reserved */
+    .long    0                     /* Reserved */
+    .long    0                     /* Reserved */
+    .long    SVC_Handler           /* SVCall Handler */
+    .long    DebugMon_Handler      /* Debug Monitor Handler */
+    .long    0                     /* Reserved */
+    .long    PendSV_Handler        /* PendSV Handler */
+    .long    SysTick_Handler       /* SysTick Handler */
+
+    /* Externals interrupts */
+    .long UART0_IRQHandler          /* 16: 1 UART0 */
+    .long UART1_IRQHandler          /* 17: 2 UART1 */
+    .long I2CM0_IRQHandler          /* 18: 3 I2C Master 0 */
+    .long I2CS_IRQHandler           /* 19: 4 I2C Slave */
+    .long USB_IRQHandler            /* 20: 5 USB */
+    .long PMU_IRQHandler            /* 21: 6 DMA */
+    .long AFE_IRQHandler            /* 22: 7 AFE */
+    .long MAA_IRQHandler            /* 23: 8 MAA */
+    .long AES_IRQHandler            /* 24: 9 AES */
+    .long SPI0_IRQHandler           /* 25:10 SPI0 */
+    .long SPI1_IRQHandler           /* 26:11 SPI1 */
+    .long SPI2_IRQHandler           /* 27:12 SPI2 */
+    .long TMR0_IRQHandler           /* 28:13 Timer32-0 */
+    .long TMR1_IRQHandler           /* 29:14 Timer32-1 */
+    .long TMR2_IRQHandler           /* 30:15 Timer32-1 */
+    .long TMR3_IRQHandler           /* 31:16 Timer32-2 */
+    .long RSVD0_IRQHandler          /* 32:17 RSVD */
+    .long RSVD1_IRQHandler          /* 33:18 RSVD */
+    .long DAC0_IRQHandler           /* 34:19 DAC0  (12-bit DAC) */  
+    .long DAC1_IRQHandler           /* 35:20 DAC1  (12-bit DAC) */  
+    .long DAC2_IRQHandler           /* 36:21 DAC2  (8-bit DAC) */
+    .long DAC3_IRQHandler           /* 37:22 DAC3  (8-bit DAC) */
+    .long ADC_IRQHandler            /* 38:23 ADC */
+    .long FLC_IRQHandler            /* 39:24 Flash Controller */
+    .long PWRMAN_IRQHandler         /* 40:25 PWRMAN */
+    .long CLKMAN_IRQHandler         /* 41:26 CLKMAN */
+    .long RTC0_IRQHandler           /* 42:27 RTC INT0 */
+    .long RTC1_IRQHandler           /* 43:28 RTC INT1 */
+    .long RTC2_IRQHandler           /* 44:29 RTC INT2 */
+    .long RTC3_IRQHandler           /* 45:30 RTC INT3 */
+    .long WDT0_IRQHandler           /* 46:31 WATCHDOG0 */
+    .long WDT0_P_IRQHandler         /* 47:32 WATCHDOG0 PRE-WINDOW */
+    .long WDT1_IRQHandler           /* 48:33 WATCHDOG1 */
+    .long WDT1_P_IRQHandler         /* 49:34 WATCHDOG1 PRE-WINDOW */
+    .long GPIO_P0_IRQHandler        /* 50:35 GPIO Port 0  */
+    .long GPIO_P1_IRQHandler        /* 51:36 GPIO Port 1  */
+    .long GPIO_P2_IRQHandler        /* 52:37 GPIO Port 2  */
+    .long GPIO_P3_IRQHandler        /* 53:38 GPIO Port 3  */
+    .long GPIO_P4_IRQHandler        /* 54:39 GPIO Port 4  */
+    .long GPIO_P5_IRQHandler        /* 55:40 GPIO Port 5  */
+    .long GPIO_P6_IRQHandler        /* 56:41 GPIO Port 6  */
+    .long GPIO_P7_IRQHandler        /* 57:42 GPIO Port 7  */
+    .long TMR16_0_IRQHandler        /* 58:43 Timer16-s0 */
+    .long TMR16_1_IRQHandler        /* 59:44 Timer16-s1 */
+    .long TMR16_2_IRQHandler        /* 60:45 Timer16-s2 */
+    .long TMR16_3_IRQHandler        /* 61:46 Timer16-s3 */
+    .long I2CM1_IRQHandler          /* 62:47 I2C Master 1 */
+
+       
+    .text      
+    .thumb
+    .thumb_func
+    .align 2
+    .globl   Reset_Handler
+    .type    Reset_Handler, %function
+Reset_Handler:
+/*     Loop to copy data from read only memory to RAM. The ranges
+ *      of copy from/to are specified by following symbols evaluated in
+ *      linker script.
+ *      __etext: End of code section, i.e., begin of data sections to copy from.
+ *      __data_start__/__data_end__: RAM address range that data should be
+ *      copied to. Both must be aligned to 4 bytes boundary.  */
+
+    ldr    r1, =__etext
+    ldr    r2, =__data_start__
+    ldr    r3, =__data_end__
+
+.Lflash_to_ram_loop:
+    cmp     r2, r3
+    ittt    lt
+    ldrlt   r0, [r1], #4
+    strlt   r0, [r2], #4
+    blt    .Lflash_to_ram_loop
+
+.Lflash_to_ram_loop_end:
+
+    ldr    r0, =SystemInit
+    blx    r0
+    ldr    r0, =_start
+    bx     r0
+    .pool
+    .size Reset_Handler, . - Reset_Handler
+    
+    .text
+/*    Macro to define default handlers. Default handler
+ *    will be weak symbol and just dead loops. They can be
+ *    overwritten by other handlers */
+    .macro    def_default_handler    handler_name
+    .align 1
+    .thumb_func
+    .weak    \handler_name
+    .type    \handler_name, %function
+\handler_name :
+    b    .
+    .size    \handler_name, . - \handler_name
+    .endm
+
+    def_default_handler    NMI_Handler
+    def_default_handler    HardFault_Handler
+    def_default_handler    MemManage_Handler
+    def_default_handler    BusFault_Handler
+    def_default_handler    UsageFault_Handler
+    def_default_handler    SVC_Handler
+    def_default_handler    DebugMon_Handler
+    def_default_handler    PendSV_Handler
+    def_default_handler    SysTick_Handler
+    def_default_handler    Default_Handler
+
+    .macro    def_irq_default_handler    handler_name
+    .weak     \handler_name
+    .set      \handler_name, Default_Handler
+    .endm
+    def_irq_default_handler UART0_IRQHandler          /* 16: 1 UART0 */
+    def_irq_default_handler UART1_IRQHandler          /* 17: 2 UART1 */
+    def_irq_default_handler I2CM0_IRQHandler          /* 18: 3 I2C Master 0 */
+    def_irq_default_handler I2CS_IRQHandler           /* 19: 4 I2C Slave */
+    def_irq_default_handler USB_IRQHandler            /* 20: 5 USB */
+    def_irq_default_handler PMU_IRQHandler            /* 21: 6 DMA */
+    def_irq_default_handler AFE_IRQHandler            /* 22: 7 AFE */
+    def_irq_default_handler MAA_IRQHandler            /* 23: 8 MAA */
+    def_irq_default_handler AES_IRQHandler            /* 24: 9 AES */
+    def_irq_default_handler SPI0_IRQHandler           /* 25:10 SPI0 */
+    def_irq_default_handler SPI1_IRQHandler           /* 26:11 SPI1 */
+    def_irq_default_handler SPI2_IRQHandler           /* 27:12 SPI2 */
+    def_irq_default_handler TMR0_IRQHandler           /* 28:13 Timer32-0 */
+    def_irq_default_handler TMR1_IRQHandler           /* 29:14 Timer32-1 */
+    def_irq_default_handler TMR2_IRQHandler           /* 30:15 Timer32-1 */
+    def_irq_default_handler TMR3_IRQHandler           /* 31:16 Timer32-2 */
+    def_irq_default_handler RSVD0_IRQHandler          /* 32:17 RSVD */
+    def_irq_default_handler RSVD1_IRQHandler          /* 33:18 RSVD */
+    def_irq_default_handler DAC0_IRQHandler           /* 34:19 DAC0  (12-bit DAC) */  
+    def_irq_default_handler DAC1_IRQHandler           /* 35:20 DAC1  (12-bit DAC) */  
+    def_irq_default_handler DAC2_IRQHandler           /* 36:21 DAC2  (8-bit DAC) */
+    def_irq_default_handler DAC3_IRQHandler           /* 37:22 DAC3  (8-bit DAC) */
+    def_irq_default_handler ADC_IRQHandler            /* 38:23 ADC */
+    def_irq_default_handler FLC_IRQHandler            /* 39:24 Flash Controller */
+    def_irq_default_handler PWRMAN_IRQHandler         /* 40:25 PWRMAN */
+    def_irq_default_handler CLKMAN_IRQHandler         /* 41:26 CLKMAN */
+    def_irq_default_handler RTC0_IRQHandler           /* 42:27 RTC INT0 */
+    def_irq_default_handler RTC1_IRQHandler           /* 43:28 RTC INT1 */
+    def_irq_default_handler RTC2_IRQHandler           /* 44:29 RTC INT2 */
+    def_irq_default_handler RTC3_IRQHandler           /* 45:30 RTC INT3 */
+    def_irq_default_handler WDT0_IRQHandler           /* 46:31 WATCHDOG0 */
+    def_irq_default_handler WDT0_P_IRQHandler         /* 47:32 WATCHDOG0 PRE-WINDOW */
+    def_irq_default_handler WDT1_IRQHandler           /* 48:33 WATCHDOG1 */
+    def_irq_default_handler WDT1_P_IRQHandler         /* 49:34 WATCHDOG1 PRE-WINDOW */
+    def_irq_default_handler GPIO_P0_IRQHandler        /* 50:35 GPIO Port 0  */
+    def_irq_default_handler GPIO_P1_IRQHandler        /* 51:36 GPIO Port 1  */
+    def_irq_default_handler GPIO_P2_IRQHandler        /* 52:37 GPIO Port 2  */
+    def_irq_default_handler GPIO_P3_IRQHandler        /* 53:38 GPIO Port 3  */
+    def_irq_default_handler GPIO_P4_IRQHandler        /* 54:39 GPIO Port 4  */
+    def_irq_default_handler GPIO_P5_IRQHandler        /* 55:40 GPIO Port 5  */
+    def_irq_default_handler GPIO_P6_IRQHandler        /* 56:41 GPIO Port 6  */
+    def_irq_default_handler GPIO_P7_IRQHandler        /* 57:42 GPIO Port 7  */
+    def_irq_default_handler TMR16_0_IRQHandler        /* 58:43 Timer16-s0 */
+    def_irq_default_handler TMR16_1_IRQHandler        /* 59:44 Timer16-s1 */
+    def_irq_default_handler TMR16_2_IRQHandler        /* 60:45 Timer16-s2 */
+    def_irq_default_handler TMR16_3_IRQHandler        /* 61:46 Timer16-s3 */
+    def_irq_default_handler I2CM1_IRQHandler          /* 62:47 I2C Master 1 */
+
+    .end