Kyle Hu
3 years ago
committed by
Scott Lahteine
3 changed files with 125 additions and 1 deletions
@ -0,0 +1,124 @@ |
|||
/** |
|||
****************************************************************************** |
|||
* @file startup_stm32f401xc.s |
|||
* @author MCD Application Team |
|||
* @version V2.4.2 |
|||
* @date 13-November-2015 |
|||
* @brief STM32F401xCxx Devices vector table for GCC based toolchains. |
|||
* This module performs: |
|||
* - Set the initial SP |
|||
* - Set the initial PC == Reset_Handler, |
|||
* - Set the vector table entries with the exceptions ISR address |
|||
* - Branches to main in the C library (which eventually |
|||
* calls main()). |
|||
* After Reset the Cortex-M4 processor is in Thread mode, |
|||
* priority is Privileged, and the Stack is set to Main. |
|||
****************************************************************************** |
|||
* @attention |
|||
* |
|||
* <h2><center>© COPYRIGHT 2015 STMicroelectronics</center></h2> |
|||
* |
|||
* Redistribution and use in source and binary forms, with or without modification, |
|||
* are permitted provided that the following conditions are met: |
|||
* 1. Redistributions of source code must retain the above copyright notice, |
|||
* this list of conditions and the following disclaimer. |
|||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
|||
* this list of conditions and the following disclaimer in the documentation |
|||
* and/or other materials provided with the distribution. |
|||
* 3. Neither the name of STMicroelectronics nor the names of its contributors |
|||
* may be used to endorse or promote products derived from this software |
|||
* without specific prior written permission. |
|||
* |
|||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
|||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
|||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
|||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
|||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|||
* |
|||
****************************************************************************** |
|||
*/ |
|||
|
|||
.syntax unified |
|||
.cpu cortex-m4 |
|||
.fpu softvfp |
|||
.thumb |
|||
|
|||
/** |
|||
* @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 |
|||
.globl Reset_Handler |
|||
.type Reset_Handler, %function |
|||
Reset_Handler: |
|||
/* Check for magic code at the end of SRAM to detemine whether to jump to DFU */ |
|||
ldr r0, =0x2000FFF0 // End of SRAM for your CPU |
|||
ldr r1, =0xDEADBEEF |
|||
ldr r2, [r0, #0] |
|||
str r0, [r0, #0] // Invalidate |
|||
cmp r2, r1 |
|||
beq Jump_To_DFU |
|||
|
|||
/* Original Reset_Handler code */ |
|||
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 clock system intitialization function.*/ |
|||
bl SystemInit |
|||
/* Call static constructors */ |
|||
bl __libc_init_array |
|||
/* Call the application's entry point.*/ |
|||
bl main |
|||
bx lr |
|||
|
|||
Jump_To_DFU: |
|||
ldr r0, =0x40023844 // RCC_APB2ENR |
|||
ldr r1, =0x00004000 // ENABLE SYSCFG CLOCK |
|||
str r1, [r0, #0] |
|||
ldr r0, =0x40013800 // SYSCFG_MEMRMP |
|||
ldr r1, =0x00000001 // MAP ROM AT ZERO |
|||
str r1, [r0, #0] |
|||
ldr r0, =0x1FFF0000 // ROM BASE |
|||
ldr sp, [r0, #0] // SP @ +0 |
|||
ldr r0, [r0, #4] // PC @ +4 |
|||
bx r0 |
|||
.size Reset_Handler, .-Reset_Handler |
|||
|
|||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
Loading…
Reference in new issue