mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-25 07:52:12 -04:00
337 lines
8.9 KiB
ArmAsm
337 lines
8.9 KiB
ArmAsm
/*****************************************************************************
|
|
* 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
|
|
|
|
|
|
|
|
|