mirror of
https://github.com/cesanta/mongoose.git
synced 2024-12-15 18:09:15 +08:00
170 lines
7.4 KiB
C
170 lines
7.4 KiB
C
// Copyright (c) 2022 Cesanta Software Limited
|
|
// All rights reserved
|
|
|
|
// Startup code
|
|
__attribute__((naked, noreturn)) void _reset(void) {
|
|
// Initialise memory
|
|
extern long _sbss, _ebss, _sdata, _edata, _sidata;
|
|
for (long *src = &_sbss; src < &_ebss; src++) *src = 0;
|
|
for (long *src = &_sdata, *dst = &_sidata; src < &_edata;) *src++ = *dst++;
|
|
|
|
// Call main()
|
|
extern void main(void);
|
|
main();
|
|
for (;;) (void) 0;
|
|
}
|
|
|
|
void __attribute__((weak)) DefaultIRQHandler(void) {
|
|
for (;;) (void) 0;
|
|
}
|
|
|
|
#define WEAK_ALIAS __attribute__((weak, alias("DefaultIRQHandler")))
|
|
|
|
WEAK_ALIAS void NMI_Handler(void);
|
|
WEAK_ALIAS void HardFault_Handler(void);
|
|
WEAK_ALIAS void MemManage_Handler(void);
|
|
WEAK_ALIAS void BusFault_Handler(void);
|
|
WEAK_ALIAS void UsageFault_Handler(void);
|
|
WEAK_ALIAS void SVC_Handler(void);
|
|
WEAK_ALIAS void DebugMon_Handler(void);
|
|
WEAK_ALIAS void PendSV_Handler(void);
|
|
WEAK_ALIAS void SysTick_Handler(void);
|
|
|
|
WEAK_ALIAS void WWDG_IRQHandler(void);
|
|
WEAK_ALIAS void PVD_IRQHandler(void);
|
|
WEAK_ALIAS void TAMP_STAMP_IRQHandler(void);
|
|
WEAK_ALIAS void RTC_WKUP_IRQHandler(void);
|
|
WEAK_ALIAS void FLASH_IRQHandler(void);
|
|
WEAK_ALIAS void RCC_IRQHandler(void);
|
|
WEAK_ALIAS void EXTI0_IRQHandler(void);
|
|
WEAK_ALIAS void EXTI1_IRQHandler(void);
|
|
WEAK_ALIAS void EXTI2_IRQHandler(void);
|
|
WEAK_ALIAS void EXTI3_IRQHandler(void);
|
|
WEAK_ALIAS void EXTI4_IRQHandler(void);
|
|
WEAK_ALIAS void EXTI9_5_IRQHandler(void);
|
|
WEAK_ALIAS void EXTI15_10_IRQHandler(void);
|
|
WEAK_ALIAS void DMA1_Stream0_IRQHandler(void);
|
|
WEAK_ALIAS void DMA1_Stream1_IRQHandler(void);
|
|
WEAK_ALIAS void DMA1_Stream2_IRQHandler(void);
|
|
WEAK_ALIAS void DMA1_Stream3_IRQHandler(void);
|
|
WEAK_ALIAS void DMA1_Stream4_IRQHandler(void);
|
|
WEAK_ALIAS void DMA1_Stream5_IRQHandler(void);
|
|
WEAK_ALIAS void DMA1_Stream6_IRQHandler(void);
|
|
WEAK_ALIAS void ADC_IRQHandler(void);
|
|
WEAK_ALIAS void CAN1_TX_IRQHandler(void);
|
|
WEAK_ALIAS void CAN1_RX0_IRQHandler(void);
|
|
WEAK_ALIAS void CAN1_RX1_IRQHandler(void);
|
|
WEAK_ALIAS void CAN1_SCE_IRQHandler(void);
|
|
WEAK_ALIAS void TIM1_BRK_TIM9_IRQHandler(void);
|
|
WEAK_ALIAS void TIM1_UP_TIM10_IRQHandler(void);
|
|
WEAK_ALIAS void TIM1_TRG_COM_TIM11_IRQHandler(void);
|
|
WEAK_ALIAS void TIM1_CC_IRQHandler(void);
|
|
WEAK_ALIAS void TIM2_IRQHandler(void);
|
|
WEAK_ALIAS void TIM3_IRQHandler(void);
|
|
WEAK_ALIAS void TIM4_IRQHandler(void);
|
|
WEAK_ALIAS void I2C1_EV_IRQHandler(void);
|
|
WEAK_ALIAS void I2C1_ER_IRQHandler(void);
|
|
WEAK_ALIAS void I2C2_EV_IRQHandler(void);
|
|
WEAK_ALIAS void I2C2_ER_IRQHandler(void);
|
|
WEAK_ALIAS void SPI1_IRQHandler(void);
|
|
WEAK_ALIAS void SPI2_IRQHandler(void);
|
|
WEAK_ALIAS void USART1_IRQHandler(void);
|
|
WEAK_ALIAS void USART2_IRQHandler(void);
|
|
WEAK_ALIAS void USART3_IRQHandler(void);
|
|
WEAK_ALIAS void RTC_Alarm_IRQHandler(void);
|
|
WEAK_ALIAS void OTG_FS_WKUP_IRQHandler(void);
|
|
WEAK_ALIAS void TIM8_BRK_TIM12_IRQHandler(void);
|
|
WEAK_ALIAS void TIM8_UP_TIM13_IRQHandler(void);
|
|
WEAK_ALIAS void TIM8_TRG_COM_TIM14_IRQHandler(void);
|
|
WEAK_ALIAS void TIM8_CC_IRQHandler(void);
|
|
WEAK_ALIAS void DMA1_Stream7_IRQHandler(void);
|
|
WEAK_ALIAS void FMC_IRQHandler(void);
|
|
WEAK_ALIAS void SDMMC1_IRQHandler(void);
|
|
WEAK_ALIAS void TIM5_IRQHandler(void);
|
|
WEAK_ALIAS void SPI3_IRQHandler(void);
|
|
WEAK_ALIAS void UART4_IRQHandler(void);
|
|
WEAK_ALIAS void UART5_IRQHandler(void);
|
|
WEAK_ALIAS void TIM6_DAC_IRQHandler(void);
|
|
WEAK_ALIAS void TIM7_IRQHandler(void);
|
|
WEAK_ALIAS void DMA2_Stream0_IRQHandler(void);
|
|
WEAK_ALIAS void DMA2_Stream1_IRQHandler(void);
|
|
WEAK_ALIAS void DMA2_Stream2_IRQHandler(void);
|
|
WEAK_ALIAS void DMA2_Stream3_IRQHandler(void);
|
|
WEAK_ALIAS void DMA2_Stream4_IRQHandler(void);
|
|
WEAK_ALIAS void ETH_IRQHandler(void);
|
|
WEAK_ALIAS void ETH_WKUP_IRQHandler(void);
|
|
WEAK_ALIAS void CAN2_TX_IRQHandler(void);
|
|
WEAK_ALIAS void CAN2_RX0_IRQHandler(void);
|
|
WEAK_ALIAS void CAN2_RX1_IRQHandler(void);
|
|
WEAK_ALIAS void CAN2_SCE_IRQHandler(void);
|
|
WEAK_ALIAS void OTG_FS_IRQHandler(void);
|
|
WEAK_ALIAS void DMA2_Stream5_IRQHandler(void);
|
|
WEAK_ALIAS void DMA2_Stream6_IRQHandler(void);
|
|
WEAK_ALIAS void DMA2_Stream7_IRQHandler(void);
|
|
WEAK_ALIAS void USART6_IRQHandler(void);
|
|
WEAK_ALIAS void I2C3_EV_IRQHandler(void);
|
|
WEAK_ALIAS void I2C3_ER_IRQHandler(void);
|
|
WEAK_ALIAS void OTG_HS_EP1_OUT_IRQHandler(void);
|
|
WEAK_ALIAS void OTG_HS_EP1_IN_IRQHandler(void);
|
|
WEAK_ALIAS void OTG_HS_WKUP_IRQHandler(void);
|
|
WEAK_ALIAS void OTG_HS_IRQHandler(void);
|
|
WEAK_ALIAS void DCMI_IRQHandler(void);
|
|
WEAK_ALIAS void RNG_IRQHandler(void);
|
|
WEAK_ALIAS void FPU_IRQHandler(void);
|
|
WEAK_ALIAS void UART7_IRQHandler(void);
|
|
WEAK_ALIAS void UART8_IRQHandler(void);
|
|
WEAK_ALIAS void SPI4_IRQHandler(void);
|
|
WEAK_ALIAS void SPI5_IRQHandler(void);
|
|
WEAK_ALIAS void SPI6_IRQHandler(void);
|
|
WEAK_ALIAS void SAI1_IRQHandler(void);
|
|
WEAK_ALIAS void LTDC_IRQHandler(void);
|
|
WEAK_ALIAS void LTDC_ER_IRQHandler(void);
|
|
WEAK_ALIAS void DMA2D_IRQHandler(void);
|
|
WEAK_ALIAS void SAI2_IRQHandler(void);
|
|
WEAK_ALIAS void QUADSPI_IRQHandler(void);
|
|
WEAK_ALIAS void LPTIM1_IRQHandler(void);
|
|
WEAK_ALIAS void CEC_IRQHandler(void);
|
|
WEAK_ALIAS void I2C4_EV_IRQHandler(void);
|
|
WEAK_ALIAS void I2C4_ER_IRQHandler(void);
|
|
WEAK_ALIAS void SPDIF_RX_IRQHandler(void);
|
|
|
|
// IRQ table
|
|
extern void _estack();
|
|
__attribute__((section(".vectors"))) void (*tab[16 + 98])(void) = {
|
|
// Cortex interrupts
|
|
_estack, _reset, NMI_Handler, HardFault_Handler, MemManage_Handler,
|
|
BusFault_Handler, UsageFault_Handler, 0, 0, 0, 0, SVC_Handler,
|
|
DebugMon_Handler, 0, PendSV_Handler, SysTick_Handler,
|
|
|
|
// Interrupts from peripherals
|
|
WWDG_IRQHandler, PVD_IRQHandler, TAMP_STAMP_IRQHandler, RTC_WKUP_IRQHandler,
|
|
FLASH_IRQHandler, RCC_IRQHandler, EXTI0_IRQHandler, EXTI1_IRQHandler,
|
|
EXTI2_IRQHandler, EXTI3_IRQHandler, EXTI4_IRQHandler,
|
|
DMA1_Stream0_IRQHandler, DMA1_Stream1_IRQHandler, DMA1_Stream2_IRQHandler,
|
|
DMA1_Stream3_IRQHandler, DMA1_Stream4_IRQHandler, DMA1_Stream5_IRQHandler,
|
|
DMA1_Stream6_IRQHandler, ADC_IRQHandler, CAN1_TX_IRQHandler,
|
|
CAN1_RX0_IRQHandler, CAN1_RX1_IRQHandler, CAN1_SCE_IRQHandler,
|
|
EXTI9_5_IRQHandler, TIM1_BRK_TIM9_IRQHandler, TIM1_UP_TIM10_IRQHandler,
|
|
TIM1_TRG_COM_TIM11_IRQHandler, TIM1_CC_IRQHandler, TIM2_IRQHandler,
|
|
TIM3_IRQHandler, TIM4_IRQHandler, I2C1_EV_IRQHandler, I2C1_ER_IRQHandler,
|
|
I2C2_EV_IRQHandler, I2C2_ER_IRQHandler, SPI1_IRQHandler, SPI2_IRQHandler,
|
|
USART1_IRQHandler, USART2_IRQHandler, USART3_IRQHandler,
|
|
EXTI15_10_IRQHandler, RTC_Alarm_IRQHandler, OTG_FS_WKUP_IRQHandler,
|
|
TIM8_BRK_TIM12_IRQHandler, TIM8_UP_TIM13_IRQHandler,
|
|
TIM8_TRG_COM_TIM14_IRQHandler, TIM8_CC_IRQHandler, DMA1_Stream7_IRQHandler,
|
|
FMC_IRQHandler, SDMMC1_IRQHandler, TIM5_IRQHandler, SPI3_IRQHandler,
|
|
UART4_IRQHandler, UART5_IRQHandler, TIM6_DAC_IRQHandler, TIM7_IRQHandler,
|
|
DMA2_Stream0_IRQHandler, DMA2_Stream1_IRQHandler, DMA2_Stream2_IRQHandler,
|
|
DMA2_Stream3_IRQHandler, DMA2_Stream4_IRQHandler, ETH_IRQHandler,
|
|
ETH_WKUP_IRQHandler, CAN2_TX_IRQHandler, CAN2_RX0_IRQHandler,
|
|
CAN2_RX1_IRQHandler, CAN2_SCE_IRQHandler, OTG_FS_IRQHandler,
|
|
DMA2_Stream5_IRQHandler, DMA2_Stream6_IRQHandler, DMA2_Stream7_IRQHandler,
|
|
USART6_IRQHandler, I2C3_EV_IRQHandler, I2C3_ER_IRQHandler,
|
|
OTG_HS_EP1_OUT_IRQHandler, OTG_HS_EP1_IN_IRQHandler, OTG_HS_WKUP_IRQHandler,
|
|
OTG_HS_IRQHandler, DCMI_IRQHandler, 0, RNG_IRQHandler, FPU_IRQHandler,
|
|
UART7_IRQHandler, UART8_IRQHandler, SPI4_IRQHandler, SPI5_IRQHandler,
|
|
SPI6_IRQHandler, SAI1_IRQHandler, LTDC_IRQHandler, LTDC_ER_IRQHandler,
|
|
DMA2D_IRQHandler, SAI2_IRQHandler, QUADSPI_IRQHandler, LPTIM1_IRQHandler,
|
|
CEC_IRQHandler, I2C4_EV_IRQHandler, I2C4_ER_IRQHandler,
|
|
SPDIF_RX_IRQHandler};
|