| /***************************************************************************** | |
| * Copyright (c) 2007 Rowley Associates Limited. * | |
| * * | |
| * This file may be distributed under the terms of the License Agreement * | |
| * provided with this software. * | |
| * * | |
| * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE * | |
| * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * | |
| *****************************************************************************/ | |
| /***************************************************************************** | |
| * Preprocessor Definitions | |
| * ------------------------ | |
| * | |
| * STARTUP_FROM_RESET | |
| * | |
| * If defined, the program will startup from power-on/reset. If not defined | |
| * the program will just loop endlessly from power-on/reset. | |
| * | |
| * This definition is not defined by default on this target because the | |
| * debugger is unable to reset this target and maintain control of it over the | |
| * JTAG interface. The advantage of doing this is that it allows the debugger | |
| * to reset the CPU and run programs from a known reset CPU state on each run. | |
| * It also acts as a safety net if you accidently download a program in FLASH | |
| * that crashes and prevents the debugger from taking control over JTAG | |
| * rendering the target unusable over JTAG. The obvious disadvantage of doing | |
| * this is that your application will not startup without the debugger. | |
| * | |
| * We advise that on this target you keep STARTUP_FROM_RESET undefined whilst | |
| * you are developing and only define STARTUP_FROM_RESET when development is | |
| * complete. | |
| * | |
| *****************************************************************************/ | |
| .global reset_handler | |
| .section .vectors, "ax" | |
| .code 16 | |
| .align 0 | |
| .global _vectors | |
| .macro DEFAULT_ISR_HANDLER name= | |
| .thumb_func | |
| .weak \name | |
| \name: | |
| 1: b 1b /* endless loop */ | |
| .endm | |
| .extern xPortPendSVHandler | |
| .extern xPortSysTickHandler | |
| .extern vPortSVCHandler | |
| .extern vMAC_ISR; | |
| _vectors: | |
| .word __stack_end__ | |
| #ifdef STARTUP_FROM_RESET | |
| .word reset_handler | |
| #else | |
| .word reset_wait | |
| #endif /* STARTUP_FROM_RESET */ | |
| .word NMIException | |
| .word HardFaultException | |
| .word MemManageException | |
| .word BusFaultException | |
| .word UsageFaultException | |
| .word 0 // Reserved | |
| .word 0 // Reserved | |
| .word 0 // Reserved | |
| .word 0 // Reserved | |
| .word vPortSVCHandler | |
| .word DebugMonitor | |
| .word 0 // Reserved | |
| .word xPortPendSVHandler | |
| .word xPortSysTickHandler | |
| .word WWDG_IRQHandler | |
| .word PVD_IRQHandler | |
| .word TAMPER_IRQHandler | |
| .word RTC_IRQHandler | |
| .word FLASH_IRQHandler | |
| .word RCC_IRQHandler | |
| .word EXTI0_IRQHandler | |
| .word EXTI1_IRQHandler | |
| .word EXTI2_IRQHandler | |
| .word EXTI3_IRQHandler | |
| .word EXTI4_IRQHandler | |
| .word DMAChannel1_IRQHandler | |
| .word DMAChannel2_IRQHandler | |
| .word DMAChannel3_IRQHandler | |
| .word DMAChannel4_IRQHandler | |
| .word DMAChannel5_IRQHandler | |
| .word DMAChannel6_IRQHandler | |
| .word DMAChannel7_IRQHandler | |
| .word ADC_IRQHandler | |
| .word USB_HP_CAN_TX_IRQHandler | |
| .word USB_LP_CAN_RX0_IRQHandler | |
| .word CAN_RX1_IRQHandler | |
| .word CAN_SCE_IRQHandler | |
| .word EXTI9_5_IRQHandler | |
| .word TIM1_BRK_IRQHandler | |
| .word TIM1_UP_IRQHandler | |
| .word TIM1_TRG_COM_IRQHandler | |
| .word TIM1_CC_IRQHandler | |
| .word TIM2_IRQHandler | |
| .word TIM3_IRQHandler | |
| .word TIM4_IRQHandler | |
| .word I2C1_EV_IRQHandler | |
| .word I2C1_ER_IRQHandler | |
| .word I2C2_EV_IRQHandler | |
| .word I2C2_ER_IRQHandler | |
| .word SPI1_IRQHandler | |
| .word SPI2_IRQHandler | |
| .word USART1_IRQHandler | |
| .word USART2_IRQHandler | |
| .word USART3_IRQHandler | |
| .word EXTI15_10_IRQHandler | |
| .word RTCAlarm_IRQHandler | |
| .word USBWakeUp_IRQHandler | |
| .word TIM8_BRK_IRQHandler | |
| .word TIM8_UP_IRQHandler | |
| .word TIM8_TRG_COM_IRQHandler | |
| .word TIM8_CC_IRQHandler | |
| .word ADC3_IRQHandler | |
| .word FSMC_IRQHandler | |
| .word SDIO_IRQHandler | |
| .word TIM5_IRQHandler | |
| .word SPI3_IRQHandler | |
| .word UART4_IRQHandler | |
| .word UART5_IRQHandler | |
| .word TIM6_IRQHandler | |
| .word TIM7_IRQHandler | |
| .word DMA2_Channel1_IRQHandler | |
| .word DMA2_Channel2_IRQHandler | |
| .word DMA2_Channel3_IRQHandler | |
| .word DMA2_Channel4_5_IRQHandler | |
| .word vMAC_ISR | |
| .word vMAC_ISR | |
| .section .init, "ax" | |
| .thumb_func | |
| reset_handler: | |
| #ifndef __FLASH_BUILD | |
| /* If this is a RAM build, configure vector table offset register to point | |
| to the RAM vector table. */ | |
| ldr r0, =0xE000ED08 | |
| ldr r1, =_vectors | |
| str r1, [r0] | |
| #endif | |
| b _start | |
| DEFAULT_ISR_HANDLER HardFaultException | |
| DEFAULT_ISR_HANDLER NMIException | |
| DEFAULT_ISR_HANDLER MemManageException | |
| DEFAULT_ISR_HANDLER BusFaultException | |
| DEFAULT_ISR_HANDLER UsageFaultException | |
| DEFAULT_ISR_HANDLER SVCHandler | |
| DEFAULT_ISR_HANDLER DebugMonitor | |
| DEFAULT_ISR_HANDLER PendSV | |
| DEFAULT_ISR_HANDLER SysTickHandler | |
| DEFAULT_ISR_HANDLER WWDG_IRQHandler | |
| DEFAULT_ISR_HANDLER PVD_IRQHandler | |
| DEFAULT_ISR_HANDLER TAMPER_IRQHandler | |
| DEFAULT_ISR_HANDLER RTC_IRQHandler | |
| DEFAULT_ISR_HANDLER FLASH_IRQHandler | |
| DEFAULT_ISR_HANDLER RCC_IRQHandler | |
| DEFAULT_ISR_HANDLER EXTI0_IRQHandler | |
| DEFAULT_ISR_HANDLER EXTI1_IRQHandler | |
| DEFAULT_ISR_HANDLER EXTI2_IRQHandler | |
| DEFAULT_ISR_HANDLER EXTI3_IRQHandler | |
| DEFAULT_ISR_HANDLER EXTI4_IRQHandler | |
| DEFAULT_ISR_HANDLER DMAChannel1_IRQHandler | |
| DEFAULT_ISR_HANDLER DMAChannel2_IRQHandler | |
| DEFAULT_ISR_HANDLER DMAChannel3_IRQHandler | |
| DEFAULT_ISR_HANDLER DMAChannel4_IRQHandler | |
| DEFAULT_ISR_HANDLER DMAChannel5_IRQHandler | |
| DEFAULT_ISR_HANDLER DMAChannel6_IRQHandler | |
| DEFAULT_ISR_HANDLER DMAChannel7_IRQHandler | |
| DEFAULT_ISR_HANDLER ADC_IRQHandler | |
| DEFAULT_ISR_HANDLER USB_HP_CAN_TX_IRQHandler | |
| DEFAULT_ISR_HANDLER USB_LP_CAN_RX0_IRQHandler | |
| DEFAULT_ISR_HANDLER CAN_RX1_IRQHandler | |
| DEFAULT_ISR_HANDLER CAN_SCE_IRQHandler | |
| DEFAULT_ISR_HANDLER EXTI9_5_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM1_BRK_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM1_UP_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM1_TRG_COM_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM1_CC_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM2_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM3_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM4_IRQHandler | |
| DEFAULT_ISR_HANDLER I2C1_EV_IRQHandler | |
| DEFAULT_ISR_HANDLER I2C1_ER_IRQHandler | |
| DEFAULT_ISR_HANDLER I2C2_EV_IRQHandler | |
| DEFAULT_ISR_HANDLER I2C2_ER_IRQHandler | |
| DEFAULT_ISR_HANDLER SPI1_IRQHandler | |
| DEFAULT_ISR_HANDLER SPI2_IRQHandler | |
| DEFAULT_ISR_HANDLER USART1_IRQHandler | |
| DEFAULT_ISR_HANDLER USART2_IRQHandler | |
| DEFAULT_ISR_HANDLER USART3_IRQHandler | |
| DEFAULT_ISR_HANDLER EXTI15_10_IRQHandler | |
| DEFAULT_ISR_HANDLER RTCAlarm_IRQHandler | |
| DEFAULT_ISR_HANDLER USBWakeUp_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM8_BRK_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM8_UP_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM8_TRG_COM_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM8_CC_IRQHandler | |
| DEFAULT_ISR_HANDLER ADC3_IRQHandler | |
| DEFAULT_ISR_HANDLER FSMC_IRQHandler | |
| DEFAULT_ISR_HANDLER SDIO_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM5_IRQHandler | |
| DEFAULT_ISR_HANDLER SPI3_IRQHandler | |
| DEFAULT_ISR_HANDLER UART4_IRQHandler | |
| DEFAULT_ISR_HANDLER UART5_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM6_IRQHandler | |
| DEFAULT_ISR_HANDLER TIM7_IRQHandler | |
| DEFAULT_ISR_HANDLER DMA2_Channel1_IRQHandler | |
| DEFAULT_ISR_HANDLER DMA2_Channel2_IRQHandler | |
| DEFAULT_ISR_HANDLER DMA2_Channel3_IRQHandler | |
| DEFAULT_ISR_HANDLER DMA2_Channel4_5_IRQHandler | |
| #ifndef STARTUP_FROM_RESET | |
| DEFAULT_ISR_HANDLER reset_wait | |
| #endif /* STARTUP_FROM_RESET */ | |
| // STM32 library requires these | |
| .global __WFI | |
| .global __WFE | |
| .global __SEV | |
| .global __ISB | |
| .global __DSB | |
| .global __DMB | |
| .global __SVC | |
| .global __MRS_CONTROL | |
| .global __MSR_CONTROL | |
| .global __MRS_PSP | |
| .global __MSR_PSP | |
| .global __MRS_MSP | |
| .global __MSR_MSP | |
| .global __SETPRIMASK | |
| .global __RESETPRIMASK | |
| .global __SETFAULTMASK | |
| .global __RESETFAULTMASK | |
| .global __BASEPRICONFIG | |
| .global __GetBASEPRI | |
| .global __REV_HalfWord | |
| .global __REV_Word | |
| .thumb_func | |
| __WFI: | |
| wfi | |
| bx r14 | |
| .thumb_func | |
| __WFE: | |
| wfe | |
| bx r14 | |
| .thumb_func | |
| __SEV: | |
| sev | |
| bx r14 | |
| .thumb_func | |
| __ISB: | |
| isb | |
| bx r14 | |
| .thumb_func | |
| __DSB: | |
| dsb | |
| bx r14 | |
| .thumb_func | |
| __DMB: | |
| dmb | |
| bx r14 | |
| .thumb_func | |
| __SVC: | |
| svc 0x01 | |
| bx r14 | |
| .thumb_func | |
| __MRS_CONTROL: | |
| mrs r0, control | |
| bx r14 | |
| .thumb_func | |
| __MSR_CONTROL: | |
| msr control, r0 | |
| isb | |
| bx r14 | |
| .thumb_func | |
| __MRS_PSP: | |
| mrs r0, psp | |
| bx r14 | |
| .thumb_func | |
| __MSR_PSP: | |
| msr psp, r0 | |
| bx r14 | |
| .thumb_func | |
| __MRS_MSP: | |
| mrs r0, msp | |
| bx r14 | |
| .thumb_func | |
| __MSR_MSP: | |
| msr msp, r0 | |
| bx r14 | |
| .thumb_func | |
| __SETPRIMASK: | |
| cpsid i | |
| bx r14 | |
| .thumb_func | |
| __RESETPRIMASK: | |
| cpsie i | |
| bx r14 | |
| .thumb_func | |
| __SETFAULTMASK: | |
| cpsid f | |
| bx r14 | |
| .thumb_func | |
| __RESETFAULTMASK: | |
| cpsie f | |
| bx r14 | |
| .thumb_func | |
| __BASEPRICONFIG: | |
| msr basepri, r0 | |
| bx r14 | |
| .thumb_func | |
| __GetBASEPRI: | |
| mrs r0, basepri_max | |
| bx r14 | |
| .thumb_func | |
| __REV_HalfWord: | |
| rev16 r0, r0 | |
| bx r14 | |
| .thumb_func | |
| __REV_Word: | |
| rev r0, r0 | |
| bx r14 | |