| 1 | // ********************************************************************** | 
|---|
| 2 | // *                    SEGGER Microcontroller GmbH                     * | 
|---|
| 3 | // *                        The Embedded Experts                        * | 
|---|
| 4 | // ********************************************************************** | 
|---|
| 5 | // *                                                                    * | 
|---|
| 6 | // *            (c) 2014 - 2020 SEGGER Microcontroller GmbH             * | 
|---|
| 7 | // *            (c) 2001 - 2020 Rowley Associates Limited               * | 
|---|
| 8 | // *                                                                    * | 
|---|
| 9 | // *           www.segger.com     Support: support@segger.com           * | 
|---|
| 10 | // *                                                                    * | 
|---|
| 11 | // ********************************************************************** | 
|---|
| 12 | // *                                                                    * | 
|---|
| 13 | // * All rights reserved.                                               * | 
|---|
| 14 | // *                                                                    * | 
|---|
| 15 | // * Redistribution and use in source and binary forms, with or         * | 
|---|
| 16 | // * without modification, are permitted provided that the following    * | 
|---|
| 17 | // * conditions are met:                                                * | 
|---|
| 18 | // *                                                                    * | 
|---|
| 19 | // * - Redistributions of source code must retain the above copyright   * | 
|---|
| 20 | // *   notice, this list of conditions and the following disclaimer.    * | 
|---|
| 21 | // *                                                                    * | 
|---|
| 22 | // * - Neither the name of SEGGER Microcontroller GmbH                  * | 
|---|
| 23 | // *   nor the names of its contributors may be used to endorse or      * | 
|---|
| 24 | // *   promote products derived from this software without specific     * | 
|---|
| 25 | // *   prior written permission.                                        * | 
|---|
| 26 | // *                                                                    * | 
|---|
| 27 | // * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             * | 
|---|
| 28 | // * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        * | 
|---|
| 29 | // * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           * | 
|---|
| 30 | // * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           * | 
|---|
| 31 | // * DISCLAIMED.                                                        * | 
|---|
| 32 | // * IN NO EVENT SHALL SEGGER Microcontroller GmbH BE LIABLE FOR        * | 
|---|
| 33 | // * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR           * | 
|---|
| 34 | // * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  * | 
|---|
| 35 | // * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;    * | 
|---|
| 36 | // * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF      * | 
|---|
| 37 | // * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT          * | 
|---|
| 38 | // * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  * | 
|---|
| 39 | // * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH   * | 
|---|
| 40 | // * DAMAGE.                                                            * | 
|---|
| 41 | // *                                                                    * | 
|---|
| 42 | // ********************************************************************** | 
|---|
| 43 |  | 
|---|
| 44 | .macro ISR_HANDLER name= | 
|---|
| 45 |   .section .vectors, "ax" | 
|---|
| 46 |   .word \name | 
|---|
| 47 |   .section .init, "ax" | 
|---|
| 48 |   .thumb_func | 
|---|
| 49 |   .weak \name | 
|---|
| 50 | \name: | 
|---|
| 51 | 1: b 1b /* endless loop */ | 
|---|
| 52 | .endm | 
|---|
| 53 |  | 
|---|
| 54 | .macro ISR_RESERVED | 
|---|
| 55 |   .section .vectors, "ax" | 
|---|
| 56 |   .word 0 | 
|---|
| 57 | .endm | 
|---|
| 58 |  | 
|---|
| 59 |   .syntax unified | 
|---|
| 60 |   .global reset_handler | 
|---|
| 61 |   .global Reset_Handler | 
|---|
| 62 |   .equ Reset_Handler, reset_handler | 
|---|
| 63 |  | 
|---|
| 64 |   .section .vectors, "ax" | 
|---|
| 65 |   .code 16 | 
|---|
| 66 |   .balign 2 | 
|---|
| 67 |   .global _vectors | 
|---|
| 68 |  | 
|---|
| 69 | .macro DEFAULT_ISR_HANDLER name= | 
|---|
| 70 |   .thumb_func | 
|---|
| 71 |   .weak \name | 
|---|
| 72 | \name: | 
|---|
| 73 | 1: b 1b /* endless loop */ | 
|---|
| 74 | .endm | 
|---|
| 75 |  | 
|---|
| 76 | _vectors: | 
|---|
| 77 |   .word __stack_end__ | 
|---|
| 78 |   .word reset_handler | 
|---|
| 79 | ISR_HANDLER NMI_Handler | 
|---|
| 80 | ISR_HANDLER HardFault_Handler | 
|---|
| 81 | ISR_HANDLER MemManage_Handler  | 
|---|
| 82 | ISR_HANDLER BusFault_Handler | 
|---|
| 83 | ISR_HANDLER UsageFault_Handler | 
|---|
| 84 | ISR_RESERVED | 
|---|
| 85 | ISR_RESERVED | 
|---|
| 86 | ISR_RESERVED | 
|---|
| 87 | ISR_RESERVED | 
|---|
| 88 | ISR_HANDLER SVC_Handler | 
|---|
| 89 | ISR_HANDLER DebugMon_Handler | 
|---|
| 90 | ISR_RESERVED | 
|---|
| 91 | ISR_HANDLER PendSV_Handler | 
|---|
| 92 | ISR_HANDLER SysTick_Handler | 
|---|
| 93 | #ifdef __VECTORS | 
|---|
| 94 | #include __VECTORS | 
|---|
| 95 | #else   | 
|---|
| 96 | ISR_HANDLER ExternalISR0 | 
|---|
| 97 | ISR_HANDLER ExternalISR1 | 
|---|
| 98 | ISR_HANDLER ExternalISR2 | 
|---|
| 99 | ISR_HANDLER ExternalISR3 | 
|---|
| 100 | ISR_HANDLER ExternalISR4 | 
|---|
| 101 | ISR_HANDLER ExternalISR5 | 
|---|
| 102 | ISR_HANDLER ExternalISR6 | 
|---|
| 103 | ISR_HANDLER ExternalISR7 | 
|---|
| 104 | ISR_HANDLER ExternalISR8 | 
|---|
| 105 | ISR_HANDLER ExternalISR9 | 
|---|
| 106 | ISR_HANDLER ExternalISR10 | 
|---|
| 107 | ISR_HANDLER ExternalISR11 | 
|---|
| 108 | ISR_HANDLER ExternalISR12 | 
|---|
| 109 | ISR_HANDLER ExternalISR13 | 
|---|
| 110 | ISR_HANDLER ExternalISR14 | 
|---|
| 111 | ISR_HANDLER ExternalISR15 | 
|---|
| 112 | ISR_HANDLER ExternalISR16 | 
|---|
| 113 | ISR_HANDLER ExternalISR17 | 
|---|
| 114 | ISR_HANDLER ExternalISR18 | 
|---|
| 115 | ISR_HANDLER ExternalISR19 | 
|---|
| 116 | ISR_HANDLER ExternalISR20 | 
|---|
| 117 | ISR_HANDLER ExternalISR21 | 
|---|
| 118 | ISR_HANDLER ExternalISR22 | 
|---|
| 119 | ISR_HANDLER ExternalISR23 | 
|---|
| 120 | ISR_HANDLER ExternalISR24 | 
|---|
| 121 | ISR_HANDLER ExternalISR25 | 
|---|
| 122 | ISR_HANDLER ExternalISR26 | 
|---|
| 123 | ISR_HANDLER ExternalISR27 | 
|---|
| 124 | ISR_HANDLER ExternalISR28 | 
|---|
| 125 | ISR_HANDLER ExternalISR29 | 
|---|
| 126 | ISR_HANDLER ExternalISR30 | 
|---|
| 127 | ISR_HANDLER ExternalISR31 | 
|---|
| 128 | #endif | 
|---|
| 129 |   .section .vectors, "ax" | 
|---|
| 130 | _vectors_end: | 
|---|
| 131 |  | 
|---|
| 132 |   .section .init, "ax" | 
|---|
| 133 |   .balign 2 | 
|---|
| 134 |  | 
|---|
| 135 |   .thumb_func | 
|---|
| 136 |   reset_handler: | 
|---|
| 137 |  | 
|---|
| 138 | #ifndef __NO_SYSTEM_INIT | 
|---|
| 139 |   ldr r0, =__stack_end__ | 
|---|
| 140 |   mov sp, r0 | 
|---|
| 141 |   bl SystemInit | 
|---|
| 142 | #endif | 
|---|
| 143 |  | 
|---|
| 144 | #if !defined(__SOFTFP__) | 
|---|
| 145 |   // Enable CP11 and CP10 with CPACR |= (0xf<<20) | 
|---|
| 146 |   movw r0, 0xED88 | 
|---|
| 147 |   movt r0, 0xE000 | 
|---|
| 148 |   ldr r1, [r0] | 
|---|
| 149 |   orrs r1, r1, #(0xf << 20) | 
|---|
| 150 |   str r1, [r0] | 
|---|
| 151 | #endif | 
|---|
| 152 |  | 
|---|
| 153 |   b _start | 
|---|
| 154 |  | 
|---|
| 155 | #ifndef __NO_SYSTEM_INIT | 
|---|
| 156 |   .thumb_func | 
|---|
| 157 |   .weak SystemInit | 
|---|
| 158 | SystemInit: | 
|---|
| 159 |   bx lr | 
|---|
| 160 | #endif | 
|---|