Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 2 | mjames | 1 | ;/* File: startup_armv6-m.s |
| 2 | ; * Purpose: startup file for armv7-m architecture devices. |
||
| 3 | ; * Should be used with ARMCC |
||
| 4 | ; * Version: V2.00 |
||
| 5 | ; * Date: 16 November 2015 |
||
| 6 | ; * |
||
| 7 | ; */ |
||
| 8 | ;/* Copyright (c) 2011 - 2014 ARM LIMITED |
||
| 9 | ; |
||
| 10 | ; All rights reserved. |
||
| 11 | ; Redistribution and use in source and binary forms, with or without |
||
| 12 | ; modification, are permitted provided that the following conditions are met: |
||
| 13 | ; - Redistributions of source code must retain the above copyright |
||
| 14 | ; notice, this list of conditions and the following disclaimer. |
||
| 15 | ; - Redistributions in binary form must reproduce the above copyright |
||
| 16 | ; notice, this list of conditions and the following disclaimer in the |
||
| 17 | ; documentation and/or other materials provided with the distribution. |
||
| 18 | ; - Neither the name of ARM nor the names of its contributors may be used |
||
| 19 | ; to endorse or promote products derived from this software without |
||
| 20 | ; specific prior written permission. |
||
| 21 | ; * |
||
| 22 | ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||
| 23 | ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||
| 24 | ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||
| 25 | ; ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE |
||
| 26 | ; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
||
| 27 | ; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||
| 28 | ; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||
| 29 | ; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||
| 30 | ; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||
| 31 | ; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||
| 32 | ; POSSIBILITY OF SUCH DAMAGE. |
||
| 33 | ; ---------------------------------------------------------------------------*/ |
||
| 34 | ;/* |
||
| 35 | ; //-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ |
||
| 36 | ;*/ |
||
| 37 | |||
| 38 | |||
| 39 | ; <h> Stack Configuration |
||
| 40 | ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> |
||
| 41 | ; </h> |
||
| 42 | |||
| 43 | Stack_Size EQU 0x00000400 |
||
| 44 | |||
| 45 | AREA STACK, NOINIT, READWRITE, ALIGN=3 |
||
| 46 | Stack_Mem SPACE Stack_Size |
||
| 47 | __initial_sp |
||
| 48 | |||
| 49 | |||
| 50 | ; <h> Heap Configuration |
||
| 51 | ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> |
||
| 52 | ; </h> |
||
| 53 | |||
| 54 | Heap_Size EQU 0x00000C00 |
||
| 55 | |||
| 56 | AREA HEAP, NOINIT, READWRITE, ALIGN=3 |
||
| 57 | __heap_base |
||
| 58 | Heap_Mem SPACE Heap_Size |
||
| 59 | __heap_limit |
||
| 60 | |||
| 61 | |||
| 62 | PRESERVE8 |
||
| 63 | THUMB |
||
| 64 | |||
| 65 | |||
| 66 | ; Vector Table Mapped to Address 0 at Reset |
||
| 67 | |||
| 68 | AREA RESET, DATA, READONLY |
||
| 69 | EXPORT __Vectors |
||
| 70 | EXPORT __Vectors_End |
||
| 71 | EXPORT __Vectors_Size |
||
| 72 | |||
| 73 | __Vectors DCD __initial_sp ; Top of Stack |
||
| 74 | DCD Reset_Handler ; Reset Handler |
||
| 75 | DCD NMI_Handler ; NMI Handler |
||
| 76 | DCD HardFault_Handler ; Hard Fault Handler |
||
| 77 | DCD 0 ; Reserved |
||
| 78 | DCD 0 ; Reserved |
||
| 79 | DCD 0 ; Reserved |
||
| 80 | DCD 0 ; Reserved |
||
| 81 | DCD 0 ; Reserved |
||
| 82 | DCD 0 ; Reserved |
||
| 83 | DCD 0 ; Reserved |
||
| 84 | DCD SVC_Handler ; SVCall Handler |
||
| 85 | DCD 0 ; Reserved |
||
| 86 | DCD 0 ; Reserved |
||
| 87 | DCD PendSV_Handler ; PendSV Handler |
||
| 88 | DCD SysTick_Handler ; SysTick Handler |
||
| 89 | __Vectors_End |
||
| 90 | |||
| 91 | __Vectors_Size EQU __Vectors_End - __Vectors |
||
| 92 | |||
| 93 | AREA |.text|, CODE, READONLY |
||
| 94 | |||
| 95 | |||
| 96 | ; Reset Handler |
||
| 97 | |||
| 98 | Reset_Handler PROC |
||
| 99 | EXPORT Reset_Handler [WEAK] |
||
| 100 | IMPORT SystemInit |
||
| 101 | IMPORT __main |
||
| 102 | LDR R0, =SystemInit |
||
| 103 | BLX R0 |
||
| 104 | LDR R0, =__main |
||
| 105 | BX R0 |
||
| 106 | ENDP |
||
| 107 | |||
| 108 | |||
| 109 | ; Dummy Exception Handlers (infinite loops which can be modified) |
||
| 110 | |||
| 111 | NMI_Handler PROC |
||
| 112 | EXPORT NMI_Handler [WEAK] |
||
| 113 | BKPT #0 |
||
| 114 | B . |
||
| 115 | ENDP |
||
| 116 | HardFault_Handler\ |
||
| 117 | PROC |
||
| 118 | EXPORT HardFault_Handler [WEAK] |
||
| 119 | BKPT #0 |
||
| 120 | B . |
||
| 121 | ENDP |
||
| 122 | SVC_Handler PROC |
||
| 123 | EXPORT SVC_Handler [WEAK] |
||
| 124 | B . |
||
| 125 | ENDP |
||
| 126 | PendSV_Handler PROC |
||
| 127 | EXPORT PendSV_Handler [WEAK] |
||
| 128 | B . |
||
| 129 | ENDP |
||
| 130 | SysTick_Handler PROC |
||
| 131 | EXPORT SysTick_Handler [WEAK] |
||
| 132 | B . |
||
| 133 | ENDP |
||
| 134 | |||
| 135 | ALIGN |
||
| 136 | |||
| 137 | ; User Initial Stack & Heap |
||
| 138 | IF :DEF:__MICROLIB |
||
| 139 | |||
| 140 | EXPORT __initial_sp |
||
| 141 | EXPORT __heap_base |
||
| 142 | EXPORT __heap_limit |
||
| 143 | |||
| 144 | ELSE |
||
| 145 | |||
| 146 | IMPORT __use_two_region_memory |
||
| 147 | |||
| 148 | ;/* |
||
| 149 | ; __user_setup_stackheap() returns the: |
||
| 150 | ; - heap base in r0 (if the program uses the heap) |
||
| 151 | ; - stack base in sp |
||
| 152 | ; - heap limit in r2 (if the program uses the heap and uses two-region memory). |
||
| 153 | ; */ |
||
| 154 | EXPORT __user_setup_stackheap |
||
| 155 | |||
| 156 | __user_setup_stackheap PROC |
||
| 157 | LDR R0, = __initial_sp |
||
| 158 | MOV SP, R0 |
||
| 159 | IF Heap_Size > 0 |
||
| 160 | LDR R2, = __heap_limit |
||
| 161 | LDR R0, = __heap_base |
||
| 162 | ELSE |
||
| 163 | MOV R0, #0 |
||
| 164 | MOV R2, #0 |
||
| 165 | ENDIF |
||
| 166 | BX LR |
||
| 167 | ENDP |
||
| 168 | |||
| 169 | |||
| 170 | ;/* |
||
| 171 | ;__user_initial_stackheap() returns the: |
||
| 172 | ; - heap base in r0 |
||
| 173 | ; - stack base in r1, that is, the highest address in the stack region |
||
| 174 | ; - heap limit in r2 |
||
| 175 | ; - stack limit in r3, that is, the lowest address in the stack region. |
||
| 176 | ; */ |
||
| 177 | ; |
||
| 178 | ;/* DEPRICATED |
||
| 179 | ; EXPORT __user_initial_stackheap |
||
| 180 | ; |
||
| 181 | ;__user_initial_stackheap PROC |
||
| 182 | ; LDR R0, = Heap_Mem |
||
| 183 | ; LDR R1, =(Stack_Mem + Stack_Size) |
||
| 184 | ; LDR R2, = (Heap_Mem + Heap_Size) |
||
| 185 | ; LDR R3, = Stack_Mem |
||
| 186 | ; BX LR |
||
| 187 | ; ENDP |
||
| 188 | ; */ |
||
| 189 | |||
| 190 | ALIGN |
||
| 191 | |||
| 192 | ENDIF |
||
| 193 | |||
| 194 | |||
| 195 | END |