refactor(h7): generic system init (#6172)

This commit is contained in:
Raphael Coeffic
2025-05-08 22:38:01 +10:00
committed by GitHub
parent 9e20b7f2ee
commit 04a7e340d7
36 changed files with 1431 additions and 1993 deletions
@@ -57,8 +57,12 @@ endif()
add_executable(bootloader EXCLUDE_FROM_ALL ${BOOTLOADER_SRC})
add_dependencies(bootloader ${BITMAPS_TARGET})
target_compile_definitions(bootloader PRIVATE BOOT)
target_compile_definitions(board_bl PRIVATE BOOT)
target_compile_definitions(bootloader PUBLIC BOOT)
target_compile_definitions(board_bl PUBLIC BOOT)
if(ARCH STREQUAL ARM)
target_link_libraries(bootloader PUBLIC cmsis)
endif()
target_link_options(bootloader BEFORE PRIVATE
-L${LINKER_DIR}/${TARGET_LINKER_DIR}/bootloader
@@ -67,17 +71,15 @@ target_link_options(bootloader BEFORE PRIVATE
-lm --specs=nano.specs
)
if (DEFINED TARGET_SDRAM_START)
# message("TARGET_SDRAM_START = ${TARGET_SDRAM_START}")
if (DEFINED TARGET_EXTRAM_START)
target_link_options(bootloader PRIVATE
-Wl,--defsym=__sdram_start=${TARGET_SDRAM_START}
-Wl,--defsym=__EXTRAM_START__=${TARGET_EXTRAM_START}
)
endif()
if (DEFINED TARGET_SDRAM_SIZE)
# message("TARGET_SDRAM_SIZE = ${TARGET_SDRAM_SIZE}")
if (DEFINED TARGET_EXTRAM_SIZE)
target_link_options(bootloader PRIVATE
-Wl,--defsym=__sdram_size=${TARGET_SDRAM_SIZE}
-Wl,--defsym=__EXTRAM_SIZE__=${TARGET_EXTRAM_SIZE}
)
endif()
@@ -0,0 +1,80 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "cortex_m_isr.h"
#include "stm32_cmsis.h"
#define GET_VECTACTIVE() \
((SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) >> SCB_ICSR_VECTACTIVE_Pos)
#define HARDFAULT_HANDLING_ASM(_x) \
__asm volatile( \
"tst lr, #4 \n" \
"ite eq \n" \
"mrseq r0, msp \n" \
"mrsne r0, psp \n" \
"b hard_fault_handler_c \n")
#define HALT_IF_DEBUGGING() \
do { \
if (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) { \
__asm("bkpt 1"); \
} \
} while (0)
__attribute__((optimize("O0")))
void default_isr_handler()
{
/* Halt in debugger if connected */
if (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) {
uint32_t active_irq = GET_VECTACTIVE();
if (active_irq >= NVIC_USER_IRQ_OFFSET) {
/* External interrupt: check IRQn_Type for number */
active_irq -= NVIC_USER_IRQ_OFFSET;
__asm__("bkpt 1");
} else {
/* Cortex-M Exception */
__asm__("bkpt 2");
}
}
while (1) {}
}
typedef struct __attribute__((packed)) ContextStateFrame {
uint32_t r0;
uint32_t r1;
uint32_t r2;
uint32_t r3;
uint32_t r12;
uint32_t lr;
uint32_t return_address;
uint32_t xpsr;
} sContextStateFrame;
__attribute__((optimize("O0")))
void hard_fault_handler_c(sContextStateFrame *frame) {
HALT_IF_DEBUGGING();
}
void HardFault_Handler(void) {
HARDFAULT_HANDLING_ASM();
}
@@ -0,0 +1,29 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#define WEAK_DEFAULT __attribute__((weak,alias("Default_Handler")))
#define ISR_VECTOR __attribute__((section(".isr_vector")))
typedef void (*isr_t)(void);
extern void* _estack;
extern void default_isr_handler();
@@ -53,13 +53,12 @@ include_directories(${STM32LIB_DIR}/CMSIS/Include)
add_definitions(-DSTM32F2)
add_library(stm32_stdperiph OBJECT EXCLUDE_FROM_ALL
add_library(cmsis INTERFACE)
target_sources(cmsis INTERFACE
targets/common/arm/stm32/f2/system_stm32f2xx.c
boards/generic_stm32/startup/startup_stm32f205xx.s
)
set(FIRMWARE_SRC ${FIRMWARE_SRC} $<TARGET_OBJECTS:stm32_stdperiph>)
set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $<TARGET_OBJECTS:stm32_stdperiph>)
)
if(NOT NATIVE_BUILD)
include_directories(targets/common/arm/stm32/f2)
@@ -21,6 +21,7 @@
#pragma once
#define __INIT_HOOK
#define __CCMRAM
#define __DMA
#define __DMA_NO_CACHE
@@ -71,30 +71,26 @@ include_directories(${STM32LIB_DIR}/CMSIS/Include)
add_definitions(-DSTM32F4)
set(STM32_STDPERIPH_SRC
targets/common/arm/stm32/f4/system_stm32f4xx.c
)
if(CPU_TYPE_FULL STREQUAL STM32F429xI)
set(STM32_STDPERIPH_SRC ${STM32_STDPERIPH_SRC}
set(CMSIS_SRC ${CMSIS_SRC}
boards/generic_stm32/startup/startup_stm32f42_43xxx.s
)
)
elseif (CPU_TYPE_FULL STREQUAL STM32F413xG)
set(STM32_STDPERIPH_SRC ${STM32_STDPERIPH_SRC}
set(CMSIS_SRC ${CMSIS_SRC}
boards/generic_stm32/startup/startup_stm32f413xx.s
)
else()
set(STM32_STDPERIPH_SRC ${STM32_STDPERIPH_SRC}
set(CMSIS_SRC ${CMSIS_SRC}
boards/generic_stm32/startup/startup_stm32f40_41xxx.s
)
)
endif()
add_library(stm32_stdperiph OBJECT EXCLUDE_FROM_ALL
${STM32_STDPERIPH_SRC}
)
add_library(cmsis INTERFACE)
set(FIRMWARE_SRC ${FIRMWARE_SRC} $<TARGET_OBJECTS:stm32_stdperiph>)
set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $<TARGET_OBJECTS:stm32_stdperiph>)
target_sources(cmsis INTERFACE
targets/common/arm/stm32/f4/system_stm32f4xx.c
${CMSIS_SRC}
)
if(NOT NATIVE_BUILD)
include_directories(targets/common/arm/stm32/f4)
@@ -21,6 +21,8 @@
#pragma once
#define __INIT_HOOK
#define __CCMRAM __attribute__((section(".ccm"), aligned(4)))
#define __DMA __attribute__((section(".ram"), aligned(4)))
#define __DMA_NO_CACHE __DMA
@@ -18,7 +18,6 @@ else()
)
endif()
if(NOT NATIVE_BUILD)
if(CPU_TYPE STREQUAL STM32H7RS)
set(STM32CUBE_PREFIX stm32h7rsxx)
@@ -123,27 +122,28 @@ endif()
if(CPU_TYPE_FULL STREQUAL STM32H750xB)
set(CMSIS_SRC ${CMSIS_SRC}
boards/generic_stm32/startup/startup_stm32h750xx.s
targets/common/arm/stm32/h7/vectors_stm32h750xx.c
)
elseif(CPU_TYPE_FULL STREQUAL STM32H747Ix)
set(CMSIS_SRC ${CMSIS_SRC}
boards/generic_stm32/startup/startup_stm32h747xx.s
targets/common/arm/stm32/h7/vectors_stm32h747xx.c
)
elseif(CPU_TYPE_FULL STREQUAL STM32H7S7xx)
elseif(CPU_TYPE_FULL STREQUAL STM32H7S7xx OR CPU_TYPE_FULL STREQUAL STM32H7R7xx)
set(CMSIS_SRC ${CMSIS_SRC}
boards/generic_stm32/startup/startup_stm32h7s7xx.s
targets/common/arm/stm32/h7/vectors_stm32h7s7xx.c
)
else()
message(FATAL_ERROR "### ERROR ####: ${CPU_TYPE_FULL}")
endif()
add_library(cmsis OBJECT EXCLUDE_FROM_ALL
add_library(cmsis INTERFACE)
target_sources(cmsis INTERFACE
targets/common/arm/stm32/system_init.c
targets/common/arm/stm32/cortex_m_isr.c
${CMSIS_SRC}
)
set(FIRMWARE_SRC ${FIRMWARE_SRC} $<TARGET_OBJECTS:cmsis>)
set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $<TARGET_OBJECTS:cmsis>)
if(NOT NATIVE_BUILD)
include_directories(targets/common/arm/stm32/h7)
@@ -21,6 +21,8 @@
#pragma once
#define __INIT_HOOK __attribute__((section(".init_hook")))
#define __CCMRAM __attribute__((section(".ccm"), aligned(4)))
#define __DMA __attribute__((section(".ram"), aligned(4)))
#define __DMA_NO_CACHE __attribute__((section(".dram"), aligned(4)))
@@ -444,134 +444,6 @@ void SystemCoreClockUpdate (void)
#endif /* DUAL_CORE && CORE_CM4 */
}
// TODO: better exception handler
void NMI_Handler(void){asm("BKPT");}
void HardFault_Handler(void){asm("BKPT");}
void MemManage_Handler(void){asm("BKPT");}
void BusFault_Handler(void){asm("BKPT");}
void UsageFault_Handler(void){asm("BKPT");}
//void SVC_Handler(void){asm("BKPT");}
void DebugMon_Handler(void){asm("BKPT");}
//void PendSV_Handler(void){asm("BKPT");}
//void SysTick_Handler(void){asm("BKPT");}
void WWDG_IRQHandler(void){asm("BKPT");}
void PVD_AVD_IRQHandler(void){asm("BKPT");}
void TAMP_STAMP_IRQHandler(void){asm("BKPT");}
void RTC_WKUP_IRQHandler(void){asm("BKPT");}
void FLASH_IRQHandler(void){asm("BKPT");}
void RCC_IRQHandler(void){asm("BKPT");}
void EXTI0_IRQHandler(void){asm("BKPT");}
void EXTI1_IRQHandler(void){asm("BKPT");}
void DMA1_Stream1_IRQHandler(void){asm("BKPT");}
void DMA1_Stream2_IRQHandler(void){asm("BKPT");}
void DMA1_Stream3_IRQHandler(void){asm("BKPT");}
void DMA1_Stream4_IRQHandler(void){asm("BKPT");}
//void ADC_IRQHandler(void){asm("BKPT");}
void FDCAN1_IT0_IRQHandler(void){asm("BKPT");}
void FDCAN2_IT0_IRQHandler(void){asm("BKPT");}
void FDCAN1_IT1_IRQHandler(void){asm("BKPT");}
void FDCAN2_IT1_IRQHandler(void){asm("BKPT");}
void TIM1_BRK_IRQHandler(void){asm("BKPT");}
void TIM1_UP_IRQHandler(void){asm("BKPT");}
void TIM1_TRG_COM_IRQHandler(void){asm("BKPT");}
void TIM1_CC_IRQHandler(void){asm("BKPT");}
void TIM2_IRQHandler(void){asm("BKPT");}
void TIM3_IRQHandler(void){asm("BKPT");}
// void TIM4_IRQHandler(void){asm("BKPT");}
void I2C1_EV_IRQHandler(void){asm("BKPT");}
void I2C1_ER_IRQHandler(void){asm("BKPT");}
void I2C2_EV_IRQHandler(void){asm("BKPT");}
void I2C2_ER_IRQHandler(void){asm("BKPT");}
void SPI1_IRQHandler(void){asm("BKPT");}
void SPI2_IRQHandler(void){asm("BKPT");}
//void EXTI15_10_IRQHandler(void){asm("BKPT");}
void RTC_Alarm_IRQHandler(void){asm("BKPT");}
void TIM8_CC_IRQHandler(void){asm("BKPT");}
//void DMA1_Stream7_IRQHandler(void){asm("BKPT");}
void FMC_IRQHandler(void){asm("BKPT");}
void TIM5_IRQHandler(void){asm("BKPT");}
void SPI3_IRQHandler(void){asm("BKPT");}
//void UART5_IRQHandler(void){asm("BKPT");}
void TIM7_IRQHandler(void){asm("BKPT");}
//void DMA2_Stream0_IRQHandler(void){asm("BKPT");}
void DMA2_Stream2_IRQHandler(void){asm("BKPT");}
void DMA2_Stream3_IRQHandler(void){asm("BKPT");}
//void DMA2_Stream4_IRQHandler(void){asm("BKPT");}
void ETH_IRQHandler(void){asm("BKPT");}
//void ETH_WKUP_IRQHandler(void){asm("BKPT");}
void FDCAN_CAL_IRQHandler(void){asm("BKPT");}
void DMA2_Stream5_IRQHandler(void){asm("BKPT");}
// void DMA2_Stream6_IRQHandler(void){asm("BKPT");}
void DMA2_Stream7_IRQHandler(void){asm("BKPT");}
void I2C3_EV_IRQHandler(void){asm("BKPT");}
void I2C3_ER_IRQHandler(void){asm("BKPT");}
void OTG_HS_EP1_OUT_IRQHandler(void){asm("BKPT");}
void OTG_HS_EP1_IN_IRQHandler(void){asm("BKPT");}
void OTG_HS_WKUP_IRQHandler(void){asm("BKPT");}
void OTG_HS_IRQHandler(void){asm("BKPT");}
void DCMI_IRQHandler(void){asm("BKPT");}
void CRYP_IRQHandler(void){asm("BKPT");}
void HASH_RNG_IRQHandler(void){asm("BKPT");}
void FPU_IRQHandler(void){asm("BKPT");}
//void UART8_IRQHandler(void){asm("BKPT");}
void SPI4_IRQHandler(void){asm("BKPT");}
void SPI5_IRQHandler(void){asm("BKPT");}
void SPI6_IRQHandler(void){asm("BKPT");}
void SAI1_IRQHandler(void){asm("BKPT");}
void LTDC_ER_IRQHandler(void){asm("BKPT");}
void DMA2D_IRQHandler(void){asm("BKPT");}
void SAI2_IRQHandler(void){asm("BKPT");}
void QUADSPI_IRQHandler(void){asm("BKPT");}
void LPTIM1_IRQHandler(void){asm("BKPT");}
void CEC_IRQHandler(void){asm("BKPT");}
void I2C4_EV_IRQHandler(void){asm("BKPT");}
void I2C4_ER_IRQHandler(void){asm("BKPT");}
void SPDIF_RX_IRQHandler(void){asm("BKPT");}
void OTG_FS_EP1_OUT_IRQHandler(void){asm("BKPT");}
void OTG_FS_EP1_IN_IRQHandler(void){asm("BKPT");}
void OTG_FS_WKUP_IRQHandler(void){asm("BKPT");}
void DMAMUX1_OVR_IRQHandler(void){asm("BKPT");}
void HRTIM1_Master_IRQHandler(void){asm("BKPT");}
void HRTIM1_TIMA_IRQHandler(void){asm("BKPT");}
void HRTIM1_TIMB_IRQHandler(void){asm("BKPT");}
void HRTIM1_TIMC_IRQHandler(void){asm("BKPT");}
void HRTIM1_TIMD_IRQHandler(void){asm("BKPT");}
void HRTIM1_TIME_IRQHandler(void){asm("BKPT");}
void HRTIM1_FLT_IRQHandler(void){asm("BKPT");}
void DFSDM1_FLT0_IRQHandler(void){asm("BKPT");}
void DFSDM1_FLT1_IRQHandler(void){asm("BKPT");}
void DFSDM1_FLT2_IRQHandler(void){asm("BKPT");}
void DFSDM1_FLT3_IRQHandler(void){asm("BKPT");}
void SAI3_IRQHandler(void){asm("BKPT");}
void SWPMI1_IRQHandler(void){asm("BKPT");}
void TIM16_IRQHandler(void){asm("BKPT");}
void MDIOS_WKUP_IRQHandler(void){asm("BKPT");}
void MDIOS_IRQHandler(void){asm("BKPT");}
void JPEG_IRQHandler(void){asm("BKPT");}
void MDMA_IRQHandler(void){asm("BKPT");}
void SDMMC2_IRQHandler(void){asm("BKPT");}
void HSEM1_IRQHandler(void){asm("BKPT");}
// void ADC3_IRQHandler(void){asm("BKPT");}
void DMAMUX2_OVR_IRQHandler(void){asm("BKPT");}
void BDMA_Channel0_IRQHandler(void){asm("BKPT");}
void BDMA_Channel1_IRQHandler(void){asm("BKPT");}
void BDMA_Channel2_IRQHandler(void){asm("BKPT");}
void BDMA_Channel3_IRQHandler(void){asm("BKPT");}
void BDMA_Channel4_IRQHandler(void){asm("BKPT");}
void BDMA_Channel5_IRQHandler(void){asm("BKPT");}
void BDMA_Channel6_IRQHandler(void){asm("BKPT");}
void BDMA_Channel7_IRQHandler(void){asm("BKPT");}
void COMP1_IRQHandler(void){asm("BKPT");}
void LPTIM2_IRQHandler(void){asm("BKPT");}
void LPTIM3_IRQHandler(void){asm("BKPT");}
void LPTIM4_IRQHandler(void){asm("BKPT");}
void LPTIM5_IRQHandler(void){asm("BKPT");}
void LPUART1_IRQHandler(void){asm("BKPT");}
void CRS_IRQHandler(void){asm("BKPT");}
void ECC_IRQHandler(void){asm("BKPT");}
void SAI4_IRQHandler(void){asm("BKPT");}
void WAKEUP_PIN_IRQHandler(void){asm("BKPT");}
/**
* @}
*/
@@ -0,0 +1,328 @@
#include "stm32h747xx.h"
#include "cortex_m_isr.h"
void Default_Handler() { default_isr_handler(); }
/* stm32h747xx specific interrupt vectors */
WEAK_DEFAULT void Reset_Handler();
WEAK_DEFAULT void NMI_Handler();
WEAK_DEFAULT void HardFault_Handler();
WEAK_DEFAULT void MemManage_Handler();
WEAK_DEFAULT void BusFault_Handler();
WEAK_DEFAULT void UsageFault_Handler();
WEAK_DEFAULT void SVC_Handler();
WEAK_DEFAULT void DebugMon_Handler();
WEAK_DEFAULT void PendSV_Handler();
WEAK_DEFAULT void SysTick_Handler();
WEAK_DEFAULT void WWDG_IRQHandler();
WEAK_DEFAULT void PVD_AVD_IRQHandler();
WEAK_DEFAULT void TAMP_STAMP_IRQHandler();
WEAK_DEFAULT void RTC_WKUP_IRQHandler();
WEAK_DEFAULT void FLASH_IRQHandler();
WEAK_DEFAULT void RCC_IRQHandler();
WEAK_DEFAULT void EXTI0_IRQHandler();
WEAK_DEFAULT void EXTI1_IRQHandler();
WEAK_DEFAULT void EXTI2_IRQHandler();
WEAK_DEFAULT void EXTI3_IRQHandler();
WEAK_DEFAULT void EXTI4_IRQHandler();
WEAK_DEFAULT void DMA1_Stream0_IRQHandler();
WEAK_DEFAULT void DMA1_Stream1_IRQHandler();
WEAK_DEFAULT void DMA1_Stream2_IRQHandler();
WEAK_DEFAULT void DMA1_Stream3_IRQHandler();
WEAK_DEFAULT void DMA1_Stream4_IRQHandler();
WEAK_DEFAULT void DMA1_Stream5_IRQHandler();
WEAK_DEFAULT void DMA1_Stream6_IRQHandler();
WEAK_DEFAULT void ADC_IRQHandler();
WEAK_DEFAULT void FDCAN1_IT0_IRQHandler();
WEAK_DEFAULT void FDCAN2_IT0_IRQHandler();
WEAK_DEFAULT void FDCAN1_IT1_IRQHandler();
WEAK_DEFAULT void FDCAN2_IT1_IRQHandler();
WEAK_DEFAULT void EXTI9_5_IRQHandler();
WEAK_DEFAULT void TIM1_BRK_IRQHandler();
WEAK_DEFAULT void TIM1_UP_IRQHandler();
WEAK_DEFAULT void TIM1_TRG_COM_IRQHandler();
WEAK_DEFAULT void TIM1_CC_IRQHandler();
WEAK_DEFAULT void TIM2_IRQHandler();
WEAK_DEFAULT void TIM3_IRQHandler();
WEAK_DEFAULT void TIM4_IRQHandler();
WEAK_DEFAULT void I2C1_EV_IRQHandler();
WEAK_DEFAULT void I2C1_ER_IRQHandler();
WEAK_DEFAULT void I2C2_EV_IRQHandler();
WEAK_DEFAULT void I2C2_ER_IRQHandler();
WEAK_DEFAULT void SPI1_IRQHandler();
WEAK_DEFAULT void SPI2_IRQHandler();
WEAK_DEFAULT void USART1_IRQHandler();
WEAK_DEFAULT void USART2_IRQHandler();
WEAK_DEFAULT void USART3_IRQHandler();
WEAK_DEFAULT void EXTI15_10_IRQHandler();
WEAK_DEFAULT void RTC_Alarm_IRQHandler();
WEAK_DEFAULT void TIM8_BRK_TIM12_IRQHandler();
WEAK_DEFAULT void TIM8_UP_TIM13_IRQHandler();
WEAK_DEFAULT void TIM8_TRG_COM_TIM14_IRQHandler();
WEAK_DEFAULT void TIM8_CC_IRQHandler();
WEAK_DEFAULT void DMA1_Stream7_IRQHandler();
WEAK_DEFAULT void FMC_IRQHandler();
WEAK_DEFAULT void SDMMC1_IRQHandler();
WEAK_DEFAULT void TIM5_IRQHandler();
WEAK_DEFAULT void SPI3_IRQHandler();
WEAK_DEFAULT void UART4_IRQHandler();
WEAK_DEFAULT void UART5_IRQHandler();
WEAK_DEFAULT void TIM6_DAC_IRQHandler();
WEAK_DEFAULT void TIM7_IRQHandler();
WEAK_DEFAULT void DMA2_Stream0_IRQHandler();
WEAK_DEFAULT void DMA2_Stream1_IRQHandler();
WEAK_DEFAULT void DMA2_Stream2_IRQHandler();
WEAK_DEFAULT void DMA2_Stream3_IRQHandler();
WEAK_DEFAULT void DMA2_Stream4_IRQHandler();
WEAK_DEFAULT void ETH_IRQHandler();
WEAK_DEFAULT void ETH_WKUP_IRQHandler();
WEAK_DEFAULT void FDCAN_CAL_IRQHandler();
WEAK_DEFAULT void CM7_SEV_IRQHandler();
WEAK_DEFAULT void CM4_SEV_IRQHandler();
WEAK_DEFAULT void DMA2_Stream5_IRQHandler();
WEAK_DEFAULT void DMA2_Stream6_IRQHandler();
WEAK_DEFAULT void DMA2_Stream7_IRQHandler();
WEAK_DEFAULT void USART6_IRQHandler();
WEAK_DEFAULT void I2C3_EV_IRQHandler();
WEAK_DEFAULT void I2C3_ER_IRQHandler();
WEAK_DEFAULT void OTG_HS_EP1_OUT_IRQHandler();
WEAK_DEFAULT void OTG_HS_EP1_IN_IRQHandler();
WEAK_DEFAULT void OTG_HS_WKUP_IRQHandler();
WEAK_DEFAULT void OTG_HS_IRQHandler();
WEAK_DEFAULT void DCMI_IRQHandler();
WEAK_DEFAULT void RNG_IRQHandler();
WEAK_DEFAULT void FPU_IRQHandler();
WEAK_DEFAULT void UART7_IRQHandler();
WEAK_DEFAULT void UART8_IRQHandler();
WEAK_DEFAULT void SPI4_IRQHandler();
WEAK_DEFAULT void SPI5_IRQHandler();
WEAK_DEFAULT void SPI6_IRQHandler();
WEAK_DEFAULT void SAI1_IRQHandler();
WEAK_DEFAULT void LTDC_IRQHandler();
WEAK_DEFAULT void LTDC_ER_IRQHandler();
WEAK_DEFAULT void DMA2D_IRQHandler();
WEAK_DEFAULT void SAI2_IRQHandler();
WEAK_DEFAULT void QUADSPI_IRQHandler();
WEAK_DEFAULT void LPTIM1_IRQHandler();
WEAK_DEFAULT void CEC_IRQHandler();
WEAK_DEFAULT void I2C4_EV_IRQHandler();
WEAK_DEFAULT void I2C4_ER_IRQHandler();
WEAK_DEFAULT void SPDIF_RX_IRQHandler();
WEAK_DEFAULT void OTG_FS_EP1_OUT_IRQHandler();
WEAK_DEFAULT void OTG_FS_EP1_IN_IRQHandler();
WEAK_DEFAULT void OTG_FS_WKUP_IRQHandler();
WEAK_DEFAULT void OTG_FS_IRQHandler();
WEAK_DEFAULT void DMAMUX1_OVR_IRQHandler();
WEAK_DEFAULT void HRTIM1_Master_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIMA_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIMB_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIMC_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIMD_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIME_IRQHandler();
WEAK_DEFAULT void HRTIM1_FLT_IRQHandler();
WEAK_DEFAULT void DFSDM1_FLT0_IRQHandler();
WEAK_DEFAULT void DFSDM1_FLT1_IRQHandler();
WEAK_DEFAULT void DFSDM1_FLT2_IRQHandler();
WEAK_DEFAULT void DFSDM1_FLT3_IRQHandler();
WEAK_DEFAULT void SAI3_IRQHandler();
WEAK_DEFAULT void SWPMI1_IRQHandler();
WEAK_DEFAULT void TIM15_IRQHandler();
WEAK_DEFAULT void TIM16_IRQHandler();
WEAK_DEFAULT void TIM17_IRQHandler();
WEAK_DEFAULT void MDIOS_WKUP_IRQHandler();
WEAK_DEFAULT void MDIOS_IRQHandler();
WEAK_DEFAULT void JPEG_IRQHandler();
WEAK_DEFAULT void MDMA_IRQHandler();
WEAK_DEFAULT void DSI_IRQHandler();
WEAK_DEFAULT void SDMMC2_IRQHandler();
WEAK_DEFAULT void HSEM1_IRQHandler();
WEAK_DEFAULT void HSEM2_IRQHandler();
WEAK_DEFAULT void ADC3_IRQHandler();
WEAK_DEFAULT void DMAMUX2_OVR_IRQHandler();
WEAK_DEFAULT void BDMA_Channel0_IRQHandler();
WEAK_DEFAULT void BDMA_Channel1_IRQHandler();
WEAK_DEFAULT void BDMA_Channel2_IRQHandler();
WEAK_DEFAULT void BDMA_Channel3_IRQHandler();
WEAK_DEFAULT void BDMA_Channel4_IRQHandler();
WEAK_DEFAULT void BDMA_Channel5_IRQHandler();
WEAK_DEFAULT void BDMA_Channel6_IRQHandler();
WEAK_DEFAULT void BDMA_Channel7_IRQHandler();
WEAK_DEFAULT void COMP_IRQHandler();
WEAK_DEFAULT void LPTIM2_IRQHandler();
WEAK_DEFAULT void LPTIM3_IRQHandler();
WEAK_DEFAULT void LPTIM4_IRQHandler();
WEAK_DEFAULT void LPTIM5_IRQHandler();
WEAK_DEFAULT void LPUART1_IRQHandler();
WEAK_DEFAULT void WWDG_RST_IRQHandler();
WEAK_DEFAULT void CRS_IRQHandler();
WEAK_DEFAULT void ECC_IRQHandler();
WEAK_DEFAULT void SAI4_IRQHandler();
WEAK_DEFAULT void HOLD_CORE_IRQHandler();
WEAK_DEFAULT void WAKEUP_PIN_IRQHandler();
/* CPU specific interrupt vector table */
const isr_t g_pnfVectors[] ISR_VECTOR = {
[0] = (isr_t)&_estack,
[1 ] = Reset_Handler,
[2 ] = NMI_Handler,
[3 ] = HardFault_Handler,
[4 ] = MemManage_Handler,
[5 ] = BusFault_Handler,
[6 ] = UsageFault_Handler,
[7 ] = 0,
[8 ] = 0,
[9 ] = 0,
[10 ] = 0,
[11 ] = SVC_Handler,
[12 ] = DebugMon_Handler,
[13 ] = 0,
[14 ] = PendSV_Handler,
[15 ] = SysTick_Handler,
[WWDG_IRQn + 16 ] = WWDG_IRQHandler,
[PVD_AVD_IRQn + 16 ] = PVD_AVD_IRQHandler,
[TAMP_STAMP_IRQn + 16 ] = TAMP_STAMP_IRQHandler,
[RTC_WKUP_IRQn + 16 ] = RTC_WKUP_IRQHandler,
[FLASH_IRQn + 16 ] = FLASH_IRQHandler,
[RCC_IRQn + 16 ] = RCC_IRQHandler,
[EXTI0_IRQn + 16 ] = EXTI0_IRQHandler,
[EXTI1_IRQn + 16 ] = EXTI1_IRQHandler,
[EXTI2_IRQn + 16 ] = EXTI2_IRQHandler,
[EXTI3_IRQn + 16 ] = EXTI3_IRQHandler,
[EXTI4_IRQn + 16 ] = EXTI4_IRQHandler,
[DMA1_Stream0_IRQn + 16 ] = DMA1_Stream0_IRQHandler,
[DMA1_Stream1_IRQn + 16 ] = DMA1_Stream1_IRQHandler,
[DMA1_Stream2_IRQn + 16 ] = DMA1_Stream2_IRQHandler,
[DMA1_Stream3_IRQn + 16 ] = DMA1_Stream3_IRQHandler,
[DMA1_Stream4_IRQn + 16 ] = DMA1_Stream4_IRQHandler,
[DMA1_Stream5_IRQn + 16 ] = DMA1_Stream5_IRQHandler,
[DMA1_Stream6_IRQn + 16 ] = DMA1_Stream6_IRQHandler,
[ADC_IRQn + 16 ] = ADC_IRQHandler,
[FDCAN1_IT0_IRQn + 16 ] = FDCAN1_IT0_IRQHandler,
[FDCAN2_IT0_IRQn + 16 ] = FDCAN2_IT0_IRQHandler,
[FDCAN1_IT1_IRQn + 16 ] = FDCAN1_IT1_IRQHandler,
[FDCAN2_IT1_IRQn + 16 ] = FDCAN2_IT1_IRQHandler,
[EXTI9_5_IRQn + 16 ] = EXTI9_5_IRQHandler,
[TIM1_BRK_IRQn + 16 ] = TIM1_BRK_IRQHandler,
[TIM1_UP_IRQn + 16 ] = TIM1_UP_IRQHandler,
[TIM1_TRG_COM_IRQn + 16 ] = TIM1_TRG_COM_IRQHandler,
[TIM1_CC_IRQn + 16 ] = TIM1_CC_IRQHandler,
[TIM2_IRQn + 16 ] = TIM2_IRQHandler,
[TIM3_IRQn + 16 ] = TIM3_IRQHandler,
[TIM4_IRQn + 16 ] = TIM4_IRQHandler,
[I2C1_EV_IRQn + 16 ] = I2C1_EV_IRQHandler,
[I2C1_ER_IRQn + 16 ] = I2C1_ER_IRQHandler,
[I2C2_EV_IRQn + 16 ] = I2C2_EV_IRQHandler,
[I2C2_ER_IRQn + 16 ] = I2C2_ER_IRQHandler,
[SPI1_IRQn + 16 ] = SPI1_IRQHandler,
[SPI2_IRQn + 16 ] = SPI2_IRQHandler,
[USART1_IRQn + 16 ] = USART1_IRQHandler,
[USART2_IRQn + 16 ] = USART2_IRQHandler,
[USART3_IRQn + 16 ] = USART3_IRQHandler,
[EXTI15_10_IRQn + 16 ] = EXTI15_10_IRQHandler,
[RTC_Alarm_IRQn + 16 ] = RTC_Alarm_IRQHandler,
[TIM8_BRK_TIM12_IRQn + 16 ] = TIM8_BRK_TIM12_IRQHandler,
[TIM8_UP_TIM13_IRQn + 16 ] = TIM8_UP_TIM13_IRQHandler,
[TIM8_TRG_COM_TIM14_IRQn + 16 ] = TIM8_TRG_COM_TIM14_IRQHandler,
[TIM8_CC_IRQn + 16 ] = TIM8_CC_IRQHandler,
[DMA1_Stream7_IRQn + 16 ] = DMA1_Stream7_IRQHandler,
[FMC_IRQn + 16 ] = FMC_IRQHandler,
[SDMMC1_IRQn + 16 ] = SDMMC1_IRQHandler,
[TIM5_IRQn + 16 ] = TIM5_IRQHandler,
[SPI3_IRQn + 16 ] = SPI3_IRQHandler,
[UART4_IRQn + 16 ] = UART4_IRQHandler,
[UART5_IRQn + 16 ] = UART5_IRQHandler,
[TIM6_DAC_IRQn + 16 ] = TIM6_DAC_IRQHandler,
[TIM7_IRQn + 16 ] = TIM7_IRQHandler,
[DMA2_Stream0_IRQn + 16 ] = DMA2_Stream0_IRQHandler,
[DMA2_Stream1_IRQn + 16 ] = DMA2_Stream1_IRQHandler,
[DMA2_Stream2_IRQn + 16 ] = DMA2_Stream2_IRQHandler,
[DMA2_Stream3_IRQn + 16 ] = DMA2_Stream3_IRQHandler,
[DMA2_Stream4_IRQn + 16 ] = DMA2_Stream4_IRQHandler,
[ETH_IRQn + 16 ] = ETH_IRQHandler,
[ETH_WKUP_IRQn + 16 ] = ETH_WKUP_IRQHandler,
[FDCAN_CAL_IRQn + 16 ] = FDCAN_CAL_IRQHandler,
[CM7_SEV_IRQn + 16 ] = CM7_SEV_IRQHandler,
[CM4_SEV_IRQn + 16 ] = CM4_SEV_IRQHandler,
[DMA2_Stream5_IRQn + 16 ] = DMA2_Stream5_IRQHandler,
[DMA2_Stream6_IRQn + 16 ] = DMA2_Stream6_IRQHandler,
[DMA2_Stream7_IRQn + 16 ] = DMA2_Stream7_IRQHandler,
[USART6_IRQn + 16 ] = USART6_IRQHandler,
[I2C3_EV_IRQn + 16 ] = I2C3_EV_IRQHandler,
[I2C3_ER_IRQn + 16 ] = I2C3_ER_IRQHandler,
[OTG_HS_EP1_OUT_IRQn + 16 ] = OTG_HS_EP1_OUT_IRQHandler,
[OTG_HS_EP1_IN_IRQn + 16 ] = OTG_HS_EP1_IN_IRQHandler,
[OTG_HS_WKUP_IRQn + 16 ] = OTG_HS_WKUP_IRQHandler,
[OTG_HS_IRQn + 16 ] = OTG_HS_IRQHandler,
[DCMI_IRQn + 16 ] = DCMI_IRQHandler,
[RNG_IRQn + 16 ] = RNG_IRQHandler,
[FPU_IRQn + 16 ] = FPU_IRQHandler,
[UART7_IRQn + 16 ] = UART7_IRQHandler,
[UART8_IRQn + 16 ] = UART8_IRQHandler,
[SPI4_IRQn + 16 ] = SPI4_IRQHandler,
[SPI5_IRQn + 16 ] = SPI5_IRQHandler,
[SPI6_IRQn + 16 ] = SPI6_IRQHandler,
[SAI1_IRQn + 16 ] = SAI1_IRQHandler,
[LTDC_IRQn + 16 ] = LTDC_IRQHandler,
[LTDC_ER_IRQn + 16 ] = LTDC_ER_IRQHandler,
[DMA2D_IRQn + 16 ] = DMA2D_IRQHandler,
[SAI2_IRQn + 16 ] = SAI2_IRQHandler,
[QUADSPI_IRQn + 16 ] = QUADSPI_IRQHandler,
[LPTIM1_IRQn + 16 ] = LPTIM1_IRQHandler,
[CEC_IRQn + 16 ] = CEC_IRQHandler,
[I2C4_EV_IRQn + 16 ] = I2C4_EV_IRQHandler,
[I2C4_ER_IRQn + 16 ] = I2C4_ER_IRQHandler,
[SPDIF_RX_IRQn + 16 ] = SPDIF_RX_IRQHandler,
[OTG_FS_EP1_OUT_IRQn + 16 ] = OTG_FS_EP1_OUT_IRQHandler,
[OTG_FS_EP1_IN_IRQn + 16 ] = OTG_FS_EP1_IN_IRQHandler,
[OTG_FS_WKUP_IRQn + 16 ] = OTG_FS_WKUP_IRQHandler,
[OTG_FS_IRQn + 16 ] = OTG_FS_IRQHandler,
[DMAMUX1_OVR_IRQn + 16 ] = DMAMUX1_OVR_IRQHandler,
[HRTIM1_Master_IRQn + 16 ] = HRTIM1_Master_IRQHandler,
[HRTIM1_TIMA_IRQn + 16 ] = HRTIM1_TIMA_IRQHandler,
[HRTIM1_TIMB_IRQn + 16 ] = HRTIM1_TIMB_IRQHandler,
[HRTIM1_TIMC_IRQn + 16 ] = HRTIM1_TIMC_IRQHandler,
[HRTIM1_TIMD_IRQn + 16 ] = HRTIM1_TIMD_IRQHandler,
[HRTIM1_TIME_IRQn + 16 ] = HRTIM1_TIME_IRQHandler,
[HRTIM1_FLT_IRQn + 16 ] = HRTIM1_FLT_IRQHandler,
[DFSDM1_FLT0_IRQn + 16 ] = DFSDM1_FLT0_IRQHandler,
[DFSDM1_FLT1_IRQn + 16 ] = DFSDM1_FLT1_IRQHandler,
[DFSDM1_FLT2_IRQn + 16 ] = DFSDM1_FLT2_IRQHandler,
[DFSDM1_FLT3_IRQn + 16 ] = DFSDM1_FLT3_IRQHandler,
[SAI3_IRQn + 16 ] = SAI3_IRQHandler,
[SWPMI1_IRQn + 16 ] = SWPMI1_IRQHandler,
[TIM15_IRQn + 16 ] = TIM15_IRQHandler,
[TIM16_IRQn + 16 ] = TIM16_IRQHandler,
[TIM17_IRQn + 16 ] = TIM17_IRQHandler,
[MDIOS_WKUP_IRQn + 16 ] = MDIOS_WKUP_IRQHandler,
[MDIOS_IRQn + 16 ] = MDIOS_IRQHandler,
[JPEG_IRQn + 16 ] = JPEG_IRQHandler,
[MDMA_IRQn + 16 ] = MDMA_IRQHandler,
[DSI_IRQn + 16 ] = DSI_IRQHandler,
[SDMMC2_IRQn + 16 ] = SDMMC2_IRQHandler,
[HSEM1_IRQn + 16 ] = HSEM1_IRQHandler,
[HSEM2_IRQn + 16 ] = HSEM2_IRQHandler,
[ADC3_IRQn + 16 ] = ADC3_IRQHandler,
[DMAMUX2_OVR_IRQn + 16 ] = DMAMUX2_OVR_IRQHandler,
[BDMA_Channel0_IRQn + 16 ] = BDMA_Channel0_IRQHandler,
[BDMA_Channel1_IRQn + 16 ] = BDMA_Channel1_IRQHandler,
[BDMA_Channel2_IRQn + 16 ] = BDMA_Channel2_IRQHandler,
[BDMA_Channel3_IRQn + 16 ] = BDMA_Channel3_IRQHandler,
[BDMA_Channel4_IRQn + 16 ] = BDMA_Channel4_IRQHandler,
[BDMA_Channel5_IRQn + 16 ] = BDMA_Channel5_IRQHandler,
[BDMA_Channel6_IRQn + 16 ] = BDMA_Channel6_IRQHandler,
[BDMA_Channel7_IRQn + 16 ] = BDMA_Channel7_IRQHandler,
[COMP_IRQn + 16 ] = COMP_IRQHandler,
[LPTIM2_IRQn + 16 ] = LPTIM2_IRQHandler,
[LPTIM3_IRQn + 16 ] = LPTIM3_IRQHandler,
[LPTIM4_IRQn + 16 ] = LPTIM4_IRQHandler,
[LPTIM5_IRQn + 16 ] = LPTIM5_IRQHandler,
[LPUART1_IRQn + 16 ] = LPUART1_IRQHandler,
[WWDG_RST_IRQn + 16 ] = WWDG_RST_IRQHandler,
[CRS_IRQn + 16 ] = CRS_IRQHandler,
[ECC_IRQn + 16 ] = ECC_IRQHandler,
[SAI4_IRQn + 16 ] = SAI4_IRQHandler,
[HOLD_CORE_IRQn + 16 ] = HOLD_CORE_IRQHandler,
[WAKEUP_PIN_IRQn + 16 ] = WAKEUP_PIN_IRQHandler,
};
@@ -0,0 +1,318 @@
#include "stm32h750xx.h"
#include "cortex_m_isr.h"
void Default_Handler() { default_isr_handler(); }
/* stm32h750xx specific interrupt vectors */
WEAK_DEFAULT void Reset_Handler();
WEAK_DEFAULT void NMI_Handler();
WEAK_DEFAULT void HardFault_Handler();
WEAK_DEFAULT void MemManage_Handler();
WEAK_DEFAULT void BusFault_Handler();
WEAK_DEFAULT void UsageFault_Handler();
WEAK_DEFAULT void SVC_Handler();
WEAK_DEFAULT void DebugMon_Handler();
WEAK_DEFAULT void PendSV_Handler();
WEAK_DEFAULT void SysTick_Handler();
WEAK_DEFAULT void WWDG_IRQHandler();
WEAK_DEFAULT void PVD_AVD_IRQHandler();
WEAK_DEFAULT void TAMP_STAMP_IRQHandler();
WEAK_DEFAULT void RTC_WKUP_IRQHandler();
WEAK_DEFAULT void FLASH_IRQHandler();
WEAK_DEFAULT void RCC_IRQHandler();
WEAK_DEFAULT void EXTI0_IRQHandler();
WEAK_DEFAULT void EXTI1_IRQHandler();
WEAK_DEFAULT void EXTI2_IRQHandler();
WEAK_DEFAULT void EXTI3_IRQHandler();
WEAK_DEFAULT void EXTI4_IRQHandler();
WEAK_DEFAULT void DMA1_Stream0_IRQHandler();
WEAK_DEFAULT void DMA1_Stream1_IRQHandler();
WEAK_DEFAULT void DMA1_Stream2_IRQHandler();
WEAK_DEFAULT void DMA1_Stream3_IRQHandler();
WEAK_DEFAULT void DMA1_Stream4_IRQHandler();
WEAK_DEFAULT void DMA1_Stream5_IRQHandler();
WEAK_DEFAULT void DMA1_Stream6_IRQHandler();
WEAK_DEFAULT void ADC_IRQHandler();
WEAK_DEFAULT void FDCAN1_IT0_IRQHandler();
WEAK_DEFAULT void FDCAN2_IT0_IRQHandler();
WEAK_DEFAULT void FDCAN1_IT1_IRQHandler();
WEAK_DEFAULT void FDCAN2_IT1_IRQHandler();
WEAK_DEFAULT void EXTI9_5_IRQHandler();
WEAK_DEFAULT void TIM1_BRK_IRQHandler();
WEAK_DEFAULT void TIM1_UP_IRQHandler();
WEAK_DEFAULT void TIM1_TRG_COM_IRQHandler();
WEAK_DEFAULT void TIM1_CC_IRQHandler();
WEAK_DEFAULT void TIM2_IRQHandler();
WEAK_DEFAULT void TIM3_IRQHandler();
WEAK_DEFAULT void TIM4_IRQHandler();
WEAK_DEFAULT void I2C1_EV_IRQHandler();
WEAK_DEFAULT void I2C1_ER_IRQHandler();
WEAK_DEFAULT void I2C2_EV_IRQHandler();
WEAK_DEFAULT void I2C2_ER_IRQHandler();
WEAK_DEFAULT void SPI1_IRQHandler();
WEAK_DEFAULT void SPI2_IRQHandler();
WEAK_DEFAULT void USART1_IRQHandler();
WEAK_DEFAULT void USART2_IRQHandler();
WEAK_DEFAULT void USART3_IRQHandler();
WEAK_DEFAULT void EXTI15_10_IRQHandler();
WEAK_DEFAULT void RTC_Alarm_IRQHandler();
WEAK_DEFAULT void TIM8_BRK_TIM12_IRQHandler();
WEAK_DEFAULT void TIM8_UP_TIM13_IRQHandler();
WEAK_DEFAULT void TIM8_TRG_COM_TIM14_IRQHandler();
WEAK_DEFAULT void TIM8_CC_IRQHandler();
WEAK_DEFAULT void DMA1_Stream7_IRQHandler();
WEAK_DEFAULT void FMC_IRQHandler();
WEAK_DEFAULT void SDMMC1_IRQHandler();
WEAK_DEFAULT void TIM5_IRQHandler();
WEAK_DEFAULT void SPI3_IRQHandler();
WEAK_DEFAULT void UART4_IRQHandler();
WEAK_DEFAULT void UART5_IRQHandler();
WEAK_DEFAULT void TIM6_DAC_IRQHandler();
WEAK_DEFAULT void TIM7_IRQHandler();
WEAK_DEFAULT void DMA2_Stream0_IRQHandler();
WEAK_DEFAULT void DMA2_Stream1_IRQHandler();
WEAK_DEFAULT void DMA2_Stream2_IRQHandler();
WEAK_DEFAULT void DMA2_Stream3_IRQHandler();
WEAK_DEFAULT void DMA2_Stream4_IRQHandler();
WEAK_DEFAULT void ETH_IRQHandler();
WEAK_DEFAULT void ETH_WKUP_IRQHandler();
WEAK_DEFAULT void FDCAN_CAL_IRQHandler();
WEAK_DEFAULT void DMA2_Stream5_IRQHandler();
WEAK_DEFAULT void DMA2_Stream6_IRQHandler();
WEAK_DEFAULT void DMA2_Stream7_IRQHandler();
WEAK_DEFAULT void USART6_IRQHandler();
WEAK_DEFAULT void I2C3_EV_IRQHandler();
WEAK_DEFAULT void I2C3_ER_IRQHandler();
WEAK_DEFAULT void OTG_HS_EP1_OUT_IRQHandler();
WEAK_DEFAULT void OTG_HS_EP1_IN_IRQHandler();
WEAK_DEFAULT void OTG_HS_WKUP_IRQHandler();
WEAK_DEFAULT void OTG_HS_IRQHandler();
WEAK_DEFAULT void DCMI_IRQHandler();
WEAK_DEFAULT void CRYP_IRQHandler();
WEAK_DEFAULT void HASH_RNG_IRQHandler();
WEAK_DEFAULT void FPU_IRQHandler();
WEAK_DEFAULT void UART7_IRQHandler();
WEAK_DEFAULT void UART8_IRQHandler();
WEAK_DEFAULT void SPI4_IRQHandler();
WEAK_DEFAULT void SPI5_IRQHandler();
WEAK_DEFAULT void SPI6_IRQHandler();
WEAK_DEFAULT void SAI1_IRQHandler();
WEAK_DEFAULT void LTDC_IRQHandler();
WEAK_DEFAULT void LTDC_ER_IRQHandler();
WEAK_DEFAULT void DMA2D_IRQHandler();
WEAK_DEFAULT void SAI2_IRQHandler();
WEAK_DEFAULT void QUADSPI_IRQHandler();
WEAK_DEFAULT void LPTIM1_IRQHandler();
WEAK_DEFAULT void CEC_IRQHandler();
WEAK_DEFAULT void I2C4_EV_IRQHandler();
WEAK_DEFAULT void I2C4_ER_IRQHandler();
WEAK_DEFAULT void SPDIF_RX_IRQHandler();
WEAK_DEFAULT void OTG_FS_EP1_OUT_IRQHandler();
WEAK_DEFAULT void OTG_FS_EP1_IN_IRQHandler();
WEAK_DEFAULT void OTG_FS_WKUP_IRQHandler();
WEAK_DEFAULT void OTG_FS_IRQHandler();
WEAK_DEFAULT void DMAMUX1_OVR_IRQHandler();
WEAK_DEFAULT void HRTIM1_Master_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIMA_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIMB_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIMC_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIMD_IRQHandler();
WEAK_DEFAULT void HRTIM1_TIME_IRQHandler();
WEAK_DEFAULT void HRTIM1_FLT_IRQHandler();
WEAK_DEFAULT void DFSDM1_FLT0_IRQHandler();
WEAK_DEFAULT void DFSDM1_FLT1_IRQHandler();
WEAK_DEFAULT void DFSDM1_FLT2_IRQHandler();
WEAK_DEFAULT void DFSDM1_FLT3_IRQHandler();
WEAK_DEFAULT void SAI3_IRQHandler();
WEAK_DEFAULT void SWPMI1_IRQHandler();
WEAK_DEFAULT void TIM15_IRQHandler();
WEAK_DEFAULT void TIM16_IRQHandler();
WEAK_DEFAULT void TIM17_IRQHandler();
WEAK_DEFAULT void MDIOS_WKUP_IRQHandler();
WEAK_DEFAULT void MDIOS_IRQHandler();
WEAK_DEFAULT void JPEG_IRQHandler();
WEAK_DEFAULT void MDMA_IRQHandler();
WEAK_DEFAULT void SDMMC2_IRQHandler();
WEAK_DEFAULT void HSEM1_IRQHandler();
WEAK_DEFAULT void ADC3_IRQHandler();
WEAK_DEFAULT void DMAMUX2_OVR_IRQHandler();
WEAK_DEFAULT void BDMA_Channel0_IRQHandler();
WEAK_DEFAULT void BDMA_Channel1_IRQHandler();
WEAK_DEFAULT void BDMA_Channel2_IRQHandler();
WEAK_DEFAULT void BDMA_Channel3_IRQHandler();
WEAK_DEFAULT void BDMA_Channel4_IRQHandler();
WEAK_DEFAULT void BDMA_Channel5_IRQHandler();
WEAK_DEFAULT void BDMA_Channel6_IRQHandler();
WEAK_DEFAULT void BDMA_Channel7_IRQHandler();
WEAK_DEFAULT void COMP_IRQHandler();
WEAK_DEFAULT void LPTIM2_IRQHandler();
WEAK_DEFAULT void LPTIM3_IRQHandler();
WEAK_DEFAULT void LPTIM4_IRQHandler();
WEAK_DEFAULT void LPTIM5_IRQHandler();
WEAK_DEFAULT void LPUART1_IRQHandler();
WEAK_DEFAULT void CRS_IRQHandler();
WEAK_DEFAULT void ECC_IRQHandler();
WEAK_DEFAULT void SAI4_IRQHandler();
WEAK_DEFAULT void WAKEUP_PIN_IRQHandler();
/* CPU specific interrupt vector table */
const isr_t g_pnfVectors[] ISR_VECTOR = {
[0] = (isr_t)&_estack,
[1 ] = Reset_Handler,
[2 ] = NMI_Handler,
[3 ] = HardFault_Handler,
[4 ] = MemManage_Handler,
[5 ] = BusFault_Handler,
[6 ] = UsageFault_Handler,
[7 ] = 0,
[8 ] = 0,
[9 ] = 0,
[10 ] = 0,
[11 ] = SVC_Handler,
[12 ] = DebugMon_Handler,
[13 ] = 0,
[14 ] = PendSV_Handler,
[15 ] = SysTick_Handler,
[WWDG_IRQn + 16 ] = WWDG_IRQHandler,
[PVD_AVD_IRQn + 16 ] = PVD_AVD_IRQHandler,
[TAMP_STAMP_IRQn + 16 ] = TAMP_STAMP_IRQHandler,
[RTC_WKUP_IRQn + 16 ] = RTC_WKUP_IRQHandler,
[FLASH_IRQn + 16 ] = FLASH_IRQHandler,
[RCC_IRQn + 16 ] = RCC_IRQHandler,
[EXTI0_IRQn + 16 ] = EXTI0_IRQHandler,
[EXTI1_IRQn + 16 ] = EXTI1_IRQHandler,
[EXTI2_IRQn + 16 ] = EXTI2_IRQHandler,
[EXTI3_IRQn + 16 ] = EXTI3_IRQHandler,
[EXTI4_IRQn + 16 ] = EXTI4_IRQHandler,
[DMA1_Stream0_IRQn + 16 ] = DMA1_Stream0_IRQHandler,
[DMA1_Stream1_IRQn + 16 ] = DMA1_Stream1_IRQHandler,
[DMA1_Stream2_IRQn + 16 ] = DMA1_Stream2_IRQHandler,
[DMA1_Stream3_IRQn + 16 ] = DMA1_Stream3_IRQHandler,
[DMA1_Stream4_IRQn + 16 ] = DMA1_Stream4_IRQHandler,
[DMA1_Stream5_IRQn + 16 ] = DMA1_Stream5_IRQHandler,
[DMA1_Stream6_IRQn + 16 ] = DMA1_Stream6_IRQHandler,
[ADC_IRQn + 16 ] = ADC_IRQHandler,
[FDCAN1_IT0_IRQn + 16 ] = FDCAN1_IT0_IRQHandler,
[FDCAN2_IT0_IRQn + 16 ] = FDCAN2_IT0_IRQHandler,
[FDCAN1_IT1_IRQn + 16 ] = FDCAN1_IT1_IRQHandler,
[FDCAN2_IT1_IRQn + 16 ] = FDCAN2_IT1_IRQHandler,
[EXTI9_5_IRQn + 16 ] = EXTI9_5_IRQHandler,
[TIM1_BRK_IRQn + 16 ] = TIM1_BRK_IRQHandler,
[TIM1_UP_IRQn + 16 ] = TIM1_UP_IRQHandler,
[TIM1_TRG_COM_IRQn + 16 ] = TIM1_TRG_COM_IRQHandler,
[TIM1_CC_IRQn + 16 ] = TIM1_CC_IRQHandler,
[TIM2_IRQn + 16 ] = TIM2_IRQHandler,
[TIM3_IRQn + 16 ] = TIM3_IRQHandler,
[TIM4_IRQn + 16 ] = TIM4_IRQHandler,
[I2C1_EV_IRQn + 16 ] = I2C1_EV_IRQHandler,
[I2C1_ER_IRQn + 16 ] = I2C1_ER_IRQHandler,
[I2C2_EV_IRQn + 16 ] = I2C2_EV_IRQHandler,
[I2C2_ER_IRQn + 16 ] = I2C2_ER_IRQHandler,
[SPI1_IRQn + 16 ] = SPI1_IRQHandler,
[SPI2_IRQn + 16 ] = SPI2_IRQHandler,
[USART1_IRQn + 16 ] = USART1_IRQHandler,
[USART2_IRQn + 16 ] = USART2_IRQHandler,
[USART3_IRQn + 16 ] = USART3_IRQHandler,
[EXTI15_10_IRQn + 16 ] = EXTI15_10_IRQHandler,
[RTC_Alarm_IRQn + 16 ] = RTC_Alarm_IRQHandler,
[TIM8_BRK_TIM12_IRQn + 16 ] = TIM8_BRK_TIM12_IRQHandler,
[TIM8_UP_TIM13_IRQn + 16 ] = TIM8_UP_TIM13_IRQHandler,
[TIM8_TRG_COM_TIM14_IRQn + 16 ] = TIM8_TRG_COM_TIM14_IRQHandler,
[TIM8_CC_IRQn + 16 ] = TIM8_CC_IRQHandler,
[DMA1_Stream7_IRQn + 16 ] = DMA1_Stream7_IRQHandler,
[FMC_IRQn + 16 ] = FMC_IRQHandler,
[SDMMC1_IRQn + 16 ] = SDMMC1_IRQHandler,
[TIM5_IRQn + 16 ] = TIM5_IRQHandler,
[SPI3_IRQn + 16 ] = SPI3_IRQHandler,
[UART4_IRQn + 16 ] = UART4_IRQHandler,
[UART5_IRQn + 16 ] = UART5_IRQHandler,
[TIM6_DAC_IRQn + 16 ] = TIM6_DAC_IRQHandler,
[TIM7_IRQn + 16 ] = TIM7_IRQHandler,
[DMA2_Stream0_IRQn + 16 ] = DMA2_Stream0_IRQHandler,
[DMA2_Stream1_IRQn + 16 ] = DMA2_Stream1_IRQHandler,
[DMA2_Stream2_IRQn + 16 ] = DMA2_Stream2_IRQHandler,
[DMA2_Stream3_IRQn + 16 ] = DMA2_Stream3_IRQHandler,
[DMA2_Stream4_IRQn + 16 ] = DMA2_Stream4_IRQHandler,
[ETH_IRQn + 16 ] = ETH_IRQHandler,
[ETH_WKUP_IRQn + 16 ] = ETH_WKUP_IRQHandler,
[FDCAN_CAL_IRQn + 16 ] = FDCAN_CAL_IRQHandler,
[DMA2_Stream5_IRQn + 16 ] = DMA2_Stream5_IRQHandler,
[DMA2_Stream6_IRQn + 16 ] = DMA2_Stream6_IRQHandler,
[DMA2_Stream7_IRQn + 16 ] = DMA2_Stream7_IRQHandler,
[USART6_IRQn + 16 ] = USART6_IRQHandler,
[I2C3_EV_IRQn + 16 ] = I2C3_EV_IRQHandler,
[I2C3_ER_IRQn + 16 ] = I2C3_ER_IRQHandler,
[OTG_HS_EP1_OUT_IRQn + 16 ] = OTG_HS_EP1_OUT_IRQHandler,
[OTG_HS_EP1_IN_IRQn + 16 ] = OTG_HS_EP1_IN_IRQHandler,
[OTG_HS_WKUP_IRQn + 16 ] = OTG_HS_WKUP_IRQHandler,
[OTG_HS_IRQn + 16 ] = OTG_HS_IRQHandler,
[DCMI_IRQn + 16 ] = DCMI_IRQHandler,
[CRYP_IRQn + 16 ] = CRYP_IRQHandler,
[HASH_RNG_IRQn + 16 ] = HASH_RNG_IRQHandler,
[FPU_IRQn + 16 ] = FPU_IRQHandler,
[UART7_IRQn + 16 ] = UART7_IRQHandler,
[UART8_IRQn + 16 ] = UART8_IRQHandler,
[SPI4_IRQn + 16 ] = SPI4_IRQHandler,
[SPI5_IRQn + 16 ] = SPI5_IRQHandler,
[SPI6_IRQn + 16 ] = SPI6_IRQHandler,
[SAI1_IRQn + 16 ] = SAI1_IRQHandler,
[LTDC_IRQn + 16 ] = LTDC_IRQHandler,
[LTDC_ER_IRQn + 16 ] = LTDC_ER_IRQHandler,
[DMA2D_IRQn + 16 ] = DMA2D_IRQHandler,
[SAI2_IRQn + 16 ] = SAI2_IRQHandler,
[QUADSPI_IRQn + 16 ] = QUADSPI_IRQHandler,
[LPTIM1_IRQn + 16 ] = LPTIM1_IRQHandler,
[CEC_IRQn + 16 ] = CEC_IRQHandler,
[I2C4_EV_IRQn + 16 ] = I2C4_EV_IRQHandler,
[I2C4_ER_IRQn + 16 ] = I2C4_ER_IRQHandler,
[SPDIF_RX_IRQn + 16 ] = SPDIF_RX_IRQHandler,
[OTG_FS_EP1_OUT_IRQn + 16 ] = OTG_FS_EP1_OUT_IRQHandler,
[OTG_FS_EP1_IN_IRQn + 16 ] = OTG_FS_EP1_IN_IRQHandler,
[OTG_FS_WKUP_IRQn + 16 ] = OTG_FS_WKUP_IRQHandler,
[OTG_FS_IRQn + 16 ] = OTG_FS_IRQHandler,
[DMAMUX1_OVR_IRQn + 16 ] = DMAMUX1_OVR_IRQHandler,
[HRTIM1_Master_IRQn + 16 ] = HRTIM1_Master_IRQHandler,
[HRTIM1_TIMA_IRQn + 16 ] = HRTIM1_TIMA_IRQHandler,
[HRTIM1_TIMB_IRQn + 16 ] = HRTIM1_TIMB_IRQHandler,
[HRTIM1_TIMC_IRQn + 16 ] = HRTIM1_TIMC_IRQHandler,
[HRTIM1_TIMD_IRQn + 16 ] = HRTIM1_TIMD_IRQHandler,
[HRTIM1_TIME_IRQn + 16 ] = HRTIM1_TIME_IRQHandler,
[HRTIM1_FLT_IRQn + 16 ] = HRTIM1_FLT_IRQHandler,
[DFSDM1_FLT0_IRQn + 16 ] = DFSDM1_FLT0_IRQHandler,
[DFSDM1_FLT1_IRQn + 16 ] = DFSDM1_FLT1_IRQHandler,
[DFSDM1_FLT2_IRQn + 16 ] = DFSDM1_FLT2_IRQHandler,
[DFSDM1_FLT3_IRQn + 16 ] = DFSDM1_FLT3_IRQHandler,
[SAI3_IRQn + 16 ] = SAI3_IRQHandler,
[SWPMI1_IRQn + 16 ] = SWPMI1_IRQHandler,
[TIM15_IRQn + 16 ] = TIM15_IRQHandler,
[TIM16_IRQn + 16 ] = TIM16_IRQHandler,
[TIM17_IRQn + 16 ] = TIM17_IRQHandler,
[MDIOS_WKUP_IRQn + 16 ] = MDIOS_WKUP_IRQHandler,
[MDIOS_IRQn + 16 ] = MDIOS_IRQHandler,
[JPEG_IRQn + 16 ] = JPEG_IRQHandler,
[MDMA_IRQn + 16 ] = MDMA_IRQHandler,
[SDMMC2_IRQn + 16 ] = SDMMC2_IRQHandler,
[HSEM1_IRQn + 16 ] = HSEM1_IRQHandler,
[ADC3_IRQn + 16 ] = ADC3_IRQHandler,
[DMAMUX2_OVR_IRQn + 16 ] = DMAMUX2_OVR_IRQHandler,
[BDMA_Channel0_IRQn + 16 ] = BDMA_Channel0_IRQHandler,
[BDMA_Channel1_IRQn + 16 ] = BDMA_Channel1_IRQHandler,
[BDMA_Channel2_IRQn + 16 ] = BDMA_Channel2_IRQHandler,
[BDMA_Channel3_IRQn + 16 ] = BDMA_Channel3_IRQHandler,
[BDMA_Channel4_IRQn + 16 ] = BDMA_Channel4_IRQHandler,
[BDMA_Channel5_IRQn + 16 ] = BDMA_Channel5_IRQHandler,
[BDMA_Channel6_IRQn + 16 ] = BDMA_Channel6_IRQHandler,
[BDMA_Channel7_IRQn + 16 ] = BDMA_Channel7_IRQHandler,
[COMP_IRQn + 16 ] = COMP_IRQHandler,
[LPTIM2_IRQn + 16 ] = LPTIM2_IRQHandler,
[LPTIM3_IRQn + 16 ] = LPTIM3_IRQHandler,
[LPTIM4_IRQn + 16 ] = LPTIM4_IRQHandler,
[LPTIM5_IRQn + 16 ] = LPTIM5_IRQHandler,
[LPUART1_IRQn + 16 ] = LPUART1_IRQHandler,
[CRS_IRQn + 16 ] = CRS_IRQHandler,
[ECC_IRQn + 16 ] = ECC_IRQHandler,
[SAI4_IRQn + 16 ] = SAI4_IRQHandler,
[WAKEUP_PIN_IRQn + 16 ] = WAKEUP_PIN_IRQHandler,
};
@@ -0,0 +1,332 @@
#include "stm32h7s7xx.h"
#include "cortex_m_isr.h"
void Default_Handler() { default_isr_handler(); }
/* stm32h7s7xx specific interrupt vectors */
WEAK_DEFAULT void Reset_Handler();
WEAK_DEFAULT void NMI_Handler();
WEAK_DEFAULT void HardFault_Handler();
WEAK_DEFAULT void MemManage_Handler();
WEAK_DEFAULT void BusFault_Handler();
WEAK_DEFAULT void UsageFault_Handler();
WEAK_DEFAULT void SVC_Handler();
WEAK_DEFAULT void DebugMon_Handler();
WEAK_DEFAULT void PendSV_Handler();
WEAK_DEFAULT void SysTick_Handler();
WEAK_DEFAULT void PVD_PVM_IRQHandler();
WEAK_DEFAULT void DTS_IRQHandler();
WEAK_DEFAULT void IWDG_IRQHandler();
WEAK_DEFAULT void WWDG_IRQHandler();
WEAK_DEFAULT void RCC_IRQHandler();
WEAK_DEFAULT void FLASH_IRQHandler();
WEAK_DEFAULT void RAMECC_IRQHandler();
WEAK_DEFAULT void FPU_IRQHandler();
WEAK_DEFAULT void TAMP_IRQHandler();
WEAK_DEFAULT void EXTI0_IRQHandler();
WEAK_DEFAULT void EXTI1_IRQHandler();
WEAK_DEFAULT void EXTI2_IRQHandler();
WEAK_DEFAULT void EXTI3_IRQHandler();
WEAK_DEFAULT void EXTI4_IRQHandler();
WEAK_DEFAULT void EXTI5_IRQHandler();
WEAK_DEFAULT void EXTI6_IRQHandler();
WEAK_DEFAULT void EXTI7_IRQHandler();
WEAK_DEFAULT void EXTI8_IRQHandler();
WEAK_DEFAULT void EXTI9_IRQHandler();
WEAK_DEFAULT void EXTI10_IRQHandler();
WEAK_DEFAULT void EXTI11_IRQHandler();
WEAK_DEFAULT void EXTI12_IRQHandler();
WEAK_DEFAULT void EXTI13_IRQHandler();
WEAK_DEFAULT void EXTI14_IRQHandler();
WEAK_DEFAULT void EXTI15_IRQHandler();
WEAK_DEFAULT void RTC_IRQHandler();
WEAK_DEFAULT void SAES_IRQHandler();
WEAK_DEFAULT void CRYP_IRQHandler();
WEAK_DEFAULT void PKA_IRQHandler();
WEAK_DEFAULT void HASH_IRQHandler();
WEAK_DEFAULT void RNG_IRQHandler();
WEAK_DEFAULT void ADC1_2_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel0_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel1_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel2_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel3_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel4_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel5_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel6_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel7_IRQHandler();
WEAK_DEFAULT void TIM1_BRK_IRQHandler();
WEAK_DEFAULT void TIM1_UP_IRQHandler();
WEAK_DEFAULT void TIM1_TRG_COM_IRQHandler();
WEAK_DEFAULT void TIM1_CC_IRQHandler();
WEAK_DEFAULT void TIM2_IRQHandler();
WEAK_DEFAULT void TIM3_IRQHandler();
WEAK_DEFAULT void TIM4_IRQHandler();
WEAK_DEFAULT void TIM5_IRQHandler();
WEAK_DEFAULT void TIM6_IRQHandler();
WEAK_DEFAULT void TIM7_IRQHandler();
WEAK_DEFAULT void TIM9_IRQHandler();
WEAK_DEFAULT void SPI1_IRQHandler();
WEAK_DEFAULT void SPI2_IRQHandler();
WEAK_DEFAULT void SPI3_IRQHandler();
WEAK_DEFAULT void SPI4_IRQHandler();
WEAK_DEFAULT void SPI5_IRQHandler();
WEAK_DEFAULT void SPI6_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel0_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel1_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel2_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel3_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel4_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel5_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel6_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel7_IRQHandler();
WEAK_DEFAULT void SAI1_A_IRQHandler();
WEAK_DEFAULT void SAI1_B_IRQHandler();
WEAK_DEFAULT void SAI2_A_IRQHandler();
WEAK_DEFAULT void SAI2_B_IRQHandler();
WEAK_DEFAULT void I2C1_EV_IRQHandler();
WEAK_DEFAULT void I2C1_ER_IRQHandler();
WEAK_DEFAULT void I2C2_EV_IRQHandler();
WEAK_DEFAULT void I2C2_ER_IRQHandler();
WEAK_DEFAULT void I2C3_EV_IRQHandler();
WEAK_DEFAULT void I2C3_ER_IRQHandler();
WEAK_DEFAULT void USART1_IRQHandler();
WEAK_DEFAULT void USART2_IRQHandler();
WEAK_DEFAULT void USART3_IRQHandler();
WEAK_DEFAULT void UART4_IRQHandler();
WEAK_DEFAULT void UART5_IRQHandler();
WEAK_DEFAULT void UART7_IRQHandler();
WEAK_DEFAULT void UART8_IRQHandler();
WEAK_DEFAULT void I3C1_EV_IRQHandler();
WEAK_DEFAULT void I3C1_ER_IRQHandler();
WEAK_DEFAULT void OTG_HS_IRQHandler();
WEAK_DEFAULT void ETH_IRQHandler();
WEAK_DEFAULT void CORDIC_IRQHandler();
WEAK_DEFAULT void GFXTIM_IRQHandler();
WEAK_DEFAULT void DCMIPP_IRQHandler();
WEAK_DEFAULT void LTDC_IRQHandler();
WEAK_DEFAULT void LTDC_ER_IRQHandler();
WEAK_DEFAULT void DMA2D_IRQHandler();
WEAK_DEFAULT void JPEG_IRQHandler();
WEAK_DEFAULT void GFXMMU_IRQHandler();
WEAK_DEFAULT void I3C1_WKUP_IRQHandler();
WEAK_DEFAULT void MCE1_IRQHandler();
WEAK_DEFAULT void MCE2_IRQHandler();
WEAK_DEFAULT void MCE3_IRQHandler();
WEAK_DEFAULT void XSPI1_IRQHandler();
WEAK_DEFAULT void XSPI2_IRQHandler();
WEAK_DEFAULT void FMC_IRQHandler();
WEAK_DEFAULT void SDMMC1_IRQHandler();
WEAK_DEFAULT void SDMMC2_IRQHandler();
WEAK_DEFAULT void OTG_FS_IRQHandler();
WEAK_DEFAULT void TIM12_IRQHandler();
WEAK_DEFAULT void TIM13_IRQHandler();
WEAK_DEFAULT void TIM14_IRQHandler();
WEAK_DEFAULT void TIM15_IRQHandler();
WEAK_DEFAULT void TIM16_IRQHandler();
WEAK_DEFAULT void TIM17_IRQHandler();
WEAK_DEFAULT void LPTIM1_IRQHandler();
WEAK_DEFAULT void LPTIM2_IRQHandler();
WEAK_DEFAULT void LPTIM3_IRQHandler();
WEAK_DEFAULT void LPTIM4_IRQHandler();
WEAK_DEFAULT void LPTIM5_IRQHandler();
WEAK_DEFAULT void SPDIF_RX_IRQHandler();
WEAK_DEFAULT void MDIOS_IRQHandler();
WEAK_DEFAULT void ADF1_FLT0_IRQHandler();
WEAK_DEFAULT void CRS_IRQHandler();
WEAK_DEFAULT void UCPD1_IRQHandler();
WEAK_DEFAULT void CEC_IRQHandler();
WEAK_DEFAULT void PSSI_IRQHandler();
WEAK_DEFAULT void LPUART1_IRQHandler();
WEAK_DEFAULT void WAKEUP_PIN_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel8_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel9_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel10_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel11_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel12_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel13_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel14_IRQHandler();
WEAK_DEFAULT void GPDMA1_Channel15_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel8_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel9_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel10_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel11_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel12_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel13_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel14_IRQHandler();
WEAK_DEFAULT void HPDMA1_Channel15_IRQHandler();
WEAK_DEFAULT void GPU2D_IRQHandler();
WEAK_DEFAULT void GPU2D_ER_IRQHandler();
WEAK_DEFAULT void ICACHE_IRQHandler();
WEAK_DEFAULT void FDCAN1_IT0_IRQHandler();
WEAK_DEFAULT void FDCAN1_IT1_IRQHandler();
WEAK_DEFAULT void FDCAN2_IT0_IRQHandler();
WEAK_DEFAULT void FDCAN2_IT1_IRQHandler();
/* CPU specific interrupt vector table */
const isr_t _isr_vector[] ISR_VECTOR = {
[0] = (isr_t)&_estack,
[1 ] = Reset_Handler,
[2 ] = NMI_Handler,
[3 ] = HardFault_Handler,
[4 ] = MemManage_Handler,
[5 ] = BusFault_Handler,
[6 ] = UsageFault_Handler,
[7 ] = 0,
[8 ] = 0,
[9 ] = 0,
[10 ] = 0,
[11 ] = SVC_Handler,
[12 ] = DebugMon_Handler,
[13 ] = 0,
[14 ] = PendSV_Handler,
[15 ] = SysTick_Handler,
[PVD_PVM_IRQn + 16 ] = PVD_PVM_IRQHandler,
[DTS_IRQn + 16 ] = DTS_IRQHandler,
[IWDG_IRQn + 16 ] = IWDG_IRQHandler,
[WWDG_IRQn + 16 ] = WWDG_IRQHandler,
[RCC_IRQn + 16 ] = RCC_IRQHandler,
[FLASH_IRQn + 16 ] = FLASH_IRQHandler,
[RAMECC_IRQn + 16 ] = RAMECC_IRQHandler,
[FPU_IRQn + 16 ] = FPU_IRQHandler,
[TAMP_IRQn + 16 ] = TAMP_IRQHandler,
[EXTI0_IRQn + 16 ] = EXTI0_IRQHandler,
[EXTI1_IRQn + 16 ] = EXTI1_IRQHandler,
[EXTI2_IRQn + 16 ] = EXTI2_IRQHandler,
[EXTI3_IRQn + 16 ] = EXTI3_IRQHandler,
[EXTI4_IRQn + 16 ] = EXTI4_IRQHandler,
[EXTI5_IRQn + 16 ] = EXTI5_IRQHandler,
[EXTI6_IRQn + 16 ] = EXTI6_IRQHandler,
[EXTI7_IRQn + 16 ] = EXTI7_IRQHandler,
[EXTI8_IRQn + 16 ] = EXTI8_IRQHandler,
[EXTI9_IRQn + 16 ] = EXTI9_IRQHandler,
[EXTI10_IRQn + 16 ] = EXTI10_IRQHandler,
[EXTI11_IRQn + 16 ] = EXTI11_IRQHandler,
[EXTI12_IRQn + 16 ] = EXTI12_IRQHandler,
[EXTI13_IRQn + 16 ] = EXTI13_IRQHandler,
[EXTI14_IRQn + 16 ] = EXTI14_IRQHandler,
[EXTI15_IRQn + 16 ] = EXTI15_IRQHandler,
[RTC_IRQn + 16 ] = RTC_IRQHandler,
[SAES_IRQn + 16 ] = SAES_IRQHandler,
[CRYP_IRQn + 16 ] = CRYP_IRQHandler,
[PKA_IRQn + 16 ] = PKA_IRQHandler,
[HASH_IRQn + 16 ] = HASH_IRQHandler,
[RNG_IRQn + 16 ] = RNG_IRQHandler,
[ADC1_2_IRQn + 16 ] = ADC1_2_IRQHandler,
[GPDMA1_Channel0_IRQn + 16 ] = GPDMA1_Channel0_IRQHandler,
[GPDMA1_Channel1_IRQn + 16 ] = GPDMA1_Channel1_IRQHandler,
[GPDMA1_Channel2_IRQn + 16 ] = GPDMA1_Channel2_IRQHandler,
[GPDMA1_Channel3_IRQn + 16 ] = GPDMA1_Channel3_IRQHandler,
[GPDMA1_Channel4_IRQn + 16 ] = GPDMA1_Channel4_IRQHandler,
[GPDMA1_Channel5_IRQn + 16 ] = GPDMA1_Channel5_IRQHandler,
[GPDMA1_Channel6_IRQn + 16 ] = GPDMA1_Channel6_IRQHandler,
[GPDMA1_Channel7_IRQn + 16 ] = GPDMA1_Channel7_IRQHandler,
[TIM1_BRK_IRQn + 16 ] = TIM1_BRK_IRQHandler,
[TIM1_UP_IRQn + 16 ] = TIM1_UP_IRQHandler,
[TIM1_TRG_COM_IRQn + 16 ] = TIM1_TRG_COM_IRQHandler,
[TIM1_CC_IRQn + 16 ] = TIM1_CC_IRQHandler,
[TIM2_IRQn + 16 ] = TIM2_IRQHandler,
[TIM3_IRQn + 16 ] = TIM3_IRQHandler,
[TIM4_IRQn + 16 ] = TIM4_IRQHandler,
[TIM5_IRQn + 16 ] = TIM5_IRQHandler,
[TIM6_IRQn + 16 ] = TIM6_IRQHandler,
[TIM7_IRQn + 16 ] = TIM7_IRQHandler,
[TIM9_IRQn + 16 ] = TIM9_IRQHandler,
[SPI1_IRQn + 16 ] = SPI1_IRQHandler,
[SPI2_IRQn + 16 ] = SPI2_IRQHandler,
[SPI3_IRQn + 16 ] = SPI3_IRQHandler,
[SPI4_IRQn + 16 ] = SPI4_IRQHandler,
[SPI5_IRQn + 16 ] = SPI5_IRQHandler,
[SPI6_IRQn + 16 ] = SPI6_IRQHandler,
[HPDMA1_Channel0_IRQn + 16 ] = HPDMA1_Channel0_IRQHandler,
[HPDMA1_Channel1_IRQn + 16 ] = HPDMA1_Channel1_IRQHandler,
[HPDMA1_Channel2_IRQn + 16 ] = HPDMA1_Channel2_IRQHandler,
[HPDMA1_Channel3_IRQn + 16 ] = HPDMA1_Channel3_IRQHandler,
[HPDMA1_Channel4_IRQn + 16 ] = HPDMA1_Channel4_IRQHandler,
[HPDMA1_Channel5_IRQn + 16 ] = HPDMA1_Channel5_IRQHandler,
[HPDMA1_Channel6_IRQn + 16 ] = HPDMA1_Channel6_IRQHandler,
[HPDMA1_Channel7_IRQn + 16 ] = HPDMA1_Channel7_IRQHandler,
[SAI1_A_IRQn + 16 ] = SAI1_A_IRQHandler,
[SAI1_B_IRQn + 16 ] = SAI1_B_IRQHandler,
[SAI2_A_IRQn + 16 ] = SAI2_A_IRQHandler,
[SAI2_B_IRQn + 16 ] = SAI2_B_IRQHandler,
[I2C1_EV_IRQn + 16 ] = I2C1_EV_IRQHandler,
[I2C1_ER_IRQn + 16 ] = I2C1_ER_IRQHandler,
[I2C2_EV_IRQn + 16 ] = I2C2_EV_IRQHandler,
[I2C2_ER_IRQn + 16 ] = I2C2_ER_IRQHandler,
[I2C3_EV_IRQn + 16 ] = I2C3_EV_IRQHandler,
[I2C3_ER_IRQn + 16 ] = I2C3_ER_IRQHandler,
[USART1_IRQn + 16 ] = USART1_IRQHandler,
[USART2_IRQn + 16 ] = USART2_IRQHandler,
[USART3_IRQn + 16 ] = USART3_IRQHandler,
[UART4_IRQn + 16 ] = UART4_IRQHandler,
[UART5_IRQn + 16 ] = UART5_IRQHandler,
[UART7_IRQn + 16 ] = UART7_IRQHandler,
[UART8_IRQn + 16 ] = UART8_IRQHandler,
[I3C1_EV_IRQn + 16 ] = I3C1_EV_IRQHandler,
[I3C1_ER_IRQn + 16 ] = I3C1_ER_IRQHandler,
[OTG_HS_IRQn + 16 ] = OTG_HS_IRQHandler,
[ETH_IRQn + 16 ] = ETH_IRQHandler,
[CORDIC_IRQn + 16 ] = CORDIC_IRQHandler,
[GFXTIM_IRQn + 16 ] = GFXTIM_IRQHandler,
[DCMIPP_IRQn + 16 ] = DCMIPP_IRQHandler,
[LTDC_IRQn + 16 ] = LTDC_IRQHandler,
[LTDC_ER_IRQn + 16 ] = LTDC_ER_IRQHandler,
[DMA2D_IRQn + 16 ] = DMA2D_IRQHandler,
[JPEG_IRQn + 16 ] = JPEG_IRQHandler,
[GFXMMU_IRQn + 16 ] = GFXMMU_IRQHandler,
[I3C1_WKUP_IRQn + 16 ] = I3C1_WKUP_IRQHandler,
[MCE1_IRQn + 16 ] = MCE1_IRQHandler,
[MCE2_IRQn + 16 ] = MCE2_IRQHandler,
[MCE3_IRQn + 16 ] = MCE3_IRQHandler,
[XSPI1_IRQn + 16 ] = XSPI1_IRQHandler,
[XSPI2_IRQn + 16 ] = XSPI2_IRQHandler,
[FMC_IRQn + 16 ] = FMC_IRQHandler,
[SDMMC1_IRQn + 16 ] = SDMMC1_IRQHandler,
[SDMMC2_IRQn + 16 ] = SDMMC2_IRQHandler,
[OTG_FS_IRQn + 16 ] = OTG_FS_IRQHandler,
[TIM12_IRQn + 16 ] = TIM12_IRQHandler,
[TIM13_IRQn + 16 ] = TIM13_IRQHandler,
[TIM14_IRQn + 16 ] = TIM14_IRQHandler,
[TIM15_IRQn + 16 ] = TIM15_IRQHandler,
[TIM16_IRQn + 16 ] = TIM16_IRQHandler,
[TIM17_IRQn + 16 ] = TIM17_IRQHandler,
[LPTIM1_IRQn + 16 ] = LPTIM1_IRQHandler,
[LPTIM2_IRQn + 16 ] = LPTIM2_IRQHandler,
[LPTIM3_IRQn + 16 ] = LPTIM3_IRQHandler,
[LPTIM4_IRQn + 16 ] = LPTIM4_IRQHandler,
[LPTIM5_IRQn + 16 ] = LPTIM5_IRQHandler,
[SPDIF_RX_IRQn + 16 ] = SPDIF_RX_IRQHandler,
[MDIOS_IRQn + 16 ] = MDIOS_IRQHandler,
[ADF1_FLT0_IRQn + 16 ] = ADF1_FLT0_IRQHandler,
[CRS_IRQn + 16 ] = CRS_IRQHandler,
[UCPD1_IRQn + 16 ] = UCPD1_IRQHandler,
[CEC_IRQn + 16 ] = CEC_IRQHandler,
[PSSI_IRQn + 16 ] = PSSI_IRQHandler,
[LPUART1_IRQn + 16 ] = LPUART1_IRQHandler,
[WAKEUP_PIN_IRQn + 16 ] = WAKEUP_PIN_IRQHandler,
[GPDMA1_Channel8_IRQn + 16 ] = GPDMA1_Channel8_IRQHandler,
[GPDMA1_Channel9_IRQn + 16 ] = GPDMA1_Channel9_IRQHandler,
[GPDMA1_Channel10_IRQn + 16 ] = GPDMA1_Channel10_IRQHandler,
[GPDMA1_Channel11_IRQn + 16 ] = GPDMA1_Channel11_IRQHandler,
[GPDMA1_Channel12_IRQn + 16 ] = GPDMA1_Channel12_IRQHandler,
[GPDMA1_Channel13_IRQn + 16 ] = GPDMA1_Channel13_IRQHandler,
[GPDMA1_Channel14_IRQn + 16 ] = GPDMA1_Channel14_IRQHandler,
[GPDMA1_Channel15_IRQn + 16 ] = GPDMA1_Channel15_IRQHandler,
[HPDMA1_Channel8_IRQn + 16 ] = HPDMA1_Channel8_IRQHandler,
[HPDMA1_Channel9_IRQn + 16 ] = HPDMA1_Channel9_IRQHandler,
[HPDMA1_Channel10_IRQn + 16 ] = HPDMA1_Channel10_IRQHandler,
[HPDMA1_Channel11_IRQn + 16 ] = HPDMA1_Channel11_IRQHandler,
[HPDMA1_Channel12_IRQn + 16 ] = HPDMA1_Channel12_IRQHandler,
[HPDMA1_Channel13_IRQn + 16 ] = HPDMA1_Channel13_IRQHandler,
[HPDMA1_Channel14_IRQn + 16 ] = HPDMA1_Channel14_IRQHandler,
[HPDMA1_Channel15_IRQn + 16 ] = HPDMA1_Channel15_IRQHandler,
[GPU2D_IRQn + 16 ] = GPU2D_IRQHandler,
[GPU2D_ER_IRQn + 16 ] = GPU2D_ER_IRQHandler,
[ICACHE_IRQn + 16 ] = ICACHE_IRQHandler,
[FDCAN1_IT0_IRQn + 16 ] = FDCAN1_IT0_IRQHandler,
[FDCAN1_IT1_IRQn + 16 ] = FDCAN1_IT1_IRQHandler,
[FDCAN2_IT0_IRQn + 16 ] = FDCAN2_IT0_IRQHandler,
[FDCAN2_IT1_IRQn + 16 ] = FDCAN2_IT1_IRQHandler,
};
@@ -136,3 +136,9 @@ void pwrResetHandler()
pwrOn();
}
}
#if defined(BOOT)
void* _pwr_init_hook[] __INIT_HOOK = {
(void*)pwrResetHandler,
};
#endif
@@ -0,0 +1,290 @@
/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <stdint.h>
#include "stm32_cmsis.h"
#include "stm32_hal.h"
#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \
(defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)))
#define USE_CACHE
#endif
#if (defined (USE_CACHE) && defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U))
#define REQUIRE_MPU_CONFIG
#endif
#if defined(ITCM_BASE) /* H7RS */ || defined(D1_ITCMRAM_BASE) /* H7 */
#define LOAD_FAST_CODE_RAM
#endif
#define NAKED __attribute__((naked))
#define BOOTSTRAP __attribute__((section(".bootstrap")))
// Linker script symbols
extern uint32_t _sisr_vector;
NAKED BOOTSTRAP void Reset_Handler()
{
asm inline (
"ldr sp, =_estack \n"
);
#if defined(BOOT)
asm inline (
"bl SystemInit \n"
"bl SystemClock_Config \n"
);
#if defined(USE_CACHE)
asm inline (
"bl CPU_CACHE_Enable \n"
);
#endif // USE_CACHE
#endif // BOOT
// Copy code into RAM
asm inline (
"ldr r0, =_stext \n"
"ldr r1, =_etext \n"
"ldr r2, =_text_load \n"
"bl naked_copy \n"
);
#if defined(BOOT) && defined(REQUIRE_MPU_CONFIG)
asm inline (
"bl MPU_Config \n"
);
#endif
// Copy / setup ISR vector
asm inline (
"ldr r0, =_sisr_vector \n"
"ldr r1, =_eisr_vector \n"
"ldr r2, =_isr_load \n"
"bl naked_copy \n"
"bl set_vtor \n"
);
#if defined(LOAD_FAST_CODE_RAM)
// Copy code into fast RAM
asm inline (
"ldr r0, =_siram \n"
"ldr r1, =_eiram \n"
"ldr r2, =_stext_iram \n"
"bl naked_copy \n"
);
#endif
// Copy initialized data segment
asm inline (
"ldr r0, =_sdata \n"
"ldr r1, =_edata \n"
"ldr r2, =_sidata \n"
"bl naked_copy \n"
);
// Execute early hooks
asm inline (
"bl init_hooks \n"
);
// Zero fill bss segment
asm inline (
"ldr r2, =_sbss \n"
"ldr r4, =_ebss \n"
"movs r3, 0 \n"
"b LoopFillZerobss \n"
"FillZerobss: \n"
"str r3, [r2] \n"
"adds r2, r2, 4 \n"
"LoopFillZerobss: \n"
"cmp r2, r4 \n"
"bcc FillZerobss \n"
);
#if defined(USE_CACHE)
asm inline (
"bl clean_dcache \n"
);
#endif
asm inline (
// Call static constructors
"bl __libc_init_array \n"
// Update global clock speed variable
"bl SystemCoreClockUpdate \n"
// Call the application's entry point
"bl main \n"
"bx lr \n"
);
}
BOOTSTRAP void set_vtor() { SCB->VTOR = (intptr_t)&_sisr_vector; }
NAKED BOOTSTRAP void naked_copy()
{
// r0: destination start
// r1: destination end
// r2: source start
asm inline (
"cmp r0, r2 \n"
"beq SkipCopy \n"
"movs r3, 0 \n"
"b LoopCopyInit \n"
"CopyInit: \n"
"ldr r4, [r2, r3] \n"
"str r4, [r0, r3] \n"
"adds r3, r3, #4 \n"
"LoopCopyInit: \n"
"adds r4, r0, r3 \n"
"cmp r4, r1 \n"
"bcc CopyInit \n"
"SkipCopy: \n"
"bx lr \n"
);
}
void init_hooks()
{
extern uint32_t __init_hook_array_start;
extern uint32_t __init_hook_array_end;
typedef void (*hook_fct_t)();
for (uint32_t hook = (uint32_t)&__init_hook_array_start;
hook != (uint32_t)&__init_hook_array_end; hook += sizeof(void*)) {
(*(hook_fct_t*)hook)();
}
}
#if defined(USE_CACHE)
// SCB_CleanDCache() is "forced inline"
void clean_dcache() { SCB_CleanDCache(); }
#if defined(BOOT)
BOOTSTRAP void CPU_CACHE_Enable()
{
/* Enable I-Cache */
SCB_EnableICache();
/* Enable D-Cache */
SCB_EnableDCache();
}
#endif // BOOT
#endif // USE_CACHE
#if defined(BOOT) && defined(REQUIRE_MPU_CONFIG)
// Linker script symbols
extern uint32_t _dram_addr;
extern uint32_t EXTRAM_START;
extern uint32_t EXTRAM_SIZE;
extern uint32_t NORFLASH_START;
extern uint32_t NORFLASH_SIZE;
__STATIC_FORCEINLINE uint32_t mpu_region_size(uint32_t size)
{
return 32 - __CLZ(size) - 1;
}
void MPU_Config()
{
MPU_Region_InitTypeDef MPU_InitStruct = {0};
/* Disables the MPU */
HAL_MPU_Disable();
/*
* Region 0: overwrite default setting to prevent speculative
* read to unavailable memories.
* Range: 0x60000000 to 0xE0000000
*
* Set as strongly ordered, code execution disabled
*/
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.BaseAddress = 0;
MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
MPU_InitStruct.SubRegionDisable = 0x87;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* Region 2: QSPI memory range, bank1 */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER2;
MPU_InitStruct.BaseAddress = (uint32_t)&NORFLASH_START;
MPU_InitStruct.Size = mpu_region_size((uint32_t)&NORFLASH_SIZE);
MPU_InitStruct.SubRegionDisable = 0x0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* Region 3: external RAM memory range */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER3;
MPU_InitStruct.BaseAddress = (uint32_t)&EXTRAM_START;
MPU_InitStruct.Size = mpu_region_size((uint32_t)&EXTRAM_SIZE);
MPU_InitStruct.SubRegionDisable = 0x0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* Region 4: dedicated DMA buffers (cache disabled) */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER4;
MPU_InitStruct.BaseAddress = (uint32_t)&_dram_addr;
MPU_InitStruct.Size = MPU_REGION_SIZE_64KB; // FIXME
MPU_InitStruct.SubRegionDisable = 0x0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
/* Enable bus fault exception */
SCB->SHCSR |= SCB_SHCSR_BUSFAULTENA_Msk;
}
#endif // REQUIRE_MPU_CONFIG