|
@@ -1,273 +1,294 @@
|
|
|
- .syntax unified
|
|
|
|
|
- .cpu cortex-m4
|
|
|
|
|
- .fpu softvfp
|
|
|
|
|
- .thumb
|
|
|
|
|
-
|
|
|
|
|
-.global g_pfnVectors
|
|
|
|
|
-.global HardFault_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:
|
|
|
|
|
- movs r0, #0
|
|
|
|
|
- movs r1, #0
|
|
|
|
|
- movs r2, #0
|
|
|
|
|
- movs r3, #0
|
|
|
|
|
- movs r4, #0
|
|
|
|
|
- movs r5, #0
|
|
|
|
|
- movs r6, #0
|
|
|
|
|
- movs r7, #0
|
|
|
|
|
-
|
|
|
|
|
- LDR R0, =g_pfnVectors
|
|
|
|
|
- LDR R1, =0xE000ED08
|
|
|
|
|
- STR R0,[R1]
|
|
|
|
|
- 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 ISR_GlobalHandler /* Window WatchDog */
|
|
|
|
|
- .word ISR_GlobalHandler /* PVD through EXTI Line detection */
|
|
|
|
|
- .word ISR_GlobalHandler /* Tamper and TimeStamps through the EXTI line */
|
|
|
|
|
- .word ISR_GlobalHandler /* RTC Wakeup through the EXTI line */
|
|
|
|
|
- .word ISR_GlobalHandler /* FLASH */
|
|
|
|
|
- .word ISR_GlobalHandler /* RCC */
|
|
|
|
|
- .word ISR_GlobalHandler /* EXTI Line0 */
|
|
|
|
|
- .word ISR_GlobalHandler /* EXTI Line1 */
|
|
|
|
|
- .word ISR_GlobalHandler /* EXTI Line2 */
|
|
|
|
|
- .word ISR_GlobalHandler /* EXTI Line3 */
|
|
|
|
|
- .word ISR_GlobalHandler /* EXTI Line4 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA1 Stream 0 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA1 Stream 1 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA1 Stream 2 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA1 Stream 3 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA1 Stream 4 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA1 Stream 5 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA1 Stream 6 */
|
|
|
|
|
- .word ISR_GlobalHandler /* ADC1, ADC2 and ADC3s */
|
|
|
|
|
- .word ISR_GlobalHandler /* CAN1 TX */
|
|
|
|
|
- .word ISR_GlobalHandler /* CAN1 RX0 */
|
|
|
|
|
- .word ISR_GlobalHandler /* CAN1 RX1 */
|
|
|
|
|
- .word ISR_GlobalHandler /* CAN1 SCE */
|
|
|
|
|
- .word ISR_GlobalHandler /* External Line[9:5]s */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM1 Break and TIM9 */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM1 Update and TIM10 */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM1 Trigger and Commutation and TIM11 */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM1 Capture Compare */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM2 */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM3 */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM4 */
|
|
|
|
|
- .word ISR_GlobalHandler /* I2C1 Event */
|
|
|
|
|
- .word ISR_GlobalHandler /* I2C1 Error */
|
|
|
|
|
- .word ISR_GlobalHandler /* I2C2 Event */
|
|
|
|
|
- .word ISR_GlobalHandler /* I2C2 Error */
|
|
|
|
|
- .word ISR_GlobalHandler /* SPI1 */
|
|
|
|
|
- .word ISR_GlobalHandler /* SPI2 */
|
|
|
|
|
- .word ISR_GlobalHandler /* USART1 */
|
|
|
|
|
- .word ISR_GlobalHandler /* USART2 */
|
|
|
|
|
- .word ISR_GlobalHandler /* USART3 */
|
|
|
|
|
- .word ISR_GlobalHandler /* External Line[15:10]s */
|
|
|
|
|
- .word ISR_GlobalHandler /* RTC Alarm (A and B) through EXTI Line */
|
|
|
|
|
- .word ISR_GlobalHandler /* USB OTG FS Wakeup through EXTI line */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM8 Break and TIM12 */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM8 Update and TIM13 */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM8 Trigger and Commutation and TIM14 */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM8 Capture Compare */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA1 Stream7 */
|
|
|
|
|
- .word ISR_GlobalHandler /* FSMC */
|
|
|
|
|
- .word ISR_GlobalHandler /* SDIO */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM5 */
|
|
|
|
|
- .word ISR_GlobalHandler /* SPI3 */
|
|
|
|
|
- .word ISR_GlobalHandler /* UART4 */
|
|
|
|
|
- .word ISR_GlobalHandler /* UART5 */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM6 and DAC1&2 underrun errors */
|
|
|
|
|
- .word ISR_GlobalHandler /* TIM7 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA2 Stream 0 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA2 Stream 1 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA2 Stream 2 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA2 Stream 3 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA2 Stream 4 */
|
|
|
|
|
- .word ISR_GlobalHandler /* Ethernet */
|
|
|
|
|
- .word ISR_GlobalHandler /* Ethernet Wakeup through EXTI line */
|
|
|
|
|
- .word ISR_GlobalHandler /* CAN2 TX */
|
|
|
|
|
- .word ISR_GlobalHandler /* CAN2 RX0 */
|
|
|
|
|
- .word ISR_GlobalHandler /* CAN2 RX1 */
|
|
|
|
|
- .word ISR_GlobalHandler /* CAN2 SCE */
|
|
|
|
|
- .word ISR_GlobalHandler /* USB OTG FS */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA2 Stream 5 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA2 Stream 6 */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA2 Stream 7 */
|
|
|
|
|
- .word ISR_GlobalHandler /* USART6 */
|
|
|
|
|
- .word ISR_GlobalHandler /* I2C3 event */
|
|
|
|
|
- .word ISR_GlobalHandler /* I2C3 error */
|
|
|
|
|
- .word ISR_GlobalHandler /* USB OTG HS End Point 1 Out */
|
|
|
|
|
- .word ISR_GlobalHandler /* USB OTG HS End Point 1 In */
|
|
|
|
|
- .word ISR_GlobalHandler /* USB OTG HS Wakeup through EXTI */
|
|
|
|
|
- .word ISR_GlobalHandler /* USB OTG HS */
|
|
|
|
|
- .word ISR_GlobalHandler /* DCMI */
|
|
|
|
|
- .word ISR_GlobalHandler /* CRYP crypto */
|
|
|
|
|
- .word ISR_GlobalHandler /* Hash and Rng */
|
|
|
|
|
- .word ISR_GlobalHandler /* FPU */
|
|
|
|
|
- .word ISR_GlobalHandler /* UART7 */
|
|
|
|
|
- .word ISR_GlobalHandler /* UART8 */
|
|
|
|
|
- .word ISR_GlobalHandler /* SPI4 */
|
|
|
|
|
- .word ISR_GlobalHandler /* SPI5 */
|
|
|
|
|
- .word ISR_GlobalHandler /* SPI6 */
|
|
|
|
|
- .word ISR_GlobalHandler /* SAI1 */
|
|
|
|
|
- .word ISR_GlobalHandler /* LTDC_IRQHandler */
|
|
|
|
|
- .word ISR_GlobalHandler /* LTDC_ER_IRQHandler */
|
|
|
|
|
- .word ISR_GlobalHandler /* DMA2D
|
|
|
|
|
-
|
|
|
|
|
-/*******************************************************************************
|
|
|
|
|
-*
|
|
|
|
|
-* 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
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- .section .text.CmTrace_Handler
|
|
|
|
|
- .type CmTrace_Handler, %function
|
|
|
|
|
-CmTrace_Handler:
|
|
|
|
|
- MOV r0, lr /* get lr */
|
|
|
|
|
- MOV r1, sp /* get stack pointer (current is MSP) */
|
|
|
|
|
- BL cm_backtrace_fault
|
|
|
|
|
-Fault_Loop:
|
|
|
|
|
- BL Fault_Loop /* while(1) */
|
|
|
|
|
-
|
|
|
|
|
- .weak NMI_Handler
|
|
|
|
|
- .thumb_set NMI_Handler,CmTrace_Handler
|
|
|
|
|
-
|
|
|
|
|
- .weak HardFault_Handler
|
|
|
|
|
- .thumb_set HardFault_Handler,CmTrace_Handler
|
|
|
|
|
-
|
|
|
|
|
- .weak MemManage_Handler
|
|
|
|
|
- .thumb_set MemManage_Handler,CmTrace_Handler
|
|
|
|
|
-
|
|
|
|
|
- .weak BusFault_Handler
|
|
|
|
|
- .thumb_set BusFault_Handler,CmTrace_Handler
|
|
|
|
|
-
|
|
|
|
|
- .weak UsageFault_Handler
|
|
|
|
|
- .thumb_set UsageFault_Handler,CmTrace_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 ISR_GlobalHandler
|
|
|
|
|
- .thumb_set ISR_GlobalHandler,Default_Handler
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
|
|
|
|
|
+/*
|
|
|
|
|
+ * Copyright (c) 2022 OpenLuat & AirM2M
|
|
|
|
|
+ *
|
|
|
|
|
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
|
|
|
+ * this software and associated documentation files (the "Software"), to deal in
|
|
|
|
|
+ * the Software without restriction, including without limitation the rights to
|
|
|
|
|
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
|
|
|
+ * the Software, and to permit persons to whom the Software is furnished to do so,
|
|
|
|
|
+ * subject to the following conditions:
|
|
|
|
|
+ *
|
|
|
|
|
+ * The above copyright notice and this permission notice shall be included in all
|
|
|
|
|
+ * copies or substantial portions of the Software.
|
|
|
|
|
+ *
|
|
|
|
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
|
|
|
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
|
|
|
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
|
|
|
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
|
|
|
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+ .syntax unified
|
|
|
|
|
+ .cpu cortex-m4
|
|
|
|
|
+ .fpu softvfp
|
|
|
|
|
+ .thumb
|
|
|
|
|
+
|
|
|
|
|
+.global g_pfnVectors
|
|
|
|
|
+.global HardFault_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:
|
|
|
|
|
+ movs r0, #0
|
|
|
|
|
+ movs r1, #0
|
|
|
|
|
+ movs r2, #0
|
|
|
|
|
+ movs r3, #0
|
|
|
|
|
+ movs r4, #0
|
|
|
|
|
+ movs r5, #0
|
|
|
|
|
+ movs r6, #0
|
|
|
|
|
+ movs r7, #0
|
|
|
|
|
+
|
|
|
|
|
+ LDR R0, =g_pfnVectors
|
|
|
|
|
+ LDR R1, =0xE000ED08
|
|
|
|
|
+ STR R0,[R1]
|
|
|
|
|
+ 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 ISR_GlobalHandler /* Window WatchDog */
|
|
|
|
|
+ .word ISR_GlobalHandler /* PVD through EXTI Line detection */
|
|
|
|
|
+ .word ISR_GlobalHandler /* Tamper and TimeStamps through the EXTI line */
|
|
|
|
|
+ .word ISR_GlobalHandler /* RTC Wakeup through the EXTI line */
|
|
|
|
|
+ .word ISR_GlobalHandler /* FLASH */
|
|
|
|
|
+ .word ISR_GlobalHandler /* RCC */
|
|
|
|
|
+ .word ISR_GlobalHandler /* EXTI Line0 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* EXTI Line1 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* EXTI Line2 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* EXTI Line3 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* EXTI Line4 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA1 Stream 0 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA1 Stream 1 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA1 Stream 2 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA1 Stream 3 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA1 Stream 4 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA1 Stream 5 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA1 Stream 6 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* ADC1, ADC2 and ADC3s */
|
|
|
|
|
+ .word ISR_GlobalHandler /* CAN1 TX */
|
|
|
|
|
+ .word ISR_GlobalHandler /* CAN1 RX0 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* CAN1 RX1 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* CAN1 SCE */
|
|
|
|
|
+ .word ISR_GlobalHandler /* External Line[9:5]s */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM1 Break and TIM9 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM1 Update and TIM10 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM1 Trigger and Commutation and TIM11 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM1 Capture Compare */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM2 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM3 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM4 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* I2C1 Event */
|
|
|
|
|
+ .word ISR_GlobalHandler /* I2C1 Error */
|
|
|
|
|
+ .word ISR_GlobalHandler /* I2C2 Event */
|
|
|
|
|
+ .word ISR_GlobalHandler /* I2C2 Error */
|
|
|
|
|
+ .word ISR_GlobalHandler /* SPI1 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* SPI2 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USART1 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USART2 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USART3 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* External Line[15:10]s */
|
|
|
|
|
+ .word ISR_GlobalHandler /* RTC Alarm (A and B) through EXTI Line */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USB OTG FS Wakeup through EXTI line */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM8 Break and TIM12 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM8 Update and TIM13 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM8 Trigger and Commutation and TIM14 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM8 Capture Compare */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA1 Stream7 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* FSMC */
|
|
|
|
|
+ .word ISR_GlobalHandler /* SDIO */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM5 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* SPI3 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* UART4 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* UART5 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM6 and DAC1&2 underrun errors */
|
|
|
|
|
+ .word ISR_GlobalHandler /* TIM7 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA2 Stream 0 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA2 Stream 1 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA2 Stream 2 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA2 Stream 3 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA2 Stream 4 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* Ethernet */
|
|
|
|
|
+ .word ISR_GlobalHandler /* Ethernet Wakeup through EXTI line */
|
|
|
|
|
+ .word ISR_GlobalHandler /* CAN2 TX */
|
|
|
|
|
+ .word ISR_GlobalHandler /* CAN2 RX0 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* CAN2 RX1 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* CAN2 SCE */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USB OTG FS */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA2 Stream 5 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA2 Stream 6 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA2 Stream 7 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USART6 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* I2C3 event */
|
|
|
|
|
+ .word ISR_GlobalHandler /* I2C3 error */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USB OTG HS End Point 1 Out */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USB OTG HS End Point 1 In */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USB OTG HS Wakeup through EXTI */
|
|
|
|
|
+ .word ISR_GlobalHandler /* USB OTG HS */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DCMI */
|
|
|
|
|
+ .word ISR_GlobalHandler /* CRYP crypto */
|
|
|
|
|
+ .word ISR_GlobalHandler /* Hash and Rng */
|
|
|
|
|
+ .word ISR_GlobalHandler /* FPU */
|
|
|
|
|
+ .word ISR_GlobalHandler /* UART7 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* UART8 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* SPI4 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* SPI5 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* SPI6 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* SAI1 */
|
|
|
|
|
+ .word ISR_GlobalHandler /* LTDC_IRQHandler */
|
|
|
|
|
+ .word ISR_GlobalHandler /* LTDC_ER_IRQHandler */
|
|
|
|
|
+ .word ISR_GlobalHandler /* DMA2D
|
|
|
|
|
+
|
|
|
|
|
+/*******************************************************************************
|
|
|
|
|
+*
|
|
|
|
|
+* 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
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ .section .text.CmTrace_Handler
|
|
|
|
|
+ .type CmTrace_Handler, %function
|
|
|
|
|
+CmTrace_Handler:
|
|
|
|
|
+ MOV r0, lr /* get lr */
|
|
|
|
|
+ MOV r1, sp /* get stack pointer (current is MSP) */
|
|
|
|
|
+ BL cm_backtrace_fault
|
|
|
|
|
+Fault_Loop:
|
|
|
|
|
+ BL Fault_Loop /* while(1) */
|
|
|
|
|
+
|
|
|
|
|
+ .weak NMI_Handler
|
|
|
|
|
+ .thumb_set NMI_Handler,CmTrace_Handler
|
|
|
|
|
+
|
|
|
|
|
+ .weak HardFault_Handler
|
|
|
|
|
+ .thumb_set HardFault_Handler,CmTrace_Handler
|
|
|
|
|
+
|
|
|
|
|
+ .weak MemManage_Handler
|
|
|
|
|
+ .thumb_set MemManage_Handler,CmTrace_Handler
|
|
|
|
|
+
|
|
|
|
|
+ .weak BusFault_Handler
|
|
|
|
|
+ .thumb_set BusFault_Handler,CmTrace_Handler
|
|
|
|
|
+
|
|
|
|
|
+ .weak UsageFault_Handler
|
|
|
|
|
+ .thumb_set UsageFault_Handler,CmTrace_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 ISR_GlobalHandler
|
|
|
|
|
+ .thumb_set ISR_GlobalHandler,Default_Handler
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|