Add busio support, cleanup
This commit is contained in:
parent
9761672d42
commit
92a0621e59
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
@ -189,6 +189,7 @@ jobs:
|
|||||||
- "mini_sam_m4"
|
- "mini_sam_m4"
|
||||||
- "monster_m4sk"
|
- "monster_m4sk"
|
||||||
- "ndgarage_ndbit6"
|
- "ndgarage_ndbit6"
|
||||||
|
- "nucleo_f767zi"
|
||||||
- "nucleo_h743zi_2"
|
- "nucleo_h743zi_2"
|
||||||
- "ohs2020_badge"
|
- "ohs2020_badge"
|
||||||
- "openbook_m4"
|
- "openbook_m4"
|
||||||
|
@ -193,7 +193,13 @@ SRC_STM32 = $(addprefix $(HAL_DIR)/Src/stm32$(MCU_SERIES_LOWER)xx_,\
|
|||||||
ll_exti.c \
|
ll_exti.c \
|
||||||
)
|
)
|
||||||
|
|
||||||
SRC_STM32 += system_stm32$(MCU_SERIES_LOWER)xx.c
|
# Need this to avoid UART linker problems. TODO: rewrite to use registered callbacks.
|
||||||
|
# Does not exist for F4 and lower
|
||||||
|
ifeq ($(MCU_VARIANT),$(filter $(MCU_VARIANT),STM32F765xx STM32F767xx STM32F769xx STM32H743xx))
|
||||||
|
SRC_STM32 += $(HAL_DIR)/Src/stm32$(MCU_SERIES_LOWER)xx_hal_uart_ex.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
SRC_STM32 += boards/system_stm32$(MCU_SERIES_LOWER)xx.c
|
||||||
|
|
||||||
SRC_C += \
|
SRC_C += \
|
||||||
background.c \
|
background.c \
|
||||||
|
@ -1,193 +0,0 @@
|
|||||||
/*
|
|
||||||
******************************************************************************
|
|
||||||
**
|
|
||||||
|
|
||||||
** File : LinkerScript.ld
|
|
||||||
**
|
|
||||||
** Author : Auto-generated by System Workbench for STM32
|
|
||||||
**
|
|
||||||
** Abstract : Linker script for STM32H743ZITx series
|
|
||||||
** 2048Kbytes FLASH and 1056Kbytes RAM
|
|
||||||
**
|
|
||||||
** Set heap size, stack size and stack location according
|
|
||||||
** to application requirements.
|
|
||||||
**
|
|
||||||
** Set memory bank area and size if external memory is used.
|
|
||||||
**
|
|
||||||
** Target : STMicroelectronics STM32
|
|
||||||
**
|
|
||||||
** Distribution: The file is distributed “as is,” without any warranty
|
|
||||||
** of any kind.
|
|
||||||
**
|
|
||||||
*****************************************************************************
|
|
||||||
** @attention
|
|
||||||
**
|
|
||||||
** <h2><center>© COPYRIGHT(c) 2019 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.
|
|
||||||
**
|
|
||||||
*****************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Entry Point */
|
|
||||||
ENTRY(Reset_Handler)
|
|
||||||
|
|
||||||
/* Highest address of the user mode stack */
|
|
||||||
_estack = 0x20020000; /* end of RAM */
|
|
||||||
/* Generate a link error if heap and stack don't fit into RAM */
|
|
||||||
_Min_Heap_Size = 0x200; /* required amount of heap */
|
|
||||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
|
||||||
|
|
||||||
/* Specify the memory areas */
|
|
||||||
MEMORY
|
|
||||||
{
|
|
||||||
DTCMRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
|
|
||||||
RAM_D1 (xrw) : ORIGIN = 0x24000000, LENGTH = 512K
|
|
||||||
RAM_D2 (xrw) : ORIGIN = 0x30000000, LENGTH = 288K
|
|
||||||
RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K
|
|
||||||
ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K
|
|
||||||
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 2048K
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Define output sections */
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
/* The startup code goes first into FLASH */
|
|
||||||
.isr_vector :
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
KEEP(*(.isr_vector)) /* Startup code */
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* The program code and other data goes into FLASH */
|
|
||||||
.text :
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
*(.text) /* .text sections (code) */
|
|
||||||
*(.text*) /* .text* sections (code) */
|
|
||||||
*(.glue_7) /* glue arm to thumb code */
|
|
||||||
*(.glue_7t) /* glue thumb to arm code */
|
|
||||||
*(.eh_frame)
|
|
||||||
|
|
||||||
KEEP (*(.init))
|
|
||||||
KEEP (*(.fini))
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
|
||||||
_etext = .; /* define a global symbols at end of code */
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* Constant data goes into FLASH */
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
|
||||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
|
||||||
.ARM : {
|
|
||||||
__exidx_start = .;
|
|
||||||
*(.ARM.exidx*)
|
|
||||||
__exidx_end = .;
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.preinit_array :
|
|
||||||
{
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
|
||||||
KEEP (*(.preinit_array*))
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
|
||||||
} >FLASH
|
|
||||||
.init_array :
|
|
||||||
{
|
|
||||||
PROVIDE_HIDDEN (__init_array_start = .);
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array*))
|
|
||||||
PROVIDE_HIDDEN (__init_array_end = .);
|
|
||||||
} >FLASH
|
|
||||||
.fini_array :
|
|
||||||
{
|
|
||||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
KEEP (*(.fini_array*))
|
|
||||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* used by the startup to initialize data */
|
|
||||||
_sidata = LOADADDR(.data);
|
|
||||||
|
|
||||||
/* Initialized data sections goes into RAM, load LMA copy after code */
|
|
||||||
.data :
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
_sdata = .; /* create a global symbol at data start */
|
|
||||||
*(.data) /* .data sections */
|
|
||||||
*(.data*) /* .data* sections */
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
|
||||||
_edata = .; /* define a global symbol at data end */
|
|
||||||
} >DTCMRAM AT> FLASH
|
|
||||||
|
|
||||||
|
|
||||||
/* Uninitialized data section */
|
|
||||||
. = ALIGN(4);
|
|
||||||
.bss :
|
|
||||||
{
|
|
||||||
/* This is used by the startup in order to initialize the .bss secion */
|
|
||||||
_sbss = .; /* define a global symbol at bss start */
|
|
||||||
__bss_start__ = _sbss;
|
|
||||||
*(.bss)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
|
||||||
_ebss = .; /* define a global symbol at bss end */
|
|
||||||
__bss_end__ = _ebss;
|
|
||||||
} >DTCMRAM
|
|
||||||
|
|
||||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
|
||||||
._user_heap_stack :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE ( end = . );
|
|
||||||
PROVIDE ( _end = . );
|
|
||||||
. = . + _Min_Heap_Size;
|
|
||||||
. = . + _Min_Stack_Size;
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >DTCMRAM
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Remove information from the standard libraries */
|
|
||||||
/DISCARD/ :
|
|
||||||
{
|
|
||||||
libc.a ( * )
|
|
||||||
libm.a ( * )
|
|
||||||
libgcc.a ( * )
|
|
||||||
}
|
|
||||||
|
|
||||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
|||||||
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PD14) },
|
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PD14) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PB05) },
|
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PB05) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA06) },
|
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA06) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA07) },
|
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA05) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PB09) },
|
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PB09) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_PB08) },
|
{ MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_PB08) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_PC06) },
|
{ MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_PC06) },
|
||||||
|
@ -1,448 +0,0 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file startup_stm32f401xe.s
|
|
||||||
* @author MCD Application Team
|
|
||||||
* @brief STM32F401xExx 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 2017 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
|
|
||||||
|
|
||||||
.global g_pfnVectors
|
|
||||||
.global Default_Handler
|
|
||||||
|
|
||||||
/* start address for the initialization values of the .data section.
|
|
||||||
defined in linker script */
|
|
||||||
.word _sidata
|
|
||||||
/* start address for the .data section. defined in linker script */
|
|
||||||
.word _sdata
|
|
||||||
/* end address for the .data section. defined in linker script */
|
|
||||||
.word _edata
|
|
||||||
/* start address for the .bss section. defined in linker script */
|
|
||||||
.word _sbss
|
|
||||||
/* end address for the .bss section. defined in linker script */
|
|
||||||
.word _ebss
|
|
||||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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
|
|
||||||
.weak Reset_Handler
|
|
||||||
.type Reset_Handler, %function
|
|
||||||
Reset_Handler:
|
|
||||||
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
|
|
||||||
.size Reset_Handler, .-Reset_Handler
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This is the code that gets called when the processor receives an
|
|
||||||
* unexpected interrupt. This simply enters an infinite loop, preserving
|
|
||||||
* the system state for examination by a debugger.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
.section .text.Default_Handler,"ax",%progbits
|
|
||||||
Default_Handler:
|
|
||||||
Infinite_Loop:
|
|
||||||
b Infinite_Loop
|
|
||||||
.size Default_Handler, .-Default_Handler
|
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* The minimal vector table for a Cortex M3. Note that the proper constructs
|
|
||||||
* must be placed on this to ensure that it ends up at physical address
|
|
||||||
* 0x0000.0000.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.section .isr_vector,"a",%progbits
|
|
||||||
.type g_pfnVectors, %object
|
|
||||||
.size g_pfnVectors, .-g_pfnVectors
|
|
||||||
|
|
||||||
g_pfnVectors:
|
|
||||||
.word _estack
|
|
||||||
.word Reset_Handler
|
|
||||||
.word NMI_Handler
|
|
||||||
.word HardFault_Handler
|
|
||||||
.word MemManage_Handler
|
|
||||||
.word BusFault_Handler
|
|
||||||
.word UsageFault_Handler
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word SVC_Handler
|
|
||||||
.word DebugMon_Handler
|
|
||||||
.word 0
|
|
||||||
.word PendSV_Handler
|
|
||||||
.word SysTick_Handler
|
|
||||||
|
|
||||||
/* External Interrupts */
|
|
||||||
.word WWDG_IRQHandler /* Window WatchDog */
|
|
||||||
.word PVD_IRQHandler /* PVD through EXTI Line detection */
|
|
||||||
.word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */
|
|
||||||
.word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */
|
|
||||||
.word FLASH_IRQHandler /* FLASH */
|
|
||||||
.word RCC_IRQHandler /* RCC */
|
|
||||||
.word EXTI0_IRQHandler /* EXTI Line0 */
|
|
||||||
.word EXTI1_IRQHandler /* EXTI Line1 */
|
|
||||||
.word EXTI2_IRQHandler /* EXTI Line2 */
|
|
||||||
.word EXTI3_IRQHandler /* EXTI Line3 */
|
|
||||||
.word EXTI4_IRQHandler /* EXTI Line4 */
|
|
||||||
.word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */
|
|
||||||
.word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */
|
|
||||||
.word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */
|
|
||||||
.word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */
|
|
||||||
.word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */
|
|
||||||
.word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */
|
|
||||||
.word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */
|
|
||||||
.word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word EXTI9_5_IRQHandler /* External Line[9:5]s */
|
|
||||||
.word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */
|
|
||||||
.word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */
|
|
||||||
.word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */
|
|
||||||
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
|
|
||||||
.word TIM2_IRQHandler /* TIM2 */
|
|
||||||
.word TIM3_IRQHandler /* TIM3 */
|
|
||||||
.word TIM4_IRQHandler /* TIM4 */
|
|
||||||
.word I2C1_EV_IRQHandler /* I2C1 Event */
|
|
||||||
.word I2C1_ER_IRQHandler /* I2C1 Error */
|
|
||||||
.word I2C2_EV_IRQHandler /* I2C2 Event */
|
|
||||||
.word I2C2_ER_IRQHandler /* I2C2 Error */
|
|
||||||
.word SPI1_IRQHandler /* SPI1 */
|
|
||||||
.word SPI2_IRQHandler /* SPI2 */
|
|
||||||
.word USART1_IRQHandler /* USART1 */
|
|
||||||
.word USART2_IRQHandler /* USART2 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word EXTI15_10_IRQHandler /* External Line[15:10]s */
|
|
||||||
.word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */
|
|
||||||
.word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word SDIO_IRQHandler /* SDIO */
|
|
||||||
.word TIM5_IRQHandler /* TIM5 */
|
|
||||||
.word SPI3_IRQHandler /* SPI3 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */
|
|
||||||
.word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */
|
|
||||||
.word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */
|
|
||||||
.word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */
|
|
||||||
.word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word OTG_FS_IRQHandler /* USB OTG FS */
|
|
||||||
.word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */
|
|
||||||
.word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */
|
|
||||||
.word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */
|
|
||||||
.word USART6_IRQHandler /* USART6 */
|
|
||||||
.word I2C3_EV_IRQHandler /* I2C3 event */
|
|
||||||
.word I2C3_ER_IRQHandler /* I2C3 error */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word FPU_IRQHandler /* FPU */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word SPI4_IRQHandler /* SPI4 */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
*
|
|
||||||
* Provide weak aliases for each Exception handler to the Default_Handler.
|
|
||||||
* As they are weak aliases, any function with the same name will override
|
|
||||||
* this definition.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.weak NMI_Handler
|
|
||||||
.thumb_set NMI_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak HardFault_Handler
|
|
||||||
.thumb_set HardFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak MemManage_Handler
|
|
||||||
.thumb_set MemManage_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak BusFault_Handler
|
|
||||||
.thumb_set BusFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak UsageFault_Handler
|
|
||||||
.thumb_set UsageFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SVC_Handler
|
|
||||||
.thumb_set SVC_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak DebugMon_Handler
|
|
||||||
.thumb_set DebugMon_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak PendSV_Handler
|
|
||||||
.thumb_set PendSV_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SysTick_Handler
|
|
||||||
.thumb_set SysTick_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak WWDG_IRQHandler
|
|
||||||
.thumb_set WWDG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak PVD_IRQHandler
|
|
||||||
.thumb_set PVD_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TAMP_STAMP_IRQHandler
|
|
||||||
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_WKUP_IRQHandler
|
|
||||||
.thumb_set RTC_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FLASH_IRQHandler
|
|
||||||
.thumb_set FLASH_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RCC_IRQHandler
|
|
||||||
.thumb_set RCC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI0_IRQHandler
|
|
||||||
.thumb_set EXTI0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI1_IRQHandler
|
|
||||||
.thumb_set EXTI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI2_IRQHandler
|
|
||||||
.thumb_set EXTI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI3_IRQHandler
|
|
||||||
.thumb_set EXTI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI4_IRQHandler
|
|
||||||
.thumb_set EXTI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ADC_IRQHandler
|
|
||||||
.thumb_set ADC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI9_5_IRQHandler
|
|
||||||
.thumb_set EXTI9_5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_BRK_TIM9_IRQHandler
|
|
||||||
.thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_UP_TIM10_IRQHandler
|
|
||||||
.thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_TRG_COM_TIM11_IRQHandler
|
|
||||||
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_CC_IRQHandler
|
|
||||||
.thumb_set TIM1_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM2_IRQHandler
|
|
||||||
.thumb_set TIM2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM3_IRQHandler
|
|
||||||
.thumb_set TIM3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM4_IRQHandler
|
|
||||||
.thumb_set TIM4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_EV_IRQHandler
|
|
||||||
.thumb_set I2C1_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_ER_IRQHandler
|
|
||||||
.thumb_set I2C1_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_EV_IRQHandler
|
|
||||||
.thumb_set I2C2_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_ER_IRQHandler
|
|
||||||
.thumb_set I2C2_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI1_IRQHandler
|
|
||||||
.thumb_set SPI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI2_IRQHandler
|
|
||||||
.thumb_set SPI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART1_IRQHandler
|
|
||||||
.thumb_set USART1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART2_IRQHandler
|
|
||||||
.thumb_set USART2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI15_10_IRQHandler
|
|
||||||
.thumb_set EXTI15_10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_Alarm_IRQHandler
|
|
||||||
.thumb_set RTC_Alarm_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SDIO_IRQHandler
|
|
||||||
.thumb_set SDIO_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM5_IRQHandler
|
|
||||||
.thumb_set TIM5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI3_IRQHandler
|
|
||||||
.thumb_set SPI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_IRQHandler
|
|
||||||
.thumb_set OTG_FS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART6_IRQHandler
|
|
||||||
.thumb_set USART6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_EV_IRQHandler
|
|
||||||
.thumb_set I2C3_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_ER_IRQHandler
|
|
||||||
.thumb_set I2C3_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FPU_IRQHandler
|
|
||||||
.thumb_set FPU_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI4_IRQHandler
|
|
||||||
.thumb_set SPI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
@ -1,516 +0,0 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file startup_stm32f405xx.s
|
|
||||||
* @author MCD Application Team
|
|
||||||
* @brief STM32F405xx 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 2017 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
|
|
||||||
|
|
||||||
.global g_pfnVectors
|
|
||||||
.global Default_Handler
|
|
||||||
|
|
||||||
/* start address for the initialization values of the .data section.
|
|
||||||
defined in linker script */
|
|
||||||
.word _sidata
|
|
||||||
/* start address for the .data section. defined in linker script */
|
|
||||||
.word _sdata
|
|
||||||
/* end address for the .data section. defined in linker script */
|
|
||||||
.word _edata
|
|
||||||
/* start address for the .bss section. defined in linker script */
|
|
||||||
.word _sbss
|
|
||||||
/* end address for the .bss section. defined in linker script */
|
|
||||||
.word _ebss
|
|
||||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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
|
|
||||||
.weak Reset_Handler
|
|
||||||
.type Reset_Handler, %function
|
|
||||||
Reset_Handler:
|
|
||||||
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
|
|
||||||
.size Reset_Handler, .-Reset_Handler
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This is the code that gets called when the processor receives an
|
|
||||||
* unexpected interrupt. This simply enters an infinite loop, preserving
|
|
||||||
* the system state for examination by a debugger.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
.section .text.Default_Handler,"ax",%progbits
|
|
||||||
Default_Handler:
|
|
||||||
Infinite_Loop:
|
|
||||||
b Infinite_Loop
|
|
||||||
.size Default_Handler, .-Default_Handler
|
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* The minimal vector table for a Cortex M3. Note that the proper constructs
|
|
||||||
* must be placed on this to ensure that it ends up at physical address
|
|
||||||
* 0x0000.0000.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.section .isr_vector,"a",%progbits
|
|
||||||
.type g_pfnVectors, %object
|
|
||||||
.size g_pfnVectors, .-g_pfnVectors
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
g_pfnVectors:
|
|
||||||
.word _estack
|
|
||||||
.word Reset_Handler
|
|
||||||
|
|
||||||
.word NMI_Handler
|
|
||||||
.word HardFault_Handler
|
|
||||||
.word MemManage_Handler
|
|
||||||
.word BusFault_Handler
|
|
||||||
.word UsageFault_Handler
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word SVC_Handler
|
|
||||||
.word DebugMon_Handler
|
|
||||||
.word 0
|
|
||||||
.word PendSV_Handler
|
|
||||||
.word SysTick_Handler
|
|
||||||
|
|
||||||
/* External Interrupts */
|
|
||||||
.word WWDG_IRQHandler /* Window WatchDog */
|
|
||||||
.word PVD_IRQHandler /* PVD through EXTI Line detection */
|
|
||||||
.word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */
|
|
||||||
.word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */
|
|
||||||
.word FLASH_IRQHandler /* FLASH */
|
|
||||||
.word RCC_IRQHandler /* RCC */
|
|
||||||
.word EXTI0_IRQHandler /* EXTI Line0 */
|
|
||||||
.word EXTI1_IRQHandler /* EXTI Line1 */
|
|
||||||
.word EXTI2_IRQHandler /* EXTI Line2 */
|
|
||||||
.word EXTI3_IRQHandler /* EXTI Line3 */
|
|
||||||
.word EXTI4_IRQHandler /* EXTI Line4 */
|
|
||||||
.word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */
|
|
||||||
.word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */
|
|
||||||
.word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */
|
|
||||||
.word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */
|
|
||||||
.word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */
|
|
||||||
.word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */
|
|
||||||
.word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */
|
|
||||||
.word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */
|
|
||||||
.word CAN1_TX_IRQHandler /* CAN1 TX */
|
|
||||||
.word CAN1_RX0_IRQHandler /* CAN1 RX0 */
|
|
||||||
.word CAN1_RX1_IRQHandler /* CAN1 RX1 */
|
|
||||||
.word CAN1_SCE_IRQHandler /* CAN1 SCE */
|
|
||||||
.word EXTI9_5_IRQHandler /* External Line[9:5]s */
|
|
||||||
.word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */
|
|
||||||
.word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */
|
|
||||||
.word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */
|
|
||||||
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
|
|
||||||
.word TIM2_IRQHandler /* TIM2 */
|
|
||||||
.word TIM3_IRQHandler /* TIM3 */
|
|
||||||
.word TIM4_IRQHandler /* TIM4 */
|
|
||||||
.word I2C1_EV_IRQHandler /* I2C1 Event */
|
|
||||||
.word I2C1_ER_IRQHandler /* I2C1 Error */
|
|
||||||
.word I2C2_EV_IRQHandler /* I2C2 Event */
|
|
||||||
.word I2C2_ER_IRQHandler /* I2C2 Error */
|
|
||||||
.word SPI1_IRQHandler /* SPI1 */
|
|
||||||
.word SPI2_IRQHandler /* SPI2 */
|
|
||||||
.word USART1_IRQHandler /* USART1 */
|
|
||||||
.word USART2_IRQHandler /* USART2 */
|
|
||||||
.word USART3_IRQHandler /* USART3 */
|
|
||||||
.word EXTI15_10_IRQHandler /* External Line[15:10]s */
|
|
||||||
.word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */
|
|
||||||
.word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */
|
|
||||||
.word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */
|
|
||||||
.word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */
|
|
||||||
.word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */
|
|
||||||
.word TIM8_CC_IRQHandler /* TIM8 Capture Compare */
|
|
||||||
.word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */
|
|
||||||
.word FSMC_IRQHandler /* FSMC */
|
|
||||||
.word SDIO_IRQHandler /* SDIO */
|
|
||||||
.word TIM5_IRQHandler /* TIM5 */
|
|
||||||
.word SPI3_IRQHandler /* SPI3 */
|
|
||||||
.word UART4_IRQHandler /* UART4 */
|
|
||||||
.word UART5_IRQHandler /* UART5 */
|
|
||||||
.word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */
|
|
||||||
.word TIM7_IRQHandler /* TIM7 */
|
|
||||||
.word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */
|
|
||||||
.word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */
|
|
||||||
.word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */
|
|
||||||
.word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */
|
|
||||||
.word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word CAN2_TX_IRQHandler /* CAN2 TX */
|
|
||||||
.word CAN2_RX0_IRQHandler /* CAN2 RX0 */
|
|
||||||
.word CAN2_RX1_IRQHandler /* CAN2 RX1 */
|
|
||||||
.word CAN2_SCE_IRQHandler /* CAN2 SCE */
|
|
||||||
.word OTG_FS_IRQHandler /* USB OTG FS */
|
|
||||||
.word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */
|
|
||||||
.word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */
|
|
||||||
.word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */
|
|
||||||
.word USART6_IRQHandler /* USART6 */
|
|
||||||
.word I2C3_EV_IRQHandler /* I2C3 event */
|
|
||||||
.word I2C3_ER_IRQHandler /* I2C3 error */
|
|
||||||
.word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */
|
|
||||||
.word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */
|
|
||||||
.word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */
|
|
||||||
.word OTG_HS_IRQHandler /* USB OTG HS */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word HASH_RNG_IRQHandler /* Hash and Rng */
|
|
||||||
.word FPU_IRQHandler /* FPU */
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
*
|
|
||||||
* Provide weak aliases for each Exception handler to the Default_Handler.
|
|
||||||
* As they are weak aliases, any function with the same name will override
|
|
||||||
* this definition.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.weak NMI_Handler
|
|
||||||
.thumb_set NMI_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak HardFault_Handler
|
|
||||||
.thumb_set HardFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak MemManage_Handler
|
|
||||||
.thumb_set MemManage_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak BusFault_Handler
|
|
||||||
.thumb_set BusFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak UsageFault_Handler
|
|
||||||
.thumb_set UsageFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SVC_Handler
|
|
||||||
.thumb_set SVC_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak DebugMon_Handler
|
|
||||||
.thumb_set DebugMon_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak PendSV_Handler
|
|
||||||
.thumb_set PendSV_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SysTick_Handler
|
|
||||||
.thumb_set SysTick_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak WWDG_IRQHandler
|
|
||||||
.thumb_set WWDG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak PVD_IRQHandler
|
|
||||||
.thumb_set PVD_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TAMP_STAMP_IRQHandler
|
|
||||||
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_WKUP_IRQHandler
|
|
||||||
.thumb_set RTC_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FLASH_IRQHandler
|
|
||||||
.thumb_set FLASH_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RCC_IRQHandler
|
|
||||||
.thumb_set RCC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI0_IRQHandler
|
|
||||||
.thumb_set EXTI0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI1_IRQHandler
|
|
||||||
.thumb_set EXTI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI2_IRQHandler
|
|
||||||
.thumb_set EXTI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI3_IRQHandler
|
|
||||||
.thumb_set EXTI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI4_IRQHandler
|
|
||||||
.thumb_set EXTI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ADC_IRQHandler
|
|
||||||
.thumb_set ADC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_TX_IRQHandler
|
|
||||||
.thumb_set CAN1_TX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_RX0_IRQHandler
|
|
||||||
.thumb_set CAN1_RX0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_RX1_IRQHandler
|
|
||||||
.thumb_set CAN1_RX1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_SCE_IRQHandler
|
|
||||||
.thumb_set CAN1_SCE_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI9_5_IRQHandler
|
|
||||||
.thumb_set EXTI9_5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_BRK_TIM9_IRQHandler
|
|
||||||
.thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_UP_TIM10_IRQHandler
|
|
||||||
.thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_TRG_COM_TIM11_IRQHandler
|
|
||||||
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_CC_IRQHandler
|
|
||||||
.thumb_set TIM1_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM2_IRQHandler
|
|
||||||
.thumb_set TIM2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM3_IRQHandler
|
|
||||||
.thumb_set TIM3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM4_IRQHandler
|
|
||||||
.thumb_set TIM4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_EV_IRQHandler
|
|
||||||
.thumb_set I2C1_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_ER_IRQHandler
|
|
||||||
.thumb_set I2C1_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_EV_IRQHandler
|
|
||||||
.thumb_set I2C2_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_ER_IRQHandler
|
|
||||||
.thumb_set I2C2_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI1_IRQHandler
|
|
||||||
.thumb_set SPI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI2_IRQHandler
|
|
||||||
.thumb_set SPI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART1_IRQHandler
|
|
||||||
.thumb_set USART1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART2_IRQHandler
|
|
||||||
.thumb_set USART2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART3_IRQHandler
|
|
||||||
.thumb_set USART3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI15_10_IRQHandler
|
|
||||||
.thumb_set EXTI15_10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_Alarm_IRQHandler
|
|
||||||
.thumb_set RTC_Alarm_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_BRK_TIM12_IRQHandler
|
|
||||||
.thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_UP_TIM13_IRQHandler
|
|
||||||
.thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_TRG_COM_TIM14_IRQHandler
|
|
||||||
.thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_CC_IRQHandler
|
|
||||||
.thumb_set TIM8_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FSMC_IRQHandler
|
|
||||||
.thumb_set FSMC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SDIO_IRQHandler
|
|
||||||
.thumb_set SDIO_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM5_IRQHandler
|
|
||||||
.thumb_set TIM5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI3_IRQHandler
|
|
||||||
.thumb_set SPI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART4_IRQHandler
|
|
||||||
.thumb_set UART4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART5_IRQHandler
|
|
||||||
.thumb_set UART5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM6_DAC_IRQHandler
|
|
||||||
.thumb_set TIM6_DAC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM7_IRQHandler
|
|
||||||
.thumb_set TIM7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_TX_IRQHandler
|
|
||||||
.thumb_set CAN2_TX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_RX0_IRQHandler
|
|
||||||
.thumb_set CAN2_RX0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_RX1_IRQHandler
|
|
||||||
.thumb_set CAN2_RX1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_SCE_IRQHandler
|
|
||||||
.thumb_set CAN2_SCE_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_IRQHandler
|
|
||||||
.thumb_set OTG_FS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART6_IRQHandler
|
|
||||||
.thumb_set USART6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_EV_IRQHandler
|
|
||||||
.thumb_set I2C3_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_ER_IRQHandler
|
|
||||||
.thumb_set I2C3_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_EP1_OUT_IRQHandler
|
|
||||||
.thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_EP1_IN_IRQHandler
|
|
||||||
.thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_IRQHandler
|
|
||||||
.thumb_set OTG_HS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HASH_RNG_IRQHandler
|
|
||||||
.thumb_set HASH_RNG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FPU_IRQHandler
|
|
||||||
.thumb_set FPU_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
||||||
|
|
@ -1,516 +0,0 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file startup_stm32f405xx.s
|
|
||||||
* @author MCD Application Team
|
|
||||||
* @brief STM32F405xx 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 2017 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
|
|
||||||
|
|
||||||
.global g_pfnVectors
|
|
||||||
.global Default_Handler
|
|
||||||
|
|
||||||
/* start address for the initialization values of the .data section.
|
|
||||||
defined in linker script */
|
|
||||||
.word _sidata
|
|
||||||
/* start address for the .data section. defined in linker script */
|
|
||||||
.word _sdata
|
|
||||||
/* end address for the .data section. defined in linker script */
|
|
||||||
.word _edata
|
|
||||||
/* start address for the .bss section. defined in linker script */
|
|
||||||
.word _sbss
|
|
||||||
/* end address for the .bss section. defined in linker script */
|
|
||||||
.word _ebss
|
|
||||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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
|
|
||||||
.weak Reset_Handler
|
|
||||||
.type Reset_Handler, %function
|
|
||||||
Reset_Handler:
|
|
||||||
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
|
|
||||||
.size Reset_Handler, .-Reset_Handler
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This is the code that gets called when the processor receives an
|
|
||||||
* unexpected interrupt. This simply enters an infinite loop, preserving
|
|
||||||
* the system state for examination by a debugger.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
.section .text.Default_Handler,"ax",%progbits
|
|
||||||
Default_Handler:
|
|
||||||
Infinite_Loop:
|
|
||||||
b Infinite_Loop
|
|
||||||
.size Default_Handler, .-Default_Handler
|
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* The minimal vector table for a Cortex M3. Note that the proper constructs
|
|
||||||
* must be placed on this to ensure that it ends up at physical address
|
|
||||||
* 0x0000.0000.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.section .isr_vector,"a",%progbits
|
|
||||||
.type g_pfnVectors, %object
|
|
||||||
.size g_pfnVectors, .-g_pfnVectors
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
g_pfnVectors:
|
|
||||||
.word _estack
|
|
||||||
.word Reset_Handler
|
|
||||||
|
|
||||||
.word NMI_Handler
|
|
||||||
.word HardFault_Handler
|
|
||||||
.word MemManage_Handler
|
|
||||||
.word BusFault_Handler
|
|
||||||
.word UsageFault_Handler
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word SVC_Handler
|
|
||||||
.word DebugMon_Handler
|
|
||||||
.word 0
|
|
||||||
.word PendSV_Handler
|
|
||||||
.word SysTick_Handler
|
|
||||||
|
|
||||||
/* External Interrupts */
|
|
||||||
.word WWDG_IRQHandler /* Window WatchDog */
|
|
||||||
.word PVD_IRQHandler /* PVD through EXTI Line detection */
|
|
||||||
.word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */
|
|
||||||
.word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */
|
|
||||||
.word FLASH_IRQHandler /* FLASH */
|
|
||||||
.word RCC_IRQHandler /* RCC */
|
|
||||||
.word EXTI0_IRQHandler /* EXTI Line0 */
|
|
||||||
.word EXTI1_IRQHandler /* EXTI Line1 */
|
|
||||||
.word EXTI2_IRQHandler /* EXTI Line2 */
|
|
||||||
.word EXTI3_IRQHandler /* EXTI Line3 */
|
|
||||||
.word EXTI4_IRQHandler /* EXTI Line4 */
|
|
||||||
.word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */
|
|
||||||
.word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */
|
|
||||||
.word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */
|
|
||||||
.word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */
|
|
||||||
.word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */
|
|
||||||
.word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */
|
|
||||||
.word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */
|
|
||||||
.word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */
|
|
||||||
.word CAN1_TX_IRQHandler /* CAN1 TX */
|
|
||||||
.word CAN1_RX0_IRQHandler /* CAN1 RX0 */
|
|
||||||
.word CAN1_RX1_IRQHandler /* CAN1 RX1 */
|
|
||||||
.word CAN1_SCE_IRQHandler /* CAN1 SCE */
|
|
||||||
.word EXTI9_5_IRQHandler /* External Line[9:5]s */
|
|
||||||
.word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */
|
|
||||||
.word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */
|
|
||||||
.word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */
|
|
||||||
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
|
|
||||||
.word TIM2_IRQHandler /* TIM2 */
|
|
||||||
.word TIM3_IRQHandler /* TIM3 */
|
|
||||||
.word TIM4_IRQHandler /* TIM4 */
|
|
||||||
.word I2C1_EV_IRQHandler /* I2C1 Event */
|
|
||||||
.word I2C1_ER_IRQHandler /* I2C1 Error */
|
|
||||||
.word I2C2_EV_IRQHandler /* I2C2 Event */
|
|
||||||
.word I2C2_ER_IRQHandler /* I2C2 Error */
|
|
||||||
.word SPI1_IRQHandler /* SPI1 */
|
|
||||||
.word SPI2_IRQHandler /* SPI2 */
|
|
||||||
.word USART1_IRQHandler /* USART1 */
|
|
||||||
.word USART2_IRQHandler /* USART2 */
|
|
||||||
.word USART3_IRQHandler /* USART3 */
|
|
||||||
.word EXTI15_10_IRQHandler /* External Line[15:10]s */
|
|
||||||
.word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */
|
|
||||||
.word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */
|
|
||||||
.word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */
|
|
||||||
.word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */
|
|
||||||
.word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */
|
|
||||||
.word TIM8_CC_IRQHandler /* TIM8 Capture Compare */
|
|
||||||
.word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */
|
|
||||||
.word FSMC_IRQHandler /* FSMC */
|
|
||||||
.word SDIO_IRQHandler /* SDIO */
|
|
||||||
.word TIM5_IRQHandler /* TIM5 */
|
|
||||||
.word SPI3_IRQHandler /* SPI3 */
|
|
||||||
.word UART4_IRQHandler /* UART4 */
|
|
||||||
.word UART5_IRQHandler /* UART5 */
|
|
||||||
.word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */
|
|
||||||
.word TIM7_IRQHandler /* TIM7 */
|
|
||||||
.word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */
|
|
||||||
.word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */
|
|
||||||
.word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */
|
|
||||||
.word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */
|
|
||||||
.word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word CAN2_TX_IRQHandler /* CAN2 TX */
|
|
||||||
.word CAN2_RX0_IRQHandler /* CAN2 RX0 */
|
|
||||||
.word CAN2_RX1_IRQHandler /* CAN2 RX1 */
|
|
||||||
.word CAN2_SCE_IRQHandler /* CAN2 SCE */
|
|
||||||
.word OTG_FS_IRQHandler /* USB OTG FS */
|
|
||||||
.word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */
|
|
||||||
.word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */
|
|
||||||
.word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */
|
|
||||||
.word USART6_IRQHandler /* USART6 */
|
|
||||||
.word I2C3_EV_IRQHandler /* I2C3 event */
|
|
||||||
.word I2C3_ER_IRQHandler /* I2C3 error */
|
|
||||||
.word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */
|
|
||||||
.word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */
|
|
||||||
.word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */
|
|
||||||
.word OTG_HS_IRQHandler /* USB OTG HS */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word HASH_RNG_IRQHandler /* Hash and Rng */
|
|
||||||
.word FPU_IRQHandler /* FPU */
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
*
|
|
||||||
* Provide weak aliases for each Exception handler to the Default_Handler.
|
|
||||||
* As they are weak aliases, any function with the same name will override
|
|
||||||
* this definition.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.weak NMI_Handler
|
|
||||||
.thumb_set NMI_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak HardFault_Handler
|
|
||||||
.thumb_set HardFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak MemManage_Handler
|
|
||||||
.thumb_set MemManage_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak BusFault_Handler
|
|
||||||
.thumb_set BusFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak UsageFault_Handler
|
|
||||||
.thumb_set UsageFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SVC_Handler
|
|
||||||
.thumb_set SVC_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak DebugMon_Handler
|
|
||||||
.thumb_set DebugMon_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak PendSV_Handler
|
|
||||||
.thumb_set PendSV_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SysTick_Handler
|
|
||||||
.thumb_set SysTick_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak WWDG_IRQHandler
|
|
||||||
.thumb_set WWDG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak PVD_IRQHandler
|
|
||||||
.thumb_set PVD_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TAMP_STAMP_IRQHandler
|
|
||||||
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_WKUP_IRQHandler
|
|
||||||
.thumb_set RTC_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FLASH_IRQHandler
|
|
||||||
.thumb_set FLASH_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RCC_IRQHandler
|
|
||||||
.thumb_set RCC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI0_IRQHandler
|
|
||||||
.thumb_set EXTI0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI1_IRQHandler
|
|
||||||
.thumb_set EXTI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI2_IRQHandler
|
|
||||||
.thumb_set EXTI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI3_IRQHandler
|
|
||||||
.thumb_set EXTI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI4_IRQHandler
|
|
||||||
.thumb_set EXTI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ADC_IRQHandler
|
|
||||||
.thumb_set ADC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_TX_IRQHandler
|
|
||||||
.thumb_set CAN1_TX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_RX0_IRQHandler
|
|
||||||
.thumb_set CAN1_RX0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_RX1_IRQHandler
|
|
||||||
.thumb_set CAN1_RX1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_SCE_IRQHandler
|
|
||||||
.thumb_set CAN1_SCE_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI9_5_IRQHandler
|
|
||||||
.thumb_set EXTI9_5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_BRK_TIM9_IRQHandler
|
|
||||||
.thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_UP_TIM10_IRQHandler
|
|
||||||
.thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_TRG_COM_TIM11_IRQHandler
|
|
||||||
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_CC_IRQHandler
|
|
||||||
.thumb_set TIM1_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM2_IRQHandler
|
|
||||||
.thumb_set TIM2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM3_IRQHandler
|
|
||||||
.thumb_set TIM3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM4_IRQHandler
|
|
||||||
.thumb_set TIM4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_EV_IRQHandler
|
|
||||||
.thumb_set I2C1_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_ER_IRQHandler
|
|
||||||
.thumb_set I2C1_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_EV_IRQHandler
|
|
||||||
.thumb_set I2C2_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_ER_IRQHandler
|
|
||||||
.thumb_set I2C2_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI1_IRQHandler
|
|
||||||
.thumb_set SPI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI2_IRQHandler
|
|
||||||
.thumb_set SPI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART1_IRQHandler
|
|
||||||
.thumb_set USART1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART2_IRQHandler
|
|
||||||
.thumb_set USART2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART3_IRQHandler
|
|
||||||
.thumb_set USART3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI15_10_IRQHandler
|
|
||||||
.thumb_set EXTI15_10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_Alarm_IRQHandler
|
|
||||||
.thumb_set RTC_Alarm_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_BRK_TIM12_IRQHandler
|
|
||||||
.thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_UP_TIM13_IRQHandler
|
|
||||||
.thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_TRG_COM_TIM14_IRQHandler
|
|
||||||
.thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_CC_IRQHandler
|
|
||||||
.thumb_set TIM8_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FSMC_IRQHandler
|
|
||||||
.thumb_set FSMC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SDIO_IRQHandler
|
|
||||||
.thumb_set SDIO_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM5_IRQHandler
|
|
||||||
.thumb_set TIM5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI3_IRQHandler
|
|
||||||
.thumb_set SPI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART4_IRQHandler
|
|
||||||
.thumb_set UART4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART5_IRQHandler
|
|
||||||
.thumb_set UART5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM6_DAC_IRQHandler
|
|
||||||
.thumb_set TIM6_DAC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM7_IRQHandler
|
|
||||||
.thumb_set TIM7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_TX_IRQHandler
|
|
||||||
.thumb_set CAN2_TX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_RX0_IRQHandler
|
|
||||||
.thumb_set CAN2_RX0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_RX1_IRQHandler
|
|
||||||
.thumb_set CAN2_RX1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_SCE_IRQHandler
|
|
||||||
.thumb_set CAN2_SCE_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_IRQHandler
|
|
||||||
.thumb_set OTG_FS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART6_IRQHandler
|
|
||||||
.thumb_set USART6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_EV_IRQHandler
|
|
||||||
.thumb_set I2C3_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_ER_IRQHandler
|
|
||||||
.thumb_set I2C3_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_EP1_OUT_IRQHandler
|
|
||||||
.thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_EP1_IN_IRQHandler
|
|
||||||
.thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_IRQHandler
|
|
||||||
.thumb_set OTG_HS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HASH_RNG_IRQHandler
|
|
||||||
.thumb_set HASH_RNG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FPU_IRQHandler
|
|
||||||
.thumb_set FPU_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
||||||
|
|
@ -1,452 +0,0 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file startup_stm32f411xe.s
|
|
||||||
* @author MCD Application Team
|
|
||||||
* @brief STM32F411xExx 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 2017 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
|
|
||||||
|
|
||||||
.global g_pfnVectors
|
|
||||||
.global Default_Handler
|
|
||||||
|
|
||||||
/* start address for the initialization values of the .data section.
|
|
||||||
defined in linker script */
|
|
||||||
.word _sidata
|
|
||||||
/* start address for the .data section. defined in linker script */
|
|
||||||
.word _sdata
|
|
||||||
/* end address for the .data section. defined in linker script */
|
|
||||||
.word _edata
|
|
||||||
/* start address for the .bss section. defined in linker script */
|
|
||||||
.word _sbss
|
|
||||||
/* end address for the .bss section. defined in linker script */
|
|
||||||
.word _ebss
|
|
||||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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
|
|
||||||
.weak Reset_Handler
|
|
||||||
.type Reset_Handler, %function
|
|
||||||
Reset_Handler:
|
|
||||||
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
|
|
||||||
.size Reset_Handler, .-Reset_Handler
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This is the code that gets called when the processor receives an
|
|
||||||
* unexpected interrupt. This simply enters an infinite loop, preserving
|
|
||||||
* the system state for examination by a debugger.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
.section .text.Default_Handler,"ax",%progbits
|
|
||||||
Default_Handler:
|
|
||||||
Infinite_Loop:
|
|
||||||
b Infinite_Loop
|
|
||||||
.size Default_Handler, .-Default_Handler
|
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* The minimal vector table for a Cortex M3. Note that the proper constructs
|
|
||||||
* must be placed on this to ensure that it ends up at physical address
|
|
||||||
* 0x0000.0000.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.section .isr_vector,"a",%progbits
|
|
||||||
.type g_pfnVectors, %object
|
|
||||||
.size g_pfnVectors, .-g_pfnVectors
|
|
||||||
|
|
||||||
g_pfnVectors:
|
|
||||||
.word _estack
|
|
||||||
.word Reset_Handler
|
|
||||||
.word NMI_Handler
|
|
||||||
.word HardFault_Handler
|
|
||||||
.word MemManage_Handler
|
|
||||||
.word BusFault_Handler
|
|
||||||
.word UsageFault_Handler
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word SVC_Handler
|
|
||||||
.word DebugMon_Handler
|
|
||||||
.word 0
|
|
||||||
.word PendSV_Handler
|
|
||||||
.word SysTick_Handler
|
|
||||||
|
|
||||||
/* External Interrupts */
|
|
||||||
.word WWDG_IRQHandler /* Window WatchDog */
|
|
||||||
.word PVD_IRQHandler /* PVD through EXTI Line detection */
|
|
||||||
.word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */
|
|
||||||
.word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */
|
|
||||||
.word FLASH_IRQHandler /* FLASH */
|
|
||||||
.word RCC_IRQHandler /* RCC */
|
|
||||||
.word EXTI0_IRQHandler /* EXTI Line0 */
|
|
||||||
.word EXTI1_IRQHandler /* EXTI Line1 */
|
|
||||||
.word EXTI2_IRQHandler /* EXTI Line2 */
|
|
||||||
.word EXTI3_IRQHandler /* EXTI Line3 */
|
|
||||||
.word EXTI4_IRQHandler /* EXTI Line4 */
|
|
||||||
.word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */
|
|
||||||
.word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */
|
|
||||||
.word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */
|
|
||||||
.word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */
|
|
||||||
.word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */
|
|
||||||
.word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */
|
|
||||||
.word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */
|
|
||||||
.word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word EXTI9_5_IRQHandler /* External Line[9:5]s */
|
|
||||||
.word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */
|
|
||||||
.word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */
|
|
||||||
.word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */
|
|
||||||
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
|
|
||||||
.word TIM2_IRQHandler /* TIM2 */
|
|
||||||
.word TIM3_IRQHandler /* TIM3 */
|
|
||||||
.word TIM4_IRQHandler /* TIM4 */
|
|
||||||
.word I2C1_EV_IRQHandler /* I2C1 Event */
|
|
||||||
.word I2C1_ER_IRQHandler /* I2C1 Error */
|
|
||||||
.word I2C2_EV_IRQHandler /* I2C2 Event */
|
|
||||||
.word I2C2_ER_IRQHandler /* I2C2 Error */
|
|
||||||
.word SPI1_IRQHandler /* SPI1 */
|
|
||||||
.word SPI2_IRQHandler /* SPI2 */
|
|
||||||
.word USART1_IRQHandler /* USART1 */
|
|
||||||
.word USART2_IRQHandler /* USART2 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word EXTI15_10_IRQHandler /* External Line[15:10]s */
|
|
||||||
.word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */
|
|
||||||
.word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word SDIO_IRQHandler /* SDIO */
|
|
||||||
.word TIM5_IRQHandler /* TIM5 */
|
|
||||||
.word SPI3_IRQHandler /* SPI3 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */
|
|
||||||
.word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */
|
|
||||||
.word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */
|
|
||||||
.word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */
|
|
||||||
.word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word OTG_FS_IRQHandler /* USB OTG FS */
|
|
||||||
.word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */
|
|
||||||
.word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */
|
|
||||||
.word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */
|
|
||||||
.word USART6_IRQHandler /* USART6 */
|
|
||||||
.word I2C3_EV_IRQHandler /* I2C3 event */
|
|
||||||
.word I2C3_ER_IRQHandler /* I2C3 error */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word FPU_IRQHandler /* FPU */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word SPI4_IRQHandler /* SPI4 */
|
|
||||||
.word SPI5_IRQHandler /* SPI5 */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
*
|
|
||||||
* Provide weak aliases for each Exception handler to the Default_Handler.
|
|
||||||
* As they are weak aliases, any function with the same name will override
|
|
||||||
* this definition.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.weak NMI_Handler
|
|
||||||
.thumb_set NMI_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak HardFault_Handler
|
|
||||||
.thumb_set HardFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak MemManage_Handler
|
|
||||||
.thumb_set MemManage_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak BusFault_Handler
|
|
||||||
.thumb_set BusFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak UsageFault_Handler
|
|
||||||
.thumb_set UsageFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SVC_Handler
|
|
||||||
.thumb_set SVC_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak DebugMon_Handler
|
|
||||||
.thumb_set DebugMon_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak PendSV_Handler
|
|
||||||
.thumb_set PendSV_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SysTick_Handler
|
|
||||||
.thumb_set SysTick_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak WWDG_IRQHandler
|
|
||||||
.thumb_set WWDG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak PVD_IRQHandler
|
|
||||||
.thumb_set PVD_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TAMP_STAMP_IRQHandler
|
|
||||||
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_WKUP_IRQHandler
|
|
||||||
.thumb_set RTC_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FLASH_IRQHandler
|
|
||||||
.thumb_set FLASH_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RCC_IRQHandler
|
|
||||||
.thumb_set RCC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI0_IRQHandler
|
|
||||||
.thumb_set EXTI0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI1_IRQHandler
|
|
||||||
.thumb_set EXTI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI2_IRQHandler
|
|
||||||
.thumb_set EXTI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI3_IRQHandler
|
|
||||||
.thumb_set EXTI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI4_IRQHandler
|
|
||||||
.thumb_set EXTI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ADC_IRQHandler
|
|
||||||
.thumb_set ADC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI9_5_IRQHandler
|
|
||||||
.thumb_set EXTI9_5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_BRK_TIM9_IRQHandler
|
|
||||||
.thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_UP_TIM10_IRQHandler
|
|
||||||
.thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_TRG_COM_TIM11_IRQHandler
|
|
||||||
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_CC_IRQHandler
|
|
||||||
.thumb_set TIM1_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM2_IRQHandler
|
|
||||||
.thumb_set TIM2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM3_IRQHandler
|
|
||||||
.thumb_set TIM3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM4_IRQHandler
|
|
||||||
.thumb_set TIM4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_EV_IRQHandler
|
|
||||||
.thumb_set I2C1_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_ER_IRQHandler
|
|
||||||
.thumb_set I2C1_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_EV_IRQHandler
|
|
||||||
.thumb_set I2C2_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_ER_IRQHandler
|
|
||||||
.thumb_set I2C2_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI1_IRQHandler
|
|
||||||
.thumb_set SPI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI2_IRQHandler
|
|
||||||
.thumb_set SPI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART1_IRQHandler
|
|
||||||
.thumb_set USART1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART2_IRQHandler
|
|
||||||
.thumb_set USART2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI15_10_IRQHandler
|
|
||||||
.thumb_set EXTI15_10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_Alarm_IRQHandler
|
|
||||||
.thumb_set RTC_Alarm_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SDIO_IRQHandler
|
|
||||||
.thumb_set SDIO_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM5_IRQHandler
|
|
||||||
.thumb_set TIM5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI3_IRQHandler
|
|
||||||
.thumb_set SPI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_IRQHandler
|
|
||||||
.thumb_set OTG_FS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART6_IRQHandler
|
|
||||||
.thumb_set USART6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_EV_IRQHandler
|
|
||||||
.thumb_set I2C3_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_ER_IRQHandler
|
|
||||||
.thumb_set I2C3_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FPU_IRQHandler
|
|
||||||
.thumb_set FPU_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI4_IRQHandler
|
|
||||||
.thumb_set SPI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI5_IRQHandler
|
|
||||||
.thumb_set SPI5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
@ -1,524 +0,0 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file startup_stm32f412zx.s
|
|
||||||
* @author MCD Application Team
|
|
||||||
* @brief STM32F412Zx 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 2017 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
|
|
||||||
|
|
||||||
.global g_pfnVectors
|
|
||||||
.global Default_Handler
|
|
||||||
|
|
||||||
/* start address for the initialization values of the .data section.
|
|
||||||
defined in linker script */
|
|
||||||
.word _sidata
|
|
||||||
/* start address for the .data section. defined in linker script */
|
|
||||||
.word _sdata
|
|
||||||
/* end address for the .data section. defined in linker script */
|
|
||||||
.word _edata
|
|
||||||
/* start address for the .bss section. defined in linker script */
|
|
||||||
.word _sbss
|
|
||||||
/* end address for the .bss section. defined in linker script */
|
|
||||||
.word _ebss
|
|
||||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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
|
|
||||||
.weak Reset_Handler
|
|
||||||
.type Reset_Handler, %function
|
|
||||||
Reset_Handler:
|
|
||||||
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
|
|
||||||
.size Reset_Handler, .-Reset_Handler
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This is the code that gets called when the processor receives an
|
|
||||||
* unexpected interrupt. This simply enters an infinite loop, preserving
|
|
||||||
* the system state for examination by a debugger.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
.section .text.Default_Handler,"ax",%progbits
|
|
||||||
Default_Handler:
|
|
||||||
Infinite_Loop:
|
|
||||||
b Infinite_Loop
|
|
||||||
.size Default_Handler, .-Default_Handler
|
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* The minimal vector table for a Cortex M3. Note that the proper constructs
|
|
||||||
* must be placed on this to ensure that it ends up at physical address
|
|
||||||
* 0x0000.0000.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.section .isr_vector,"a",%progbits
|
|
||||||
.type g_pfnVectors, %object
|
|
||||||
.size g_pfnVectors, .-g_pfnVectors
|
|
||||||
|
|
||||||
g_pfnVectors:
|
|
||||||
.word _estack
|
|
||||||
.word Reset_Handler
|
|
||||||
.word NMI_Handler
|
|
||||||
.word HardFault_Handler
|
|
||||||
.word MemManage_Handler
|
|
||||||
.word BusFault_Handler
|
|
||||||
.word UsageFault_Handler
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word SVC_Handler
|
|
||||||
.word DebugMon_Handler
|
|
||||||
.word 0
|
|
||||||
.word PendSV_Handler
|
|
||||||
.word SysTick_Handler
|
|
||||||
|
|
||||||
/* External Interrupts */
|
|
||||||
.word WWDG_IRQHandler /* Window WatchDog */
|
|
||||||
.word PVD_IRQHandler /* PVD through EXTI Line detection */
|
|
||||||
.word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */
|
|
||||||
.word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */
|
|
||||||
.word FLASH_IRQHandler /* FLASH */
|
|
||||||
.word RCC_IRQHandler /* RCC */
|
|
||||||
.word EXTI0_IRQHandler /* EXTI Line0 */
|
|
||||||
.word EXTI1_IRQHandler /* EXTI Line1 */
|
|
||||||
.word EXTI2_IRQHandler /* EXTI Line2 */
|
|
||||||
.word EXTI3_IRQHandler /* EXTI Line3 */
|
|
||||||
.word EXTI4_IRQHandler /* EXTI Line4 */
|
|
||||||
.word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */
|
|
||||||
.word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */
|
|
||||||
.word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */
|
|
||||||
.word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */
|
|
||||||
.word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */
|
|
||||||
.word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */
|
|
||||||
.word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */
|
|
||||||
.word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */
|
|
||||||
.word CAN1_TX_IRQHandler /* CAN1 TX */
|
|
||||||
.word CAN1_RX0_IRQHandler /* CAN1 RX0 */
|
|
||||||
.word CAN1_RX1_IRQHandler /* CAN1 RX1 */
|
|
||||||
.word CAN1_SCE_IRQHandler /* CAN1 SCE */
|
|
||||||
.word EXTI9_5_IRQHandler /* External Line[9:5]s */
|
|
||||||
.word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */
|
|
||||||
.word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */
|
|
||||||
.word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */
|
|
||||||
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
|
|
||||||
.word TIM2_IRQHandler /* TIM2 */
|
|
||||||
.word TIM3_IRQHandler /* TIM3 */
|
|
||||||
.word TIM4_IRQHandler /* TIM4 */
|
|
||||||
.word I2C1_EV_IRQHandler /* I2C1 Event */
|
|
||||||
.word I2C1_ER_IRQHandler /* I2C1 Error */
|
|
||||||
.word I2C2_EV_IRQHandler /* I2C2 Event */
|
|
||||||
.word I2C2_ER_IRQHandler /* I2C2 Error */
|
|
||||||
.word SPI1_IRQHandler /* SPI1 */
|
|
||||||
.word SPI2_IRQHandler /* SPI2 */
|
|
||||||
.word USART1_IRQHandler /* USART1 */
|
|
||||||
.word USART2_IRQHandler /* USART2 */
|
|
||||||
.word USART3_IRQHandler /* USART3 */
|
|
||||||
.word EXTI15_10_IRQHandler /* External Line[15:10]s */
|
|
||||||
.word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */
|
|
||||||
.word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */
|
|
||||||
.word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */
|
|
||||||
.word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */
|
|
||||||
.word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */
|
|
||||||
.word TIM8_CC_IRQHandler /* TIM8 Capture Compare */
|
|
||||||
.word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word SDIO_IRQHandler /* SDIO */
|
|
||||||
.word TIM5_IRQHandler /* TIM5 */
|
|
||||||
.word SPI3_IRQHandler /* SPI3 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word TIM6_IRQHandler /* TIM6 */
|
|
||||||
.word TIM7_IRQHandler /* TIM7 */
|
|
||||||
.word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */
|
|
||||||
.word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */
|
|
||||||
.word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */
|
|
||||||
.word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */
|
|
||||||
.word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */
|
|
||||||
.word DFSDM1_FLT0_IRQHandler /* DFSDM1 Filter0 */
|
|
||||||
.word DFSDM1_FLT1_IRQHandler /* DFSDM1 Filter1 */
|
|
||||||
.word CAN2_TX_IRQHandler /* CAN2 TX */
|
|
||||||
.word CAN2_RX0_IRQHandler /* CAN2 RX0 */
|
|
||||||
.word CAN2_RX1_IRQHandler /* CAN2 RX1 */
|
|
||||||
.word CAN2_SCE_IRQHandler /* CAN2 SCE */
|
|
||||||
.word OTG_FS_IRQHandler /* USB OTG FS */
|
|
||||||
.word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */
|
|
||||||
.word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */
|
|
||||||
.word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */
|
|
||||||
.word USART6_IRQHandler /* USART6 */
|
|
||||||
.word I2C3_EV_IRQHandler /* I2C3 event */
|
|
||||||
.word I2C3_ER_IRQHandler /* I2C3 error */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word RNG_IRQHandler /* RNG */
|
|
||||||
.word FPU_IRQHandler /* FPU */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word SPI4_IRQHandler /* SPI4 */
|
|
||||||
.word SPI5_IRQHandler /* SPI5 */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word QUADSPI_IRQHandler /* QuadSPI */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word FMPI2C1_EV_IRQHandler /* FMPI2C1 Event */
|
|
||||||
.word FMPI2C1_ER_IRQHandler /* FMPI2C1 Error */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
*
|
|
||||||
* Provide weak aliases for each Exception handler to the Default_Handler.
|
|
||||||
* As they are weak aliases, any function with the same name will override
|
|
||||||
* this definition.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.weak NMI_Handler
|
|
||||||
.thumb_set NMI_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak HardFault_Handler
|
|
||||||
.thumb_set HardFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak MemManage_Handler
|
|
||||||
.thumb_set MemManage_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak BusFault_Handler
|
|
||||||
.thumb_set BusFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak UsageFault_Handler
|
|
||||||
.thumb_set UsageFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SVC_Handler
|
|
||||||
.thumb_set SVC_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak DebugMon_Handler
|
|
||||||
.thumb_set DebugMon_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak PendSV_Handler
|
|
||||||
.thumb_set PendSV_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SysTick_Handler
|
|
||||||
.thumb_set SysTick_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak WWDG_IRQHandler
|
|
||||||
.thumb_set WWDG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak PVD_IRQHandler
|
|
||||||
.thumb_set PVD_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TAMP_STAMP_IRQHandler
|
|
||||||
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_WKUP_IRQHandler
|
|
||||||
.thumb_set RTC_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FLASH_IRQHandler
|
|
||||||
.thumb_set FLASH_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RCC_IRQHandler
|
|
||||||
.thumb_set RCC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI0_IRQHandler
|
|
||||||
.thumb_set EXTI0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI1_IRQHandler
|
|
||||||
.thumb_set EXTI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI2_IRQHandler
|
|
||||||
.thumb_set EXTI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI3_IRQHandler
|
|
||||||
.thumb_set EXTI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI4_IRQHandler
|
|
||||||
.thumb_set EXTI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ADC_IRQHandler
|
|
||||||
.thumb_set ADC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_TX_IRQHandler
|
|
||||||
.thumb_set CAN1_TX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_RX0_IRQHandler
|
|
||||||
.thumb_set CAN1_RX0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_RX1_IRQHandler
|
|
||||||
.thumb_set CAN1_RX1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_SCE_IRQHandler
|
|
||||||
.thumb_set CAN1_SCE_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI9_5_IRQHandler
|
|
||||||
.thumb_set EXTI9_5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_BRK_TIM9_IRQHandler
|
|
||||||
.thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_UP_TIM10_IRQHandler
|
|
||||||
.thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_TRG_COM_TIM11_IRQHandler
|
|
||||||
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_CC_IRQHandler
|
|
||||||
.thumb_set TIM1_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM2_IRQHandler
|
|
||||||
.thumb_set TIM2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM3_IRQHandler
|
|
||||||
.thumb_set TIM3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM4_IRQHandler
|
|
||||||
.thumb_set TIM4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_EV_IRQHandler
|
|
||||||
.thumb_set I2C1_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_ER_IRQHandler
|
|
||||||
.thumb_set I2C1_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_EV_IRQHandler
|
|
||||||
.thumb_set I2C2_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_ER_IRQHandler
|
|
||||||
.thumb_set I2C2_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI1_IRQHandler
|
|
||||||
.thumb_set SPI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI2_IRQHandler
|
|
||||||
.thumb_set SPI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART1_IRQHandler
|
|
||||||
.thumb_set USART1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART2_IRQHandler
|
|
||||||
.thumb_set USART2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART3_IRQHandler
|
|
||||||
.thumb_set USART3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI15_10_IRQHandler
|
|
||||||
.thumb_set EXTI15_10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_Alarm_IRQHandler
|
|
||||||
.thumb_set RTC_Alarm_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_BRK_TIM12_IRQHandler
|
|
||||||
.thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_UP_TIM13_IRQHandler
|
|
||||||
.thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_TRG_COM_TIM14_IRQHandler
|
|
||||||
.thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_CC_IRQHandler
|
|
||||||
.thumb_set TIM8_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SDIO_IRQHandler
|
|
||||||
.thumb_set SDIO_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM5_IRQHandler
|
|
||||||
.thumb_set TIM5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI3_IRQHandler
|
|
||||||
.thumb_set SPI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM6_IRQHandler
|
|
||||||
.thumb_set TIM6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM7_IRQHandler
|
|
||||||
.thumb_set TIM7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT0_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT1_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_TX_IRQHandler
|
|
||||||
.thumb_set CAN2_TX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_RX0_IRQHandler
|
|
||||||
.thumb_set CAN2_RX0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_RX1_IRQHandler
|
|
||||||
.thumb_set CAN2_RX1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_SCE_IRQHandler
|
|
||||||
.thumb_set CAN2_SCE_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_IRQHandler
|
|
||||||
.thumb_set OTG_FS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART6_IRQHandler
|
|
||||||
.thumb_set USART6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_EV_IRQHandler
|
|
||||||
.thumb_set I2C3_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_ER_IRQHandler
|
|
||||||
.thumb_set I2C3_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RNG_IRQHandler
|
|
||||||
.thumb_set RNG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FPU_IRQHandler
|
|
||||||
.thumb_set FPU_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI4_IRQHandler
|
|
||||||
.thumb_set SPI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI5_IRQHandler
|
|
||||||
.thumb_set SPI5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak QUADSPI_IRQHandler
|
|
||||||
.thumb_set QUADSPI_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FMPI2C1_EV_IRQHandler
|
|
||||||
.thumb_set FMPI2C1_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FMPI2C1_ER_IRQHandler
|
|
||||||
.thumb_set FMPI2C1_ER_IRQHandler,Default_Handler
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -1,618 +0,0 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file startup_stm32f767xx.s
|
|
||||||
* @author MCD Application Team
|
|
||||||
* @brief STM32F767xx Devices vector table for GCC based toolchain.
|
|
||||||
* 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-M7 processor is in Thread mode,
|
|
||||||
* priority is Privileged, and the Stack is set to Main.
|
|
||||||
******************************************************************************
|
|
||||||
* @attention
|
|
||||||
*
|
|
||||||
* <h2><center>© Copyright (c) 2016 STMicroelectronics.
|
|
||||||
* All rights reserved.</center></h2>
|
|
||||||
*
|
|
||||||
* This software component is licensed by ST under BSD 3-Clause license,
|
|
||||||
* the "License"; You may not use this file except in compliance with the
|
|
||||||
* License. You may obtain a copy of the License at:
|
|
||||||
* opensource.org/licenses/BSD-3-Clause
|
|
||||||
*
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
.syntax unified
|
|
||||||
.cpu cortex-m7
|
|
||||||
.fpu softvfp
|
|
||||||
.thumb
|
|
||||||
|
|
||||||
.global g_pfnVectors
|
|
||||||
.global Default_Handler
|
|
||||||
|
|
||||||
/* start address for the initialization values of the .data section.
|
|
||||||
defined in linker script */
|
|
||||||
.word _sidata
|
|
||||||
/* start address for the .data section. defined in linker script */
|
|
||||||
.word _sdata
|
|
||||||
/* end address for the .data section. defined in linker script */
|
|
||||||
.word _edata
|
|
||||||
/* start address for the .bss section. defined in linker script */
|
|
||||||
.word _sbss
|
|
||||||
/* end address for the .bss section. defined in linker script */
|
|
||||||
.word _ebss
|
|
||||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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
|
|
||||||
.weak Reset_Handler
|
|
||||||
.type Reset_Handler, %function
|
|
||||||
Reset_Handler:
|
|
||||||
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 initialization function.*/
|
|
||||||
bl SystemInit
|
|
||||||
/* Call static constructors */
|
|
||||||
/* bl __libc_init_array */
|
|
||||||
/* Call the application's entry point.*/
|
|
||||||
bl main
|
|
||||||
bx lr
|
|
||||||
.size Reset_Handler, .-Reset_Handler
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This is the code that gets called when the processor receives an
|
|
||||||
* unexpected interrupt. This simply enters an infinite loop, preserving
|
|
||||||
* the system state for examination by a debugger.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
.section .text.Default_Handler,"ax",%progbits
|
|
||||||
Default_Handler:
|
|
||||||
Infinite_Loop:
|
|
||||||
b Infinite_Loop
|
|
||||||
.size Default_Handler, .-Default_Handler
|
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* The minimal vector table for a Cortex M7. Note that the proper constructs
|
|
||||||
* must be placed on this to ensure that it ends up at physical address
|
|
||||||
* 0x0000.0000.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.section .isr_vector,"a",%progbits
|
|
||||||
.type g_pfnVectors, %object
|
|
||||||
.size g_pfnVectors, .-g_pfnVectors
|
|
||||||
|
|
||||||
|
|
||||||
g_pfnVectors:
|
|
||||||
.word _estack
|
|
||||||
.word Reset_Handler
|
|
||||||
|
|
||||||
.word NMI_Handler
|
|
||||||
.word HardFault_Handler
|
|
||||||
.word MemManage_Handler
|
|
||||||
.word BusFault_Handler
|
|
||||||
.word UsageFault_Handler
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word SVC_Handler
|
|
||||||
.word DebugMon_Handler
|
|
||||||
.word 0
|
|
||||||
.word PendSV_Handler
|
|
||||||
.word SysTick_Handler
|
|
||||||
|
|
||||||
/* External Interrupts */
|
|
||||||
.word WWDG_IRQHandler /* Window WatchDog */
|
|
||||||
.word PVD_IRQHandler /* PVD through EXTI Line detection */
|
|
||||||
.word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */
|
|
||||||
.word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */
|
|
||||||
.word FLASH_IRQHandler /* FLASH */
|
|
||||||
.word RCC_IRQHandler /* RCC */
|
|
||||||
.word EXTI0_IRQHandler /* EXTI Line0 */
|
|
||||||
.word EXTI1_IRQHandler /* EXTI Line1 */
|
|
||||||
.word EXTI2_IRQHandler /* EXTI Line2 */
|
|
||||||
.word EXTI3_IRQHandler /* EXTI Line3 */
|
|
||||||
.word EXTI4_IRQHandler /* EXTI Line4 */
|
|
||||||
.word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */
|
|
||||||
.word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */
|
|
||||||
.word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */
|
|
||||||
.word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */
|
|
||||||
.word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */
|
|
||||||
.word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */
|
|
||||||
.word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */
|
|
||||||
.word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */
|
|
||||||
.word CAN1_TX_IRQHandler /* CAN1 TX */
|
|
||||||
.word CAN1_RX0_IRQHandler /* CAN1 RX0 */
|
|
||||||
.word CAN1_RX1_IRQHandler /* CAN1 RX1 */
|
|
||||||
.word CAN1_SCE_IRQHandler /* CAN1 SCE */
|
|
||||||
.word EXTI9_5_IRQHandler /* External Line[9:5]s */
|
|
||||||
.word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */
|
|
||||||
.word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */
|
|
||||||
.word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */
|
|
||||||
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
|
|
||||||
.word TIM2_IRQHandler /* TIM2 */
|
|
||||||
.word TIM3_IRQHandler /* TIM3 */
|
|
||||||
.word TIM4_IRQHandler /* TIM4 */
|
|
||||||
.word I2C1_EV_IRQHandler /* I2C1 Event */
|
|
||||||
.word I2C1_ER_IRQHandler /* I2C1 Error */
|
|
||||||
.word I2C2_EV_IRQHandler /* I2C2 Event */
|
|
||||||
.word I2C2_ER_IRQHandler /* I2C2 Error */
|
|
||||||
.word SPI1_IRQHandler /* SPI1 */
|
|
||||||
.word SPI2_IRQHandler /* SPI2 */
|
|
||||||
.word USART1_IRQHandler /* USART1 */
|
|
||||||
.word USART2_IRQHandler /* USART2 */
|
|
||||||
.word USART3_IRQHandler /* USART3 */
|
|
||||||
.word EXTI15_10_IRQHandler /* External Line[15:10]s */
|
|
||||||
.word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */
|
|
||||||
.word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */
|
|
||||||
.word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */
|
|
||||||
.word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */
|
|
||||||
.word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */
|
|
||||||
.word TIM8_CC_IRQHandler /* TIM8 Capture Compare */
|
|
||||||
.word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */
|
|
||||||
.word FMC_IRQHandler /* FMC */
|
|
||||||
.word SDMMC1_IRQHandler /* SDMMC1 */
|
|
||||||
.word TIM5_IRQHandler /* TIM5 */
|
|
||||||
.word SPI3_IRQHandler /* SPI3 */
|
|
||||||
.word UART4_IRQHandler /* UART4 */
|
|
||||||
.word UART5_IRQHandler /* UART5 */
|
|
||||||
.word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */
|
|
||||||
.word TIM7_IRQHandler /* TIM7 */
|
|
||||||
.word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */
|
|
||||||
.word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */
|
|
||||||
.word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */
|
|
||||||
.word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */
|
|
||||||
.word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */
|
|
||||||
.word ETH_IRQHandler /* Ethernet */
|
|
||||||
.word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */
|
|
||||||
.word CAN2_TX_IRQHandler /* CAN2 TX */
|
|
||||||
.word CAN2_RX0_IRQHandler /* CAN2 RX0 */
|
|
||||||
.word CAN2_RX1_IRQHandler /* CAN2 RX1 */
|
|
||||||
.word CAN2_SCE_IRQHandler /* CAN2 SCE */
|
|
||||||
.word OTG_FS_IRQHandler /* USB OTG FS */
|
|
||||||
.word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */
|
|
||||||
.word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */
|
|
||||||
.word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */
|
|
||||||
.word USART6_IRQHandler /* USART6 */
|
|
||||||
.word I2C3_EV_IRQHandler /* I2C3 event */
|
|
||||||
.word I2C3_ER_IRQHandler /* I2C3 error */
|
|
||||||
.word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */
|
|
||||||
.word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */
|
|
||||||
.word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */
|
|
||||||
.word OTG_HS_IRQHandler /* USB OTG HS */
|
|
||||||
.word DCMI_IRQHandler /* DCMI */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word RNG_IRQHandler /* RNG */
|
|
||||||
.word FPU_IRQHandler /* FPU */
|
|
||||||
.word UART7_IRQHandler /* UART7 */
|
|
||||||
.word UART8_IRQHandler /* UART8 */
|
|
||||||
.word SPI4_IRQHandler /* SPI4 */
|
|
||||||
.word SPI5_IRQHandler /* SPI5 */
|
|
||||||
.word SPI6_IRQHandler /* SPI6 */
|
|
||||||
.word SAI1_IRQHandler /* SAI1 */
|
|
||||||
.word LTDC_IRQHandler /* LTDC */
|
|
||||||
.word LTDC_ER_IRQHandler /* LTDC error */
|
|
||||||
.word DMA2D_IRQHandler /* DMA2D */
|
|
||||||
.word SAI2_IRQHandler /* SAI2 */
|
|
||||||
.word QUADSPI_IRQHandler /* QUADSPI */
|
|
||||||
.word LPTIM1_IRQHandler /* LPTIM1 */
|
|
||||||
.word CEC_IRQHandler /* HDMI_CEC */
|
|
||||||
.word I2C4_EV_IRQHandler /* I2C4 Event */
|
|
||||||
.word I2C4_ER_IRQHandler /* I2C4 Error */
|
|
||||||
.word SPDIF_RX_IRQHandler /* SPDIF_RX */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word DFSDM1_FLT0_IRQHandler /* DFSDM1 Filter 0 global Interrupt */
|
|
||||||
.word DFSDM1_FLT1_IRQHandler /* DFSDM1 Filter 1 global Interrupt */
|
|
||||||
.word DFSDM1_FLT2_IRQHandler /* DFSDM1 Filter 2 global Interrupt */
|
|
||||||
.word DFSDM1_FLT3_IRQHandler /* DFSDM1 Filter 3 global Interrupt */
|
|
||||||
.word SDMMC2_IRQHandler /* SDMMC2 */
|
|
||||||
.word CAN3_TX_IRQHandler /* CAN3 TX */
|
|
||||||
.word CAN3_RX0_IRQHandler /* CAN3 RX0 */
|
|
||||||
.word CAN3_RX1_IRQHandler /* CAN3 RX1 */
|
|
||||||
.word CAN3_SCE_IRQHandler /* CAN3 SCE */
|
|
||||||
.word JPEG_IRQHandler /* JPEG */
|
|
||||||
.word MDIOS_IRQHandler /* MDIOS */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
*
|
|
||||||
* Provide weak aliases for each Exception handler to the Default_Handler.
|
|
||||||
* As they are weak aliases, any function with the same name will override
|
|
||||||
* this definition.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.weak NMI_Handler
|
|
||||||
.thumb_set NMI_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak HardFault_Handler
|
|
||||||
.thumb_set HardFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak MemManage_Handler
|
|
||||||
.thumb_set MemManage_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak BusFault_Handler
|
|
||||||
.thumb_set BusFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak UsageFault_Handler
|
|
||||||
.thumb_set UsageFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SVC_Handler
|
|
||||||
.thumb_set SVC_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak DebugMon_Handler
|
|
||||||
.thumb_set DebugMon_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak PendSV_Handler
|
|
||||||
.thumb_set PendSV_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SysTick_Handler
|
|
||||||
.thumb_set SysTick_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak WWDG_IRQHandler
|
|
||||||
.thumb_set WWDG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak PVD_IRQHandler
|
|
||||||
.thumb_set PVD_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TAMP_STAMP_IRQHandler
|
|
||||||
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_WKUP_IRQHandler
|
|
||||||
.thumb_set RTC_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FLASH_IRQHandler
|
|
||||||
.thumb_set FLASH_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RCC_IRQHandler
|
|
||||||
.thumb_set RCC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI0_IRQHandler
|
|
||||||
.thumb_set EXTI0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI1_IRQHandler
|
|
||||||
.thumb_set EXTI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI2_IRQHandler
|
|
||||||
.thumb_set EXTI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI3_IRQHandler
|
|
||||||
.thumb_set EXTI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI4_IRQHandler
|
|
||||||
.thumb_set EXTI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ADC_IRQHandler
|
|
||||||
.thumb_set ADC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_TX_IRQHandler
|
|
||||||
.thumb_set CAN1_TX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_RX0_IRQHandler
|
|
||||||
.thumb_set CAN1_RX0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_RX1_IRQHandler
|
|
||||||
.thumb_set CAN1_RX1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN1_SCE_IRQHandler
|
|
||||||
.thumb_set CAN1_SCE_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI9_5_IRQHandler
|
|
||||||
.thumb_set EXTI9_5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_BRK_TIM9_IRQHandler
|
|
||||||
.thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_UP_TIM10_IRQHandler
|
|
||||||
.thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_TRG_COM_TIM11_IRQHandler
|
|
||||||
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_CC_IRQHandler
|
|
||||||
.thumb_set TIM1_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM2_IRQHandler
|
|
||||||
.thumb_set TIM2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM3_IRQHandler
|
|
||||||
.thumb_set TIM3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM4_IRQHandler
|
|
||||||
.thumb_set TIM4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_EV_IRQHandler
|
|
||||||
.thumb_set I2C1_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_ER_IRQHandler
|
|
||||||
.thumb_set I2C1_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_EV_IRQHandler
|
|
||||||
.thumb_set I2C2_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_ER_IRQHandler
|
|
||||||
.thumb_set I2C2_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI1_IRQHandler
|
|
||||||
.thumb_set SPI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI2_IRQHandler
|
|
||||||
.thumb_set SPI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART1_IRQHandler
|
|
||||||
.thumb_set USART1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART2_IRQHandler
|
|
||||||
.thumb_set USART2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART3_IRQHandler
|
|
||||||
.thumb_set USART3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI15_10_IRQHandler
|
|
||||||
.thumb_set EXTI15_10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_Alarm_IRQHandler
|
|
||||||
.thumb_set RTC_Alarm_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_BRK_TIM12_IRQHandler
|
|
||||||
.thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_UP_TIM13_IRQHandler
|
|
||||||
.thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_TRG_COM_TIM14_IRQHandler
|
|
||||||
.thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_CC_IRQHandler
|
|
||||||
.thumb_set TIM8_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FMC_IRQHandler
|
|
||||||
.thumb_set FMC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SDMMC1_IRQHandler
|
|
||||||
.thumb_set SDMMC1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM5_IRQHandler
|
|
||||||
.thumb_set TIM5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI3_IRQHandler
|
|
||||||
.thumb_set SPI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART4_IRQHandler
|
|
||||||
.thumb_set UART4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART5_IRQHandler
|
|
||||||
.thumb_set UART5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM6_DAC_IRQHandler
|
|
||||||
.thumb_set TIM6_DAC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM7_IRQHandler
|
|
||||||
.thumb_set TIM7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ETH_IRQHandler
|
|
||||||
.thumb_set ETH_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ETH_WKUP_IRQHandler
|
|
||||||
.thumb_set ETH_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_TX_IRQHandler
|
|
||||||
.thumb_set CAN2_TX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_RX0_IRQHandler
|
|
||||||
.thumb_set CAN2_RX0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_RX1_IRQHandler
|
|
||||||
.thumb_set CAN2_RX1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN2_SCE_IRQHandler
|
|
||||||
.thumb_set CAN2_SCE_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_IRQHandler
|
|
||||||
.thumb_set OTG_FS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART6_IRQHandler
|
|
||||||
.thumb_set USART6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_EV_IRQHandler
|
|
||||||
.thumb_set I2C3_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_ER_IRQHandler
|
|
||||||
.thumb_set I2C3_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_EP1_OUT_IRQHandler
|
|
||||||
.thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_EP1_IN_IRQHandler
|
|
||||||
.thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_IRQHandler
|
|
||||||
.thumb_set OTG_HS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DCMI_IRQHandler
|
|
||||||
.thumb_set DCMI_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RNG_IRQHandler
|
|
||||||
.thumb_set RNG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FPU_IRQHandler
|
|
||||||
.thumb_set FPU_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART7_IRQHandler
|
|
||||||
.thumb_set UART7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART8_IRQHandler
|
|
||||||
.thumb_set UART8_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI4_IRQHandler
|
|
||||||
.thumb_set SPI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI5_IRQHandler
|
|
||||||
.thumb_set SPI5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI6_IRQHandler
|
|
||||||
.thumb_set SPI6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SAI1_IRQHandler
|
|
||||||
.thumb_set SAI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LTDC_IRQHandler
|
|
||||||
.thumb_set LTDC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LTDC_ER_IRQHandler
|
|
||||||
.thumb_set LTDC_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2D_IRQHandler
|
|
||||||
.thumb_set DMA2D_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SAI2_IRQHandler
|
|
||||||
.thumb_set SAI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak QUADSPI_IRQHandler
|
|
||||||
.thumb_set QUADSPI_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LPTIM1_IRQHandler
|
|
||||||
.thumb_set LPTIM1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CEC_IRQHandler
|
|
||||||
.thumb_set CEC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C4_EV_IRQHandler
|
|
||||||
.thumb_set I2C4_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C4_ER_IRQHandler
|
|
||||||
.thumb_set I2C4_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPDIF_RX_IRQHandler
|
|
||||||
.thumb_set SPDIF_RX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT0_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT1_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT2_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT3_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SDMMC2_IRQHandler
|
|
||||||
.thumb_set SDMMC2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN3_TX_IRQHandler
|
|
||||||
.thumb_set CAN3_TX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN3_RX0_IRQHandler
|
|
||||||
.thumb_set CAN3_RX0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN3_RX1_IRQHandler
|
|
||||||
.thumb_set CAN3_RX1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CAN3_SCE_IRQHandler
|
|
||||||
.thumb_set CAN3_SCE_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak JPEG_IRQHandler
|
|
||||||
.thumb_set JPEG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak MDIOS_IRQHandler
|
|
||||||
.thumb_set MDIOS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
@ -1,748 +0,0 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file startup_stm32h743xx.s
|
|
||||||
* @author MCD Application Team
|
|
||||||
* @brief STM32H743xx Devices vector table for GCC based toolchain.
|
|
||||||
* 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-M processor is in Thread mode,
|
|
||||||
* priority is Privileged, and the Stack is set to Main.
|
|
||||||
******************************************************************************
|
|
||||||
* @attention
|
|
||||||
*
|
|
||||||
* <h2><center>© Copyright (c) 2017 STMicroelectronics.
|
|
||||||
* All rights reserved.</center></h2>
|
|
||||||
*
|
|
||||||
* This software component is licensed by ST under BSD 3-Clause license,
|
|
||||||
* the "License"; You may not use this file except in compliance with the
|
|
||||||
* License. You may obtain a copy of the License at:
|
|
||||||
* opensource.org/licenses/BSD-3-Clause
|
|
||||||
*
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
.syntax unified
|
|
||||||
.cpu cortex-m7
|
|
||||||
.fpu softvfp
|
|
||||||
.thumb
|
|
||||||
|
|
||||||
.global g_pfnVectors
|
|
||||||
.global Default_Handler
|
|
||||||
|
|
||||||
/* start address for the initialization values of the .data section.
|
|
||||||
defined in linker script */
|
|
||||||
.word _sidata
|
|
||||||
/* start address for the .data section. defined in linker script */
|
|
||||||
.word _sdata
|
|
||||||
/* end address for the .data section. defined in linker script */
|
|
||||||
.word _edata
|
|
||||||
/* start address for the .bss section. defined in linker script */
|
|
||||||
.word _sbss
|
|
||||||
/* end address for the .bss section. defined in linker script */
|
|
||||||
.word _ebss
|
|
||||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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
|
|
||||||
.weak Reset_Handler
|
|
||||||
.type Reset_Handler, %function
|
|
||||||
Reset_Handler:
|
|
||||||
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
|
|
||||||
.size Reset_Handler, .-Reset_Handler
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This is the code that gets called when the processor receives an
|
|
||||||
* unexpected interrupt. This simply enters an infinite loop, preserving
|
|
||||||
* the system state for examination by a debugger.
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
.section .text.Default_Handler,"ax",%progbits
|
|
||||||
Default_Handler:
|
|
||||||
Infinite_Loop:
|
|
||||||
b Infinite_Loop
|
|
||||||
.size Default_Handler, .-Default_Handler
|
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* The minimal vector table for a Cortex M. Note that the proper constructs
|
|
||||||
* must be placed on this to ensure that it ends up at physical address
|
|
||||||
* 0x0000.0000.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.section .isr_vector,"a",%progbits
|
|
||||||
.type g_pfnVectors, %object
|
|
||||||
.size g_pfnVectors, .-g_pfnVectors
|
|
||||||
|
|
||||||
|
|
||||||
g_pfnVectors:
|
|
||||||
.word _estack
|
|
||||||
.word Reset_Handler
|
|
||||||
|
|
||||||
.word NMI_Handler
|
|
||||||
.word HardFault_Handler
|
|
||||||
.word MemManage_Handler
|
|
||||||
.word BusFault_Handler
|
|
||||||
.word UsageFault_Handler
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word SVC_Handler
|
|
||||||
.word DebugMon_Handler
|
|
||||||
.word 0
|
|
||||||
.word PendSV_Handler
|
|
||||||
.word SysTick_Handler
|
|
||||||
|
|
||||||
/* External Interrupts */
|
|
||||||
.word WWDG_IRQHandler /* Window WatchDog */
|
|
||||||
.word PVD_AVD_IRQHandler /* PVD/AVD through EXTI Line detection */
|
|
||||||
.word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */
|
|
||||||
.word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */
|
|
||||||
.word FLASH_IRQHandler /* FLASH */
|
|
||||||
.word RCC_IRQHandler /* RCC */
|
|
||||||
.word EXTI0_IRQHandler /* EXTI Line0 */
|
|
||||||
.word EXTI1_IRQHandler /* EXTI Line1 */
|
|
||||||
.word EXTI2_IRQHandler /* EXTI Line2 */
|
|
||||||
.word EXTI3_IRQHandler /* EXTI Line3 */
|
|
||||||
.word EXTI4_IRQHandler /* EXTI Line4 */
|
|
||||||
.word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */
|
|
||||||
.word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */
|
|
||||||
.word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */
|
|
||||||
.word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */
|
|
||||||
.word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */
|
|
||||||
.word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */
|
|
||||||
.word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */
|
|
||||||
.word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */
|
|
||||||
.word FDCAN1_IT0_IRQHandler /* FDCAN1 interrupt line 0 */
|
|
||||||
.word FDCAN2_IT0_IRQHandler /* FDCAN2 interrupt line 0 */
|
|
||||||
.word FDCAN1_IT1_IRQHandler /* FDCAN1 interrupt line 1 */
|
|
||||||
.word FDCAN2_IT1_IRQHandler /* FDCAN2 interrupt line 1 */
|
|
||||||
.word EXTI9_5_IRQHandler /* External Line[9:5]s */
|
|
||||||
.word TIM1_BRK_IRQHandler /* TIM1 Break interrupt */
|
|
||||||
.word TIM1_UP_IRQHandler /* TIM1 Update interrupt */
|
|
||||||
.word TIM1_TRG_COM_IRQHandler /* TIM1 Trigger and Commutation interrupt */
|
|
||||||
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
|
|
||||||
.word TIM2_IRQHandler /* TIM2 */
|
|
||||||
.word TIM3_IRQHandler /* TIM3 */
|
|
||||||
.word TIM4_IRQHandler /* TIM4 */
|
|
||||||
.word I2C1_EV_IRQHandler /* I2C1 Event */
|
|
||||||
.word I2C1_ER_IRQHandler /* I2C1 Error */
|
|
||||||
.word I2C2_EV_IRQHandler /* I2C2 Event */
|
|
||||||
.word I2C2_ER_IRQHandler /* I2C2 Error */
|
|
||||||
.word SPI1_IRQHandler /* SPI1 */
|
|
||||||
.word SPI2_IRQHandler /* SPI2 */
|
|
||||||
.word USART1_IRQHandler /* USART1 */
|
|
||||||
.word USART2_IRQHandler /* USART2 */
|
|
||||||
.word USART3_IRQHandler /* USART3 */
|
|
||||||
.word EXTI15_10_IRQHandler /* External Line[15:10]s */
|
|
||||||
.word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */
|
|
||||||
.word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */
|
|
||||||
.word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */
|
|
||||||
.word TIM8_CC_IRQHandler /* TIM8 Capture Compare */
|
|
||||||
.word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */
|
|
||||||
.word FMC_IRQHandler /* FMC */
|
|
||||||
.word SDMMC1_IRQHandler /* SDMMC1 */
|
|
||||||
.word TIM5_IRQHandler /* TIM5 */
|
|
||||||
.word SPI3_IRQHandler /* SPI3 */
|
|
||||||
.word UART4_IRQHandler /* UART4 */
|
|
||||||
.word UART5_IRQHandler /* UART5 */
|
|
||||||
.word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */
|
|
||||||
.word TIM7_IRQHandler /* TIM7 */
|
|
||||||
.word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */
|
|
||||||
.word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */
|
|
||||||
.word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */
|
|
||||||
.word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */
|
|
||||||
.word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */
|
|
||||||
.word ETH_IRQHandler /* Ethernet */
|
|
||||||
.word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */
|
|
||||||
.word FDCAN_CAL_IRQHandler /* FDCAN calibration unit interrupt*/
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */
|
|
||||||
.word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */
|
|
||||||
.word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */
|
|
||||||
.word USART6_IRQHandler /* USART6 */
|
|
||||||
.word I2C3_EV_IRQHandler /* I2C3 event */
|
|
||||||
.word I2C3_ER_IRQHandler /* I2C3 error */
|
|
||||||
.word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */
|
|
||||||
.word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */
|
|
||||||
.word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */
|
|
||||||
.word OTG_HS_IRQHandler /* USB OTG HS */
|
|
||||||
.word DCMI_IRQHandler /* DCMI */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word RNG_IRQHandler /* Rng */
|
|
||||||
.word FPU_IRQHandler /* FPU */
|
|
||||||
.word UART7_IRQHandler /* UART7 */
|
|
||||||
.word UART8_IRQHandler /* UART8 */
|
|
||||||
.word SPI4_IRQHandler /* SPI4 */
|
|
||||||
.word SPI5_IRQHandler /* SPI5 */
|
|
||||||
.word SPI6_IRQHandler /* SPI6 */
|
|
||||||
.word SAI1_IRQHandler /* SAI1 */
|
|
||||||
.word LTDC_IRQHandler /* LTDC */
|
|
||||||
.word LTDC_ER_IRQHandler /* LTDC error */
|
|
||||||
.word DMA2D_IRQHandler /* DMA2D */
|
|
||||||
.word SAI2_IRQHandler /* SAI2 */
|
|
||||||
.word QUADSPI_IRQHandler /* QUADSPI */
|
|
||||||
.word LPTIM1_IRQHandler /* LPTIM1 */
|
|
||||||
.word CEC_IRQHandler /* HDMI_CEC */
|
|
||||||
.word I2C4_EV_IRQHandler /* I2C4 Event */
|
|
||||||
.word I2C4_ER_IRQHandler /* I2C4 Error */
|
|
||||||
.word SPDIF_RX_IRQHandler /* SPDIF_RX */
|
|
||||||
.word OTG_FS_EP1_OUT_IRQHandler /* USB OTG FS End Point 1 Out */
|
|
||||||
.word OTG_FS_EP1_IN_IRQHandler /* USB OTG FS End Point 1 In */
|
|
||||||
.word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI */
|
|
||||||
.word OTG_FS_IRQHandler /* USB OTG FS */
|
|
||||||
.word DMAMUX1_OVR_IRQHandler /* DMAMUX1 Overrun interrupt */
|
|
||||||
.word HRTIM1_Master_IRQHandler /* HRTIM Master Timer global Interrupt */
|
|
||||||
.word HRTIM1_TIMA_IRQHandler /* HRTIM Timer A global Interrupt */
|
|
||||||
.word HRTIM1_TIMB_IRQHandler /* HRTIM Timer B global Interrupt */
|
|
||||||
.word HRTIM1_TIMC_IRQHandler /* HRTIM Timer C global Interrupt */
|
|
||||||
.word HRTIM1_TIMD_IRQHandler /* HRTIM Timer D global Interrupt */
|
|
||||||
.word HRTIM1_TIME_IRQHandler /* HRTIM Timer E global Interrupt */
|
|
||||||
.word HRTIM1_FLT_IRQHandler /* HRTIM Fault global Interrupt */
|
|
||||||
.word DFSDM1_FLT0_IRQHandler /* DFSDM Filter0 Interrupt */
|
|
||||||
.word DFSDM1_FLT1_IRQHandler /* DFSDM Filter1 Interrupt */
|
|
||||||
.word DFSDM1_FLT2_IRQHandler /* DFSDM Filter2 Interrupt */
|
|
||||||
.word DFSDM1_FLT3_IRQHandler /* DFSDM Filter3 Interrupt */
|
|
||||||
.word SAI3_IRQHandler /* SAI3 global Interrupt */
|
|
||||||
.word SWPMI1_IRQHandler /* Serial Wire Interface 1 global interrupt */
|
|
||||||
.word TIM15_IRQHandler /* TIM15 global Interrupt */
|
|
||||||
.word TIM16_IRQHandler /* TIM16 global Interrupt */
|
|
||||||
.word TIM17_IRQHandler /* TIM17 global Interrupt */
|
|
||||||
.word MDIOS_WKUP_IRQHandler /* MDIOS Wakeup Interrupt */
|
|
||||||
.word MDIOS_IRQHandler /* MDIOS global Interrupt */
|
|
||||||
.word JPEG_IRQHandler /* JPEG global Interrupt */
|
|
||||||
.word MDMA_IRQHandler /* MDMA global Interrupt */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word SDMMC2_IRQHandler /* SDMMC2 global Interrupt */
|
|
||||||
.word HSEM1_IRQHandler /* HSEM1 global Interrupt */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word ADC3_IRQHandler /* ADC3 global Interrupt */
|
|
||||||
.word DMAMUX2_OVR_IRQHandler /* DMAMUX Overrun interrupt */
|
|
||||||
.word BDMA_Channel0_IRQHandler /* BDMA Channel 0 global Interrupt */
|
|
||||||
.word BDMA_Channel1_IRQHandler /* BDMA Channel 1 global Interrupt */
|
|
||||||
.word BDMA_Channel2_IRQHandler /* BDMA Channel 2 global Interrupt */
|
|
||||||
.word BDMA_Channel3_IRQHandler /* BDMA Channel 3 global Interrupt */
|
|
||||||
.word BDMA_Channel4_IRQHandler /* BDMA Channel 4 global Interrupt */
|
|
||||||
.word BDMA_Channel5_IRQHandler /* BDMA Channel 5 global Interrupt */
|
|
||||||
.word BDMA_Channel6_IRQHandler /* BDMA Channel 6 global Interrupt */
|
|
||||||
.word BDMA_Channel7_IRQHandler /* BDMA Channel 7 global Interrupt */
|
|
||||||
.word COMP1_IRQHandler /* COMP1 global Interrupt */
|
|
||||||
.word LPTIM2_IRQHandler /* LP TIM2 global interrupt */
|
|
||||||
.word LPTIM3_IRQHandler /* LP TIM3 global interrupt */
|
|
||||||
.word LPTIM4_IRQHandler /* LP TIM4 global interrupt */
|
|
||||||
.word LPTIM5_IRQHandler /* LP TIM5 global interrupt */
|
|
||||||
.word LPUART1_IRQHandler /* LP UART1 interrupt */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word CRS_IRQHandler /* Clock Recovery Global Interrupt */
|
|
||||||
.word ECC_IRQHandler /* ECC diagnostic Global Interrupt */
|
|
||||||
.word SAI4_IRQHandler /* SAI4 global interrupt */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word 0 /* Reserved */
|
|
||||||
.word WAKEUP_PIN_IRQHandler /* Interrupt for all 6 wake-up pins */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
*
|
|
||||||
* Provide weak aliases for each Exception handler to the Default_Handler.
|
|
||||||
* As they are weak aliases, any function with the same name will override
|
|
||||||
* this definition.
|
|
||||||
*
|
|
||||||
*******************************************************************************/
|
|
||||||
.weak NMI_Handler
|
|
||||||
.thumb_set NMI_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak HardFault_Handler
|
|
||||||
.thumb_set HardFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak MemManage_Handler
|
|
||||||
.thumb_set MemManage_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak BusFault_Handler
|
|
||||||
.thumb_set BusFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak UsageFault_Handler
|
|
||||||
.thumb_set UsageFault_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SVC_Handler
|
|
||||||
.thumb_set SVC_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak DebugMon_Handler
|
|
||||||
.thumb_set DebugMon_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak PendSV_Handler
|
|
||||||
.thumb_set PendSV_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak SysTick_Handler
|
|
||||||
.thumb_set SysTick_Handler,Default_Handler
|
|
||||||
|
|
||||||
.weak WWDG_IRQHandler
|
|
||||||
.thumb_set WWDG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak PVD_AVD_IRQHandler
|
|
||||||
.thumb_set PVD_AVD_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TAMP_STAMP_IRQHandler
|
|
||||||
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_WKUP_IRQHandler
|
|
||||||
.thumb_set RTC_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FLASH_IRQHandler
|
|
||||||
.thumb_set FLASH_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RCC_IRQHandler
|
|
||||||
.thumb_set RCC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI0_IRQHandler
|
|
||||||
.thumb_set EXTI0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI1_IRQHandler
|
|
||||||
.thumb_set EXTI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI2_IRQHandler
|
|
||||||
.thumb_set EXTI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI3_IRQHandler
|
|
||||||
.thumb_set EXTI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI4_IRQHandler
|
|
||||||
.thumb_set EXTI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ADC_IRQHandler
|
|
||||||
.thumb_set ADC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FDCAN1_IT0_IRQHandler
|
|
||||||
.thumb_set FDCAN1_IT0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FDCAN2_IT0_IRQHandler
|
|
||||||
.thumb_set FDCAN2_IT0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FDCAN1_IT1_IRQHandler
|
|
||||||
.thumb_set FDCAN1_IT1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FDCAN2_IT1_IRQHandler
|
|
||||||
.thumb_set FDCAN2_IT1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI9_5_IRQHandler
|
|
||||||
.thumb_set EXTI9_5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_BRK_IRQHandler
|
|
||||||
.thumb_set TIM1_BRK_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_UP_IRQHandler
|
|
||||||
.thumb_set TIM1_UP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_TRG_COM_IRQHandler
|
|
||||||
.thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM1_CC_IRQHandler
|
|
||||||
.thumb_set TIM1_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM2_IRQHandler
|
|
||||||
.thumb_set TIM2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM3_IRQHandler
|
|
||||||
.thumb_set TIM3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM4_IRQHandler
|
|
||||||
.thumb_set TIM4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_EV_IRQHandler
|
|
||||||
.thumb_set I2C1_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C1_ER_IRQHandler
|
|
||||||
.thumb_set I2C1_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_EV_IRQHandler
|
|
||||||
.thumb_set I2C2_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C2_ER_IRQHandler
|
|
||||||
.thumb_set I2C2_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI1_IRQHandler
|
|
||||||
.thumb_set SPI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI2_IRQHandler
|
|
||||||
.thumb_set SPI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART1_IRQHandler
|
|
||||||
.thumb_set USART1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART2_IRQHandler
|
|
||||||
.thumb_set USART2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART3_IRQHandler
|
|
||||||
.thumb_set USART3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak EXTI15_10_IRQHandler
|
|
||||||
.thumb_set EXTI15_10_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RTC_Alarm_IRQHandler
|
|
||||||
.thumb_set RTC_Alarm_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_BRK_TIM12_IRQHandler
|
|
||||||
.thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_UP_TIM13_IRQHandler
|
|
||||||
.thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_TRG_COM_TIM14_IRQHandler
|
|
||||||
.thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM8_CC_IRQHandler
|
|
||||||
.thumb_set TIM8_CC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA1_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FMC_IRQHandler
|
|
||||||
.thumb_set FMC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SDMMC1_IRQHandler
|
|
||||||
.thumb_set SDMMC1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM5_IRQHandler
|
|
||||||
.thumb_set TIM5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI3_IRQHandler
|
|
||||||
.thumb_set SPI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART4_IRQHandler
|
|
||||||
.thumb_set UART4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART5_IRQHandler
|
|
||||||
.thumb_set UART5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM6_DAC_IRQHandler
|
|
||||||
.thumb_set TIM6_DAC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM7_IRQHandler
|
|
||||||
.thumb_set TIM7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream0_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream1_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream2_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream3_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream4_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ETH_IRQHandler
|
|
||||||
.thumb_set ETH_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ETH_WKUP_IRQHandler
|
|
||||||
.thumb_set ETH_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FDCAN_CAL_IRQHandler
|
|
||||||
.thumb_set FDCAN_CAL_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream5_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream6_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2_Stream7_IRQHandler
|
|
||||||
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak USART6_IRQHandler
|
|
||||||
.thumb_set USART6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_EV_IRQHandler
|
|
||||||
.thumb_set I2C3_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C3_ER_IRQHandler
|
|
||||||
.thumb_set I2C3_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_EP1_OUT_IRQHandler
|
|
||||||
.thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_EP1_IN_IRQHandler
|
|
||||||
.thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_HS_IRQHandler
|
|
||||||
.thumb_set OTG_HS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DCMI_IRQHandler
|
|
||||||
.thumb_set DCMI_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak RNG_IRQHandler
|
|
||||||
.thumb_set RNG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak FPU_IRQHandler
|
|
||||||
.thumb_set FPU_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART7_IRQHandler
|
|
||||||
.thumb_set UART7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak UART8_IRQHandler
|
|
||||||
.thumb_set UART8_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI4_IRQHandler
|
|
||||||
.thumb_set SPI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI5_IRQHandler
|
|
||||||
.thumb_set SPI5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPI6_IRQHandler
|
|
||||||
.thumb_set SPI6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SAI1_IRQHandler
|
|
||||||
.thumb_set SAI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LTDC_IRQHandler
|
|
||||||
.thumb_set LTDC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LTDC_ER_IRQHandler
|
|
||||||
.thumb_set LTDC_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMA2D_IRQHandler
|
|
||||||
.thumb_set DMA2D_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SAI2_IRQHandler
|
|
||||||
.thumb_set SAI2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak QUADSPI_IRQHandler
|
|
||||||
.thumb_set QUADSPI_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LPTIM1_IRQHandler
|
|
||||||
.thumb_set LPTIM1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CEC_IRQHandler
|
|
||||||
.thumb_set CEC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C4_EV_IRQHandler
|
|
||||||
.thumb_set I2C4_EV_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak I2C4_ER_IRQHandler
|
|
||||||
.thumb_set I2C4_ER_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SPDIF_RX_IRQHandler
|
|
||||||
.thumb_set SPDIF_RX_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_EP1_OUT_IRQHandler
|
|
||||||
.thumb_set OTG_FS_EP1_OUT_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_EP1_IN_IRQHandler
|
|
||||||
.thumb_set OTG_FS_EP1_IN_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_WKUP_IRQHandler
|
|
||||||
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak OTG_FS_IRQHandler
|
|
||||||
.thumb_set OTG_FS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMAMUX1_OVR_IRQHandler
|
|
||||||
.thumb_set DMAMUX1_OVR_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HRTIM1_Master_IRQHandler
|
|
||||||
.thumb_set HRTIM1_Master_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HRTIM1_TIMA_IRQHandler
|
|
||||||
.thumb_set HRTIM1_TIMA_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HRTIM1_TIMB_IRQHandler
|
|
||||||
.thumb_set HRTIM1_TIMB_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HRTIM1_TIMC_IRQHandler
|
|
||||||
.thumb_set HRTIM1_TIMC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HRTIM1_TIMD_IRQHandler
|
|
||||||
.thumb_set HRTIM1_TIMD_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HRTIM1_TIME_IRQHandler
|
|
||||||
.thumb_set HRTIM1_TIME_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HRTIM1_FLT_IRQHandler
|
|
||||||
.thumb_set HRTIM1_FLT_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT0_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT1_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT2_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DFSDM1_FLT3_IRQHandler
|
|
||||||
.thumb_set DFSDM1_FLT3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SAI3_IRQHandler
|
|
||||||
.thumb_set SAI3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SWPMI1_IRQHandler
|
|
||||||
.thumb_set SWPMI1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM15_IRQHandler
|
|
||||||
.thumb_set TIM15_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM16_IRQHandler
|
|
||||||
.thumb_set TIM16_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak TIM17_IRQHandler
|
|
||||||
.thumb_set TIM17_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak MDIOS_WKUP_IRQHandler
|
|
||||||
.thumb_set MDIOS_WKUP_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak MDIOS_IRQHandler
|
|
||||||
.thumb_set MDIOS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak JPEG_IRQHandler
|
|
||||||
.thumb_set JPEG_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak MDMA_IRQHandler
|
|
||||||
.thumb_set MDMA_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SDMMC2_IRQHandler
|
|
||||||
.thumb_set SDMMC2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak HSEM1_IRQHandler
|
|
||||||
.thumb_set HSEM1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ADC3_IRQHandler
|
|
||||||
.thumb_set ADC3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak DMAMUX2_OVR_IRQHandler
|
|
||||||
.thumb_set DMAMUX2_OVR_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak BDMA_Channel0_IRQHandler
|
|
||||||
.thumb_set BDMA_Channel0_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak BDMA_Channel1_IRQHandler
|
|
||||||
.thumb_set BDMA_Channel1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak BDMA_Channel2_IRQHandler
|
|
||||||
.thumb_set BDMA_Channel2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak BDMA_Channel3_IRQHandler
|
|
||||||
.thumb_set BDMA_Channel3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak BDMA_Channel4_IRQHandler
|
|
||||||
.thumb_set BDMA_Channel4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak BDMA_Channel5_IRQHandler
|
|
||||||
.thumb_set BDMA_Channel5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak BDMA_Channel6_IRQHandler
|
|
||||||
.thumb_set BDMA_Channel6_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak BDMA_Channel7_IRQHandler
|
|
||||||
.thumb_set BDMA_Channel7_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak COMP1_IRQHandler
|
|
||||||
.thumb_set COMP1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LPTIM2_IRQHandler
|
|
||||||
.thumb_set LPTIM2_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LPTIM3_IRQHandler
|
|
||||||
.thumb_set LPTIM3_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LPTIM4_IRQHandler
|
|
||||||
.thumb_set LPTIM4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LPTIM5_IRQHandler
|
|
||||||
.thumb_set LPTIM5_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak LPUART1_IRQHandler
|
|
||||||
.thumb_set LPUART1_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak CRS_IRQHandler
|
|
||||||
.thumb_set CRS_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak ECC_IRQHandler
|
|
||||||
.thumb_set ECC_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak SAI4_IRQHandler
|
|
||||||
.thumb_set SAI4_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
.weak WAKEUP_PIN_IRQHandler
|
|
||||||
.thumb_set WAKEUP_PIN_IRQHandler,Default_Handler
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
@ -11,7 +11,7 @@ CIRCUITPY_NVM = 1
|
|||||||
|
|
||||||
MCU_SERIES = F4
|
MCU_SERIES = F4
|
||||||
MCU_VARIANT = STM32F411xE
|
MCU_VARIANT = STM32F411xE
|
||||||
MCU_PACKAGE = 48
|
MCU_PACKAGE = UFQFPN48
|
||||||
|
|
||||||
LD_FILE = boards/common_nvm.ld
|
LD_FILE = boards/common_nvm.ld
|
||||||
LD_FILE = boards/STM32F411_nvm.ld
|
LD_FILE = boards/STM32F411_nvm.ld
|
||||||
|
@ -34,8 +34,9 @@
|
|||||||
#include "supervisor/shared/translate.h"
|
#include "supervisor/shared/translate.h"
|
||||||
#include "common-hal/microcontroller/Pin.h"
|
#include "common-hal/microcontroller/Pin.h"
|
||||||
|
|
||||||
//arrays use 0 based numbering: I2C1 is stored at index 0
|
// Arrays use 0 based numbering: I2C1 is stored at index 0
|
||||||
#define MAX_I2C 3
|
#define MAX_I2C 4
|
||||||
|
|
||||||
STATIC bool reserved_i2c[MAX_I2C];
|
STATIC bool reserved_i2c[MAX_I2C];
|
||||||
STATIC bool never_reset_i2c[MAX_I2C];
|
STATIC bool never_reset_i2c[MAX_I2C];
|
||||||
|
|
||||||
@ -58,31 +59,37 @@ void i2c_reset(void) {
|
|||||||
void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
|
void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
|
||||||
const mcu_pin_obj_t* scl, const mcu_pin_obj_t* sda, uint32_t frequency, uint32_t timeout) {
|
const mcu_pin_obj_t* scl, const mcu_pin_obj_t* sda, uint32_t frequency, uint32_t timeout) {
|
||||||
|
|
||||||
//match pins to I2C objects
|
// Match pins to I2C objects
|
||||||
I2C_TypeDef * I2Cx;
|
I2C_TypeDef * I2Cx;
|
||||||
uint8_t sda_len = MP_ARRAY_SIZE(mcu_i2c_sda_list);
|
uint8_t sda_len = MP_ARRAY_SIZE(mcu_i2c_sda_list);
|
||||||
uint8_t scl_len = MP_ARRAY_SIZE(mcu_i2c_scl_list);
|
uint8_t scl_len = MP_ARRAY_SIZE(mcu_i2c_scl_list);
|
||||||
bool i2c_taken = false;
|
bool i2c_taken = false;
|
||||||
|
bool search_done = false;
|
||||||
|
|
||||||
for (uint i = 0; i < sda_len; i++) {
|
for (uint i = 0; i < sda_len; i++) {
|
||||||
if (mcu_i2c_sda_list[i].pin == sda) {
|
if (mcu_i2c_sda_list[i].pin == sda) {
|
||||||
for (uint j = 0; j < scl_len; j++) {
|
for (uint j = 0; j < scl_len; j++) {
|
||||||
if ((mcu_i2c_scl_list[j].pin == scl)
|
if ((mcu_i2c_scl_list[j].pin == scl)
|
||||||
&& (mcu_i2c_scl_list[j].periph_index == mcu_i2c_sda_list[i].periph_index)) {
|
&& (mcu_i2c_scl_list[j].periph_index == mcu_i2c_sda_list[i].periph_index)) {
|
||||||
//keep looking if the I2C is taken, could be another SCL that works
|
// Keep looking if the I2C is taken, could be another SCL that works
|
||||||
if (reserved_i2c[mcu_i2c_scl_list[i].periph_index - 1]) {
|
if (reserved_i2c[mcu_i2c_scl_list[j].periph_index - 1]) {
|
||||||
i2c_taken = true;
|
i2c_taken = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
self->scl = &mcu_i2c_scl_list[j];
|
self->scl = &mcu_i2c_scl_list[j];
|
||||||
self->sda = &mcu_i2c_sda_list[i];
|
self->sda = &mcu_i2c_sda_list[i];
|
||||||
|
// Multi-level break here, or it'll pick the highest numbered peripheral (inefficient)
|
||||||
|
search_done = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (search_done) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//handle typedef selection, errors
|
// Handle typedef selection, errors
|
||||||
if (self->sda != NULL && self->scl != NULL ) {
|
if (self->sda != NULL && self->scl != NULL ) {
|
||||||
I2Cx = mcu_i2c_banks[self->sda->periph_index - 1];
|
I2Cx = mcu_i2c_banks[self->sda->periph_index - 1];
|
||||||
} else {
|
} else {
|
||||||
@ -113,9 +120,15 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
|
|||||||
i2c_clock_enable(1 << (self->sda->periph_index - 1));
|
i2c_clock_enable(1 << (self->sda->periph_index - 1));
|
||||||
reserved_i2c[self->sda->periph_index - 1] = true;
|
reserved_i2c[self->sda->periph_index - 1] = true;
|
||||||
|
|
||||||
self->handle.Instance = I2Cx;
|
// Handle the HAL handle differences
|
||||||
|
#if (CPY_STM32H7 || CPY_STM32F7)
|
||||||
|
self->handle.Init.Timing = 0x40604E73; //Taken from STCube examples
|
||||||
|
#else
|
||||||
self->handle.Init.ClockSpeed = 100000;
|
self->handle.Init.ClockSpeed = 100000;
|
||||||
self->handle.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
self->handle.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
self->handle.Instance = I2Cx;
|
||||||
self->handle.Init.OwnAddress1 = 0;
|
self->handle.Init.OwnAddress1 = 0;
|
||||||
self->handle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
self->handle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
||||||
self->handle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
self->handle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
||||||
@ -228,6 +241,13 @@ STATIC void i2c_clock_enable(uint8_t mask) {
|
|||||||
__HAL_RCC_I2C3_RELEASE_RESET();
|
__HAL_RCC_I2C3_RELEASE_RESET();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef I2C4
|
||||||
|
if (mask & (1 << 3)) {
|
||||||
|
__HAL_RCC_I2C4_CLK_ENABLE();
|
||||||
|
__HAL_RCC_I2C4_FORCE_RESET();
|
||||||
|
__HAL_RCC_I2C4_RELEASE_RESET();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC void i2c_clock_disable(uint8_t mask) {
|
STATIC void i2c_clock_disable(uint8_t mask) {
|
||||||
@ -246,4 +266,9 @@ STATIC void i2c_clock_disable(uint8_t mask) {
|
|||||||
__HAL_RCC_I2C3_CLK_DISABLE();
|
__HAL_RCC_I2C3_CLK_DISABLE();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef I2C4
|
||||||
|
if (mask & (1 << 3)) {
|
||||||
|
__HAL_RCC_I2C4_CLK_DISABLE();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
|
|
||||||
//arrays use 0 based numbering: SPI1 is stored at index 0
|
//arrays use 0 based numbering: SPI1 is stored at index 0
|
||||||
#define MAX_SPI 6
|
#define MAX_SPI 6
|
||||||
|
|
||||||
STATIC bool reserved_spi[MAX_SPI];
|
STATIC bool reserved_spi[MAX_SPI];
|
||||||
STATIC bool never_reset_spi[MAX_SPI];
|
STATIC bool never_reset_spi[MAX_SPI];
|
||||||
|
|
||||||
@ -48,6 +49,15 @@ STATIC void spi_clock_enable(uint8_t mask);
|
|||||||
STATIC void spi_clock_disable(uint8_t mask);
|
STATIC void spi_clock_disable(uint8_t mask);
|
||||||
|
|
||||||
STATIC uint32_t get_busclock(SPI_TypeDef * instance) {
|
STATIC uint32_t get_busclock(SPI_TypeDef * instance) {
|
||||||
|
#if (CPY_STM32H7)
|
||||||
|
if (instance == SPI1 || instance == SPI2 || instance == SPI3) {
|
||||||
|
return HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SPI123);
|
||||||
|
} else if (instance == SPI4 || instance == SPI5) {
|
||||||
|
return HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SPI45);
|
||||||
|
} else {
|
||||||
|
return HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SPI6);
|
||||||
|
}
|
||||||
|
#elif (CPY_STM32F4 || CPY_STM32F7)
|
||||||
//SPI2 and 3 are on PCLK1, if they exist.
|
//SPI2 and 3 are on PCLK1, if they exist.
|
||||||
#ifdef SPI2
|
#ifdef SPI2
|
||||||
if (instance == SPI2) return HAL_RCC_GetPCLK1Freq();
|
if (instance == SPI2) return HAL_RCC_GetPCLK1Freq();
|
||||||
@ -56,6 +66,7 @@ STATIC uint32_t get_busclock(SPI_TypeDef * instance) {
|
|||||||
if (instance == SPI3) return HAL_RCC_GetPCLK1Freq();
|
if (instance == SPI3) return HAL_RCC_GetPCLK1Freq();
|
||||||
#endif
|
#endif
|
||||||
return HAL_RCC_GetPCLK2Freq();
|
return HAL_RCC_GetPCLK2Freq();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC uint32_t stm32_baud_to_spi_div(uint32_t baudrate, uint16_t * prescaler, uint32_t busclock) {
|
STATIC uint32_t stm32_baud_to_spi_div(uint32_t baudrate, uint16_t * prescaler, uint32_t busclock) {
|
||||||
@ -107,6 +118,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
|||||||
uint8_t mosi_len = MP_ARRAY_SIZE(mcu_spi_mosi_list);
|
uint8_t mosi_len = MP_ARRAY_SIZE(mcu_spi_mosi_list);
|
||||||
uint8_t miso_len = MP_ARRAY_SIZE(mcu_spi_miso_list);
|
uint8_t miso_len = MP_ARRAY_SIZE(mcu_spi_miso_list);
|
||||||
bool spi_taken = false;
|
bool spi_taken = false;
|
||||||
|
bool search_done = false;
|
||||||
|
|
||||||
//SCK is not optional. MOSI and MISO are
|
//SCK is not optional. MOSI and MISO are
|
||||||
for (uint i = 0; i < sck_len; i++) {
|
for (uint i = 0; i < sck_len; i++) {
|
||||||
@ -130,10 +142,19 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
|||||||
self->sck = &mcu_spi_sck_list[i];
|
self->sck = &mcu_spi_sck_list[i];
|
||||||
self->mosi = &mcu_spi_mosi_list[j];
|
self->mosi = &mcu_spi_mosi_list[j];
|
||||||
self->miso = &mcu_spi_miso_list[k];
|
self->miso = &mcu_spi_miso_list[k];
|
||||||
|
|
||||||
|
// Multi-level break to pick lowest peripheral
|
||||||
|
search_done = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (search_done) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (search_done) {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
// if just MISO, reduce search
|
// if just MISO, reduce search
|
||||||
} else if (miso != NULL) {
|
} else if (miso != NULL) {
|
||||||
@ -149,9 +170,15 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
|||||||
self->sck = &mcu_spi_sck_list[i];
|
self->sck = &mcu_spi_sck_list[i];
|
||||||
self->mosi = NULL;
|
self->mosi = NULL;
|
||||||
self->miso = &mcu_spi_miso_list[j];
|
self->miso = &mcu_spi_miso_list[j];
|
||||||
|
|
||||||
|
// Multi-level break to pick lowest peripheral
|
||||||
|
search_done = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (search_done) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
// if just MOSI, reduce search
|
// if just MOSI, reduce search
|
||||||
} else if (mosi != NULL) {
|
} else if (mosi != NULL) {
|
||||||
for (uint j = 0; j < mosi_len; j++) {
|
for (uint j = 0; j < mosi_len; j++) {
|
||||||
@ -166,9 +193,15 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
|||||||
self->sck = &mcu_spi_sck_list[i];
|
self->sck = &mcu_spi_sck_list[i];
|
||||||
self->mosi = &mcu_spi_mosi_list[j];
|
self->mosi = &mcu_spi_mosi_list[j];
|
||||||
self->miso = NULL;
|
self->miso = NULL;
|
||||||
|
|
||||||
|
// Multi-level break to pick lowest peripheral
|
||||||
|
search_done = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (search_done) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
//throw an error immediately
|
//throw an error immediately
|
||||||
mp_raise_ValueError(translate("Must provide MISO or MOSI pin"));
|
mp_raise_ValueError(translate("Must provide MISO or MOSI pin"));
|
||||||
@ -222,7 +255,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
|||||||
self->handle.Instance = SPIx;
|
self->handle.Instance = SPIx;
|
||||||
self->handle.Init.Mode = SPI_MODE_MASTER;
|
self->handle.Init.Mode = SPI_MODE_MASTER;
|
||||||
// Direction change only required for RX-only, see RefMan RM0090:884
|
// Direction change only required for RX-only, see RefMan RM0090:884
|
||||||
self->handle.Init.Direction = (self->mosi == NULL) ? SPI_CR1_RXONLY : SPI_DIRECTION_2LINES;
|
self->handle.Init.Direction = (self->mosi == NULL) ? SPI_DIRECTION_2LINES_RXONLY : SPI_DIRECTION_2LINES;
|
||||||
self->handle.Init.DataSize = SPI_DATASIZE_8BIT;
|
self->handle.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||||
self->handle.Init.CLKPolarity = SPI_POLARITY_LOW;
|
self->handle.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||||
self->handle.Init.CLKPhase = SPI_PHASE_1EDGE;
|
self->handle.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||||
|
@ -84,6 +84,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
|||||||
uint8_t rx_len = MP_ARRAY_SIZE(mcu_uart_rx_list);
|
uint8_t rx_len = MP_ARRAY_SIZE(mcu_uart_rx_list);
|
||||||
bool uart_taken = false;
|
bool uart_taken = false;
|
||||||
uint8_t periph_index = 0; //origin 0 corrected
|
uint8_t periph_index = 0; //origin 0 corrected
|
||||||
|
bool search_done = false;
|
||||||
|
|
||||||
if ((rts != NULL) || (cts != NULL) || (rs485_dir != NULL) || (rs485_invert == true)) {
|
if ((rts != NULL) || (cts != NULL) || (rs485_dir != NULL) || (rs485_invert == true)) {
|
||||||
mp_raise_ValueError(translate("RTS/CTS/RS485 Not yet supported on this device"));
|
mp_raise_ValueError(translate("RTS/CTS/RS485 Not yet supported on this device"));
|
||||||
@ -106,9 +107,15 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
|||||||
//store pins if not
|
//store pins if not
|
||||||
self->tx = &mcu_uart_tx_list[i];
|
self->tx = &mcu_uart_tx_list[i];
|
||||||
self->rx = &mcu_uart_rx_list[j];
|
self->rx = &mcu_uart_rx_list[j];
|
||||||
|
|
||||||
|
// Multi-level break to pick lowest peripheral
|
||||||
|
search_done = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (search_done) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
periph_index = self->tx->periph_index - 1;
|
periph_index = self->tx->periph_index - 1;
|
||||||
@ -125,6 +132,9 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
|||||||
}
|
}
|
||||||
//store pins if not
|
//store pins if not
|
||||||
self->rx = &mcu_uart_rx_list[i];
|
self->rx = &mcu_uart_rx_list[i];
|
||||||
|
|
||||||
|
// Multi-level break to pick lowest peripheral
|
||||||
|
search_done = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,6 +152,9 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
|||||||
}
|
}
|
||||||
//store pins if not
|
//store pins if not
|
||||||
self->tx = &mcu_uart_tx_list[i];
|
self->tx = &mcu_uart_tx_list[i];
|
||||||
|
|
||||||
|
// Multi-level break to pick lowest peripheral
|
||||||
|
search_done = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,12 +29,12 @@
|
|||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
#include "supervisor/shared/translate.h"
|
#include "supervisor/shared/translate.h"
|
||||||
|
|
||||||
//TODO: rework this module to use HAL only
|
// The HAL is sparse on obtaining register information, so we use the LLs here.
|
||||||
#ifdef STM32H743xx
|
#if (CPY_STM32H7)
|
||||||
#include "stm32h7xx_ll_gpio.h"
|
#include "stm32h7xx_ll_gpio.h"
|
||||||
#elif STM32F767xx
|
#elif (CPY_STM32F7)
|
||||||
#include "stm32f7xx_ll_gpio.h"
|
#include "stm32f7xx_ll_gpio.h"
|
||||||
#else
|
#elif (CPY_STM32F4)
|
||||||
#include "stm32f4xx_ll_gpio.h"
|
#include "stm32f4xx_ll_gpio.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -152,7 +152,6 @@ void common_hal_digitalio_digitalinout_set_pull(
|
|||||||
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(
|
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(
|
||||||
digitalio_digitalinout_obj_t *self) {
|
digitalio_digitalinout_obj_t *self) {
|
||||||
|
|
||||||
|
|
||||||
switch (LL_GPIO_GetPinPull(pin_port(self->pin->port), pin_mask(self->pin->number))) {
|
switch (LL_GPIO_GetPinPull(pin_port(self->pin->port), pin_mask(self->pin->number))) {
|
||||||
case LL_GPIO_PULL_UP:
|
case LL_GPIO_PULL_UP:
|
||||||
return PULL_UP;
|
return PULL_UP;
|
||||||
|
@ -47,6 +47,24 @@ extern uint8_t _ld_default_stack_size;
|
|||||||
// The STM32 HAL file is included virtually everywhere:
|
// The STM32 HAL file is included virtually everywhere:
|
||||||
#include STM32_HAL_H
|
#include STM32_HAL_H
|
||||||
|
|
||||||
|
// These prevent you from accidentally omitting a python file that links mpconfigport
|
||||||
|
// and having a file accept a lack of chip family as an option.
|
||||||
|
#if defined(STM32F4)
|
||||||
|
#define CPY_STM32F4 1
|
||||||
|
#define CPY_STM32F7 0
|
||||||
|
#define CPY_STM32H7 0
|
||||||
|
#elif defined(STM32F7)
|
||||||
|
#define CPY_STM32F4 0
|
||||||
|
#define CPY_STM32F7 1
|
||||||
|
#define CPY_STM32H7 0
|
||||||
|
#elif defined(STM32H7)
|
||||||
|
#define CPY_STM32F4 0
|
||||||
|
#define CPY_STM32F7 0
|
||||||
|
#define CPY_STM32H7 1
|
||||||
|
#else
|
||||||
|
#error undefined processor
|
||||||
|
#endif
|
||||||
|
|
||||||
// Board flags:
|
// Board flags:
|
||||||
#ifndef BOARD_OVERWRITE_SWD
|
#ifndef BOARD_OVERWRITE_SWD
|
||||||
#define BOARD_OVERWRITE_SWD (0)
|
#define BOARD_OVERWRITE_SWD (0)
|
||||||
|
@ -78,7 +78,7 @@ ifeq ($(MCU_SERIES), H7)
|
|||||||
CIRCUITPY_DIGITALIO = 1
|
CIRCUITPY_DIGITALIO = 1
|
||||||
CIRCUITPY_ANALOGIO = 0
|
CIRCUITPY_ANALOGIO = 0
|
||||||
CIRCUITPY_MICROCONTROLLER = 1
|
CIRCUITPY_MICROCONTROLLER = 1
|
||||||
CIRCUITPY_BUSIO = 0
|
CIRCUITPY_BUSIO = 1
|
||||||
CIRCUITPY_PULSEIO = 0
|
CIRCUITPY_PULSEIO = 0
|
||||||
CIRCUITPY_OS = 0
|
CIRCUITPY_OS = 0
|
||||||
CIRCUITPY_STORAGE = 0
|
CIRCUITPY_STORAGE = 0
|
||||||
@ -94,7 +94,7 @@ ifeq ($(MCU_SERIES), F7)
|
|||||||
CIRCUITPY_DIGITALIO = 1
|
CIRCUITPY_DIGITALIO = 1
|
||||||
CIRCUITPY_ANALOGIO = 0
|
CIRCUITPY_ANALOGIO = 0
|
||||||
CIRCUITPY_MICROCONTROLLER = 1
|
CIRCUITPY_MICROCONTROLLER = 1
|
||||||
CIRCUITPY_BUSIO = 0
|
CIRCUITPY_BUSIO = 1
|
||||||
CIRCUITPY_PULSEIO = 0
|
CIRCUITPY_PULSEIO = 0
|
||||||
CIRCUITPY_OS = 0
|
CIRCUITPY_OS = 0
|
||||||
CIRCUITPY_STORAGE = 0
|
CIRCUITPY_STORAGE = 0
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#include "peripherals/gpio.h"
|
#include "peripherals/gpio.h"
|
||||||
#include "common-hal/microcontroller/Pin.h"
|
#include "common-hal/microcontroller/Pin.h"
|
||||||
|
|
||||||
void stm32f4_peripherals_gpio_init(void) {
|
void stm32_peripherals_gpio_init(void) {
|
||||||
//Enable all GPIO for now
|
//Enable all GPIO for now
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
|
|
||||||
void stm32_peripherals_gpio_init(void) {
|
void stm32_peripherals_gpio_init(void) {
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
||||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||||||
|
@ -44,7 +44,7 @@ void stm32_peripherals_clocks_init(void) {
|
|||||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
RCC_OscInitStruct.PLL.PLLM = HSE_VALUE/1000000;
|
RCC_OscInitStruct.PLL.PLLM = BOARD_OSC_DIV;
|
||||||
RCC_OscInitStruct.PLL.PLLN = 432;
|
RCC_OscInitStruct.PLL.PLLN = 432;
|
||||||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||||||
RCC_OscInitStruct.PLL.PLLQ = 9;
|
RCC_OscInitStruct.PLL.PLLQ = 9;
|
||||||
|
@ -43,7 +43,7 @@ void stm32_peripherals_clocks_init(void) {
|
|||||||
RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
|
RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
|
||||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
RCC_OscInitStruct.PLL.PLLM = HSE_VALUE/1000000;
|
RCC_OscInitStruct.PLL.PLLM = BOARD_OSC_DIV;
|
||||||
RCC_OscInitStruct.PLL.PLLN = 336;
|
RCC_OscInitStruct.PLL.PLLN = 336;
|
||||||
RCC_OscInitStruct.PLL.PLLP = 2;
|
RCC_OscInitStruct.PLL.PLLP = 2;
|
||||||
RCC_OscInitStruct.PLL.PLLQ = 7;
|
RCC_OscInitStruct.PLL.PLLQ = 7;
|
||||||
|
@ -40,8 +40,9 @@
|
|||||||
|
|
||||||
#ifdef STM32F411xE
|
#ifdef STM32F411xE
|
||||||
#define STM32_FLASH_SIZE 0x80000 //512KiB
|
#define STM32_FLASH_SIZE 0x80000 //512KiB
|
||||||
#ifdef CIRCUITPY_NVM
|
#if CIRCUITPY_NVM
|
||||||
#define INTERNAL_FLASH_FILESYSTEM_SIZE 0x8000 //32KiB
|
#define INTERNAL_FLASH_FILESYSTEM_SIZE 0x8000 //32KiB
|
||||||
|
#define INTERNAL_FLASH_FILESYSTEM_START_ADDR 0x08004000
|
||||||
#else
|
#else
|
||||||
#define INTERNAL_FLASH_FILESYSTEM_SIZE 0xC000 //48KiB
|
#define INTERNAL_FLASH_FILESYSTEM_SIZE 0xC000 //48KiB
|
||||||
#define INTERNAL_FLASH_FILESYSTEM_START_ADDR 0x08004000
|
#define INTERNAL_FLASH_FILESYSTEM_START_ADDR 0x08004000
|
||||||
|
@ -31,11 +31,11 @@
|
|||||||
#include "tick.h"
|
#include "tick.h"
|
||||||
|
|
||||||
#include "common-hal/microcontroller/Pin.h"
|
#include "common-hal/microcontroller/Pin.h"
|
||||||
|
|
||||||
#if defined(STM32F4)
|
|
||||||
#include "common-hal/busio/I2C.h"
|
#include "common-hal/busio/I2C.h"
|
||||||
#include "common-hal/busio/SPI.h"
|
#include "common-hal/busio/SPI.h"
|
||||||
#include "common-hal/busio/UART.h"
|
#include "common-hal/busio/UART.h"
|
||||||
|
|
||||||
|
#if defined(STM32F4)
|
||||||
#include "common-hal/pulseio/PWMOut.h"
|
#include "common-hal/pulseio/PWMOut.h"
|
||||||
#include "common-hal/pulseio/PulseOut.h"
|
#include "common-hal/pulseio/PulseOut.h"
|
||||||
#include "common-hal/pulseio/PulseIn.h"
|
#include "common-hal/pulseio/PulseIn.h"
|
||||||
@ -187,12 +187,13 @@ safe_mode_t port_init(void) {
|
|||||||
|
|
||||||
void reset_port(void) {
|
void reset_port(void) {
|
||||||
reset_all_pins();
|
reset_all_pins();
|
||||||
|
|
||||||
// TODO: it'd be nice if this was more automatic
|
|
||||||
#if defined(STM32F4)
|
|
||||||
i2c_reset();
|
i2c_reset();
|
||||||
spi_reset();
|
spi_reset();
|
||||||
uart_reset();
|
uart_reset();
|
||||||
|
|
||||||
|
// TODO: it'd be nice if this was more automatic
|
||||||
|
#if defined(STM32F4)
|
||||||
|
|
||||||
pwmout_reset();
|
pwmout_reset();
|
||||||
pulseout_reset();
|
pulseout_reset();
|
||||||
pulsein_reset();
|
pulsein_reset();
|
||||||
|
Loading…
Reference in New Issue
Block a user