From 17ea4567d7755a0fb403d34863f1abe581844009 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Thu, 3 Oct 2024 08:10:10 +0200 Subject: [PATCH] feat: add stm32h747 cortex-m7 --- devices/stm32h747/README.md | 10 + devices/stm32h747/include/defines.h | 4 + devices/stm32h747/isr.c | 332 ++++++++++++++++++++++++++++ devices/stm32h747/linker_script.ld | 53 +++++ 4 files changed, 399 insertions(+) create mode 100644 devices/stm32h747/README.md create mode 100644 devices/stm32h747/include/defines.h create mode 100644 devices/stm32h747/isr.c create mode 100644 devices/stm32h747/linker_script.ld diff --git a/devices/stm32h747/README.md b/devices/stm32h747/README.md new file mode 100644 index 0000000..99d2e82 --- /dev/null +++ b/devices/stm32h747/README.md @@ -0,0 +1,10 @@ +This chip is quite special in comparison +to the other chips. This one has two +CPUs inside of it. Currently the +linker script here and, isr vector +and such are meant mainly for the CM7, +assuming the default values of BCM7_ADD0, +using the 512K AXI SRAM. + +I have yet to decide how to handle both the +CPUs at one time in this project structure. diff --git a/devices/stm32h747/include/defines.h b/devices/stm32h747/include/defines.h new file mode 100644 index 0000000..bafd6b8 --- /dev/null +++ b/devices/stm32h747/include/defines.h @@ -0,0 +1,4 @@ +#define SRAM_START (0x24000000U) +#define SRAM_SIZE (512U * 1024U) +#define SRAM_END (SRAM_START + SRAM_SIZE) +#define STACK_POINTER_INIT_ADDRESS (SRAM_END) diff --git a/devices/stm32h747/isr.c b/devices/stm32h747/isr.c new file mode 100644 index 0000000..1e1bd4f --- /dev/null +++ b/devices/stm32h747/isr.c @@ -0,0 +1,332 @@ +#include +#include "defines.h" +#define ISR_VECTOR_SIZE_WORDS 166 + +void reset_handler(void); +void default_handler(void); +void nmi_handler(void) __attribute__((weak, alias("default_handler"))); +void hard_fault_handler(void) __attribute__((weak, alias("default_handler"))); +void bus_fault_handler(void) __attribute__((weak, alias("default_handler"))); +void usage_fault_handler(void) __attribute__((weak, alias("default_handler"))); +void svcall_handler(void) __attribute__((weak, alias("default_handler"))); +void debug_monitor_handler(void) __attribute__((weak, alias("default_handler"))); +void pendsv_handler(void) __attribute__((weak, alias("default_handler"))); +void systick_handler(void) __attribute__((weak, alias("default_handler"))); +void wwdg_handler(void) __attribute__((weak, alias("default_handler"))); /* window watchdog */ +void pvd_pvm_handler(void) __attribute__((weak, alias("default_handler"))); /* pvd through exti line detection */ +void rtc_tamp_stamp_css_lse_handler(void) __attribute__((weak, alias("default_handler"))); /* tamper and timestamps through the exti line */ +void rtc_wkup_handler(void) __attribute__((weak, alias("default_handler"))); /* rtc wakeup through the exti line */ +void flash_handler(void) __attribute__((weak, alias("default_handler"))); /* flash */ +void rcc_handler(void) __attribute__((weak, alias("default_handler"))); /* rcc */ +void exti0_handler(void) __attribute__((weak, alias("default_handler"))); /* exti line0 */ +void exti1_handler(void) __attribute__((weak, alias("default_handler"))); /* exti line1 */ +void exti2_handler(void) __attribute__((weak, alias("default_handler"))); /* exti line2 */ +void exti3_handler(void) __attribute__((weak, alias("default_handler"))); /* exti line3 */ +void exti4_handler(void) __attribute__((weak, alias("default_handler"))); /* exti line4 */ +void dma1_stream0_handler(void) __attribute__((weak, alias("default_handler"))); /* dma1 stream 0 */ +void dma1_stream1_handler(void) __attribute__((weak, alias("default_handler"))); /* dma1 stream 1 */ +void dma1_stream2_handler(void) __attribute__((weak, alias("default_handler"))); /* dma1 stream 2 */ +void dma1_stream3_handler(void) __attribute__((weak, alias("default_handler"))); /* dma1 stream 3 */ +void dma1_stream4_handler(void) __attribute__((weak, alias("default_handler"))); /* dma1 stream 4 */ +void dma1_stream5_handler(void) __attribute__((weak, alias("default_handler"))); /* dma1 stream 5 */ +void dma1_stream6_handler(void) __attribute__((weak, alias("default_handler"))); /* dma1 stream 6 */ +void adc_1_2_handler(void) __attribute__((weak, alias("default_handler"))); /* adc1, adc2 and adc3s */ +void fccan1_it0_handler(void) __attribute__((weak, alias("default_handler"))); +void fccan2_it0_handler(void) __attribute__((weak, alias("default_handler"))); +void fccan1_it1_handler(void) __attribute__((weak, alias("default_handler"))); +void fccan2_it1_handler(void) __attribute__((weak, alias("default_handler"))); +void exti9_5_handler(void) __attribute__((weak, alias("default_handler"))); /* external line[9:5]s */ +void tim1_brk_handler(void) __attribute__((weak, alias("default_handler"))); /* tim1 break and tim9 */ +void tim1_up_handler(void) __attribute__((weak, alias("default_handler"))); /* tim1 update and tim10 */ +void tim1_trg_com_handler(void) __attribute__((weak, alias("default_handler"))); /* tim1 trigger and commutation and tim11 */ +void tim_cc_handler(void) __attribute__((weak, alias("default_handler"))); /* tim1 capture compare */ +void tim2_handler(void) __attribute__((weak, alias("default_handler"))); /* tim2 */ +void tim3_handler(void) __attribute__((weak, alias("default_handler"))); /* tim3 */ +void tim4_handler(void) __attribute__((weak, alias("default_handler"))); /* tim4 */ +void i2c1_ev_handler(void) __attribute__((weak, alias("default_handler"))); /* i2c1 event */ +void i2c1_er_handler(void) __attribute__((weak, alias("default_handler"))); /* i2c1 error */ +void i2c2_ev_handler(void) __attribute__((weak, alias("default_handler"))); /* i2c2 event */ +void i2c2_er_handler(void) __attribute__((weak, alias("default_handler"))); /* i2c2 error */ +void spi1_handler(void) __attribute__((weak, alias("default_handler"))); /* spi1 */ +void spi2_handler(void) __attribute__((weak, alias("default_handler"))); /* spi2 */ +void usart1_handler(void) __attribute__((weak, alias("default_handler"))); /* usart1 */ +void usart2_handler(void) __attribute__((weak, alias("default_handler"))); /* usart2 */ +void usart3_handler(void) __attribute__((weak, alias("default_handler"))); /* usart3 */ +void exti15_10_handler(void) __attribute__((weak, alias("default_handler"))); /* external line[15:10]s */ +void rtc_alarm_handler(void) __attribute__((weak, alias("default_handler"))); /* rtc alarm (a and b) through exti line */ +void tim8_brk_tim12_handler(void) __attribute__((weak, alias("default_handler"))); /* tim8 break and tim12 */ +void tim8_up_tim13_handler(void) __attribute__((weak, alias("default_handler"))); /* tim8 update and tim13 */ +void tim8_trg_com_tim14_handler(void) __attribute__((weak, alias("default_handler"))); /* tim8 trigger and commutation and tim14 */ +void tim8_cc_handler(void) __attribute__((weak, alias("default_handler"))); /* tim8 capture compare */ +void dma1_stream7_handler(void) __attribute__((weak, alias("default_handler"))); /* dma1 stream7 */ +void fmc_handler(void) __attribute__((weak, alias("default_handler"))); /* fmc */ +void sdmmc1_handler(void) __attribute__((weak, alias("default_handler"))); +void tim5_handler(void) __attribute__((weak, alias("default_handler"))); /* tim5 */ +void spi3_handler(void) __attribute__((weak, alias("default_handler"))); /* spi3 */ +void uart4_handler(void) __attribute__((weak, alias("default_handler"))); /* uart4 */ +void uart5_handler(void) __attribute__((weak, alias("default_handler"))); /* uart5 */ +void tim6_dac_handler(void) __attribute__((weak, alias("default_handler"))); /* tim6 and dac1&2 underrun errors */ +void tim7_handler(void) __attribute__((weak, alias("default_handler"))); /* tim7 */ +void dma2_stream0_handler(void) __attribute__((weak, alias("default_handler"))); /* dma2 stream 0 */ +void dma2_stream1_handler(void) __attribute__((weak, alias("default_handler"))); /* dma2 stream 1 */ +void dma2_stream2_handler(void) __attribute__((weak, alias("default_handler"))); /* dma2 stream 2 */ +void dma2_stream3_handler(void) __attribute__((weak, alias("default_handler"))); /* dma2 stream 3 */ +void dma2_stream4_handler(void) __attribute__((weak, alias("default_handler"))); /* dma2 stream 4 */ +void eth_handler(void) __attribute__((weak, alias("default_handler"))); +void eth_wkup_handler(void) __attribute__((weak, alias("default_handler"))); +void fdcan_cal_handler(void) __attribute__((weak, alias("default_handler"))); +void dma2_stream5_handler(void) __attribute__((weak, alias("default_handler"))); /* dma2 stream 5 */ +void dma2_stream6_handler(void) __attribute__((weak, alias("default_handler"))); /* dma2 stream 6 */ +void dma2_stream7_handler(void) __attribute__((weak, alias("default_handler"))); /* dma2 stream 7 */ +void usart6_handler(void) __attribute__((weak, alias("default_handler"))); /* usart6 */ +void i2c3_ev_handler(void) __attribute__((weak, alias("default_handler"))); /* i2c3 event */ +void i2c3_er_handler(void) __attribute__((weak, alias("default_handler"))); /* i2c3 error */ +void otg_hs_ep1_out_handler(void) __attribute__((weak, alias("default_handler"))); /* usb otg hs end point 1 out */ +void otg_hs_ep1_in_handler(void) __attribute__((weak, alias("default_handler"))); /* usb otg hs end point 1 in */ +void otg_hs_wkup_handler(void) __attribute__((weak, alias("default_handler"))); /* usb otg hs wakeup through exti */ +void otg_hs_handler(void) __attribute__((weak, alias("default_handler"))); /* usb otg hs */ +void dcmi_handler(void) __attribute__((weak, alias("default_handler"))); /* dcmi */ +void cryp_handler(void) __attribute__((weak, alias("default_handler"))); +void hash_rng_handler(void) __attribute__((weak, alias("default_handler"))); +void fpu_handler(void) __attribute__((weak, alias("default_handler"))); /* fpu */ +void uart7_handler(void) __attribute__((weak, alias("default_handler"))); +void uart8_handler(void) __attribute__((weak, alias("default_handler"))); +void spi4_handler(void) __attribute__((weak, alias("default_handler"))); /* spi4 */ +void spi5_handler(void) __attribute__((weak, alias("default_handler"))); /* spi5 */ +void spi6_handler(void) __attribute__((weak, alias("default_handler"))); /* spi6 */ +void sai1_handler(void) __attribute__((weak, alias("default_handler"))); /* sai1 */ +void ltdc_handler(void) __attribute__((weak, alias("default_handler"))); +void ltdc_er_handler(void) __attribute__((weak, alias("default_handler"))); +void dma2d_handler(void) __attribute__((weak, alias("default_handler"))); +void sai2_handler(void) __attribute__((weak, alias("default_handler"))); +void quadspi_handler(void) __attribute__((weak, alias("default_handler"))); /* quadspi */ +void lptim1_handler(void) __attribute__((weak, alias("default_handler"))); /* cec */ +void cec_handler(void) __attribute__((weak, alias("default_handler"))); /* cec */ +void i2c4_ev_handler(void) __attribute__((weak, alias("default_handler"))); +void i2c4_er_handler(void) __attribute__((weak, alias("default_handler"))); +void spdif_handler(void) __attribute__((weak, alias("default_handler"))); /* spdif rx */ +void otg_fs_ep1_out_handler(void) __attribute__((weak, alias("default_handler"))); +void otg_fs_ep1_in_handler(void) __attribute__((weak, alias("default_handler"))); +void otg_fs_wkup_handler(void) __attribute__((weak, alias("default_handler"))); +void otg_fs_handler(void) __attribute__((weak, alias("default_handler"))); +void dmamux1_ov_handler(void) __attribute__((weak, alias("default_handler"))); +void hrtim1_mst_handler(void) __attribute__((weak, alias("default_handler"))); +void hrtim1_tima_handler(void) __attribute__((weak, alias("default_handler"))); +void hrtim1_timb_handler(void) __attribute__((weak, alias("default_handler"))); +void hrtim1_timc_handler(void) __attribute__((weak, alias("default_handler"))); +void hrtim1_timd_handler(void) __attribute__((weak, alias("default_handler"))); +void hrtim1_time_handler(void) __attribute__((weak, alias("default_handler"))); +void hrtim1_flt_handler(void) __attribute__((weak, alias("default_handler"))); +void dfsdm1_flt0_handler(void) __attribute__((weak, alias("default_handler"))); +void dfsdm1_flt1_handler(void) __attribute__((weak, alias("default_handler"))); +void dfsdm1_flt2_handler(void) __attribute__((weak, alias("default_handler"))); +void dfsdm1_flt3_handler(void) __attribute__((weak, alias("default_handler"))); +void sai3_handler(void) __attribute__((weak, alias("default_handler"))); +void swpmi1_handler(void) __attribute__((weak, alias("default_handler"))); +void tim15_handler(void) __attribute__((weak, alias("default_handler"))); +void tim16_handler(void) __attribute__((weak, alias("default_handler"))); +void tim17_handler(void) __attribute__((weak, alias("default_handler"))); +void mdios_wkup_handler(void) __attribute__((weak, alias("default_handler"))); +void mdios_handler(void) __attribute__((weak, alias("default_handler"))); +void jpeg_handler(void) __attribute__((weak, alias("default_handler"))); +void mdma_handler(void) __attribute__((weak, alias("default_handler"))); +void dsi_dsi_wkup_handler(void) __attribute__((weak, alias("default_handler"))); +void sdmmc2_handler(void) __attribute__((weak, alias("default_handler"))); +void hsem0_handler(void) __attribute__((weak, alias("default_handler"))); +void adc3_handler(void) __attribute__((weak, alias("default_handler"))); +void dmamux2_ovr_handler(void) __attribute__((weak, alias("default_handler"))); +void bdma_ch0_handler(void) __attribute__((weak, alias("default_handler"))); +void bdma_ch1_handler(void) __attribute__((weak, alias("default_handler"))); +void bdma_ch2_handler(void) __attribute__((weak, alias("default_handler"))); +void bdma_ch3_handler(void) __attribute__((weak, alias("default_handler"))); +void bdma_ch4_handler(void) __attribute__((weak, alias("default_handler"))); +void bdma_ch5_handler(void) __attribute__((weak, alias("default_handler"))); +void bdma_ch6_handler(void) __attribute__((weak, alias("default_handler"))); +void bdma_ch7_handler(void) __attribute__((weak, alias("default_handler"))); +void comp_handler(void) __attribute__((weak, alias("default_handler"))); +void lptim2_handler(void) __attribute__((weak, alias("default_handler"))); +void lptim3_handler(void) __attribute__((weak, alias("default_handler"))); +void lptim4_handler(void) __attribute__((weak, alias("default_handler"))); +void lptim5_handler(void) __attribute__((weak, alias("default_handler"))); +void lptim6_handler(void) __attribute__((weak, alias("default_handler"))); +void lpuart_handler(void) __attribute__((weak, alias("default_handler"))); +void wwdg2_rst_handler(void) __attribute__((weak, alias("default_handler"))); +void crs_handler(void) __attribute__((weak, alias("default_handler"))); +void ecc_handler(void) __attribute__((weak, alias("default_handler"))); +void sai4_handler(void) __attribute__((weak, alias("default_handler"))); +void hold_core_handler(void) __attribute__((weak, alias("default_handler"))); +void wkup_handler(void) __attribute__((weak, alias("default_handler"))); + +uint32_t isr_vector[ISR_VECTOR_SIZE_WORDS] __attribute__((section(".isr_vector"))) = { + STACK_POINTER_INIT_ADDRESS, + (uint32_t)&reset_handler, + (uint32_t)&nmi_handler, + (uint32_t)&hard_fault_handler, + (uint32_t)&bus_fault_handler, + (uint32_t)&usage_fault_handler, + 0, + 0, + 0, + 0, + 0, + (uint32_t)&svcall_handler, + (uint32_t)&debug_monitor_handler, + 0, + (uint32_t)&pendsv_handler, + (uint32_t)&systick_handler, + (uint32_t)&wwdg_handler, /* window watchdog */ + (uint32_t)&pvd_pvm_handler, /* pvd through exti line detection */ + (uint32_t)&rtc_tamp_stamp_css_lse_handler, /* tamper and timestamps through the exti line */ + (uint32_t)&rtc_wkup_handler, /* rtc wakeup through the exti line */ + (uint32_t)&flash_handler, /* flash */ + (uint32_t)&rcc_handler, /* rcc */ + (uint32_t)&exti0_handler, /* exti line0 */ + (uint32_t)&exti1_handler, /* exti line1 */ + (uint32_t)&exti2_handler, /* exti line2 */ + (uint32_t)&exti3_handler, /* exti line3 */ + (uint32_t)&exti4_handler, /* exti line4 */ + (uint32_t)&dma1_stream0_handler, /* dma1 stream 0 */ + (uint32_t)&dma1_stream1_handler, /* dma1 stream 1 */ + (uint32_t)&dma1_stream2_handler, /* dma1 stream 2 */ + (uint32_t)&dma1_stream3_handler, /* dma1 stream 3 */ + (uint32_t)&dma1_stream4_handler, /* dma1 stream 4 */ + (uint32_t)&dma1_stream5_handler, /* dma1 stream 5 */ + (uint32_t)&dma1_stream6_handler, /* dma1 stream 6 */ + (uint32_t)&adc_1_2_handler, /* adc1, adc2 and adc3s */ + (uint32_t)&fccan1_it0_handler, + (uint32_t)&fccan2_it0_handler, + (uint32_t)&fccan1_it1_handler, + (uint32_t)&fccan2_it1_handler, + (uint32_t)&exti9_5_handler, /* external line[9:5]s */ + (uint32_t)&tim1_brk_handler, /* tim1 break and tim9 */ + (uint32_t)&tim1_up_handler, /* tim1 update and tim10 */ + (uint32_t)&tim1_trg_com_handler, /* tim1 trigger and commutation and tim11 */ + (uint32_t)&tim_cc_handler, /* tim1 capture compare */ + (uint32_t)&tim2_handler, /* tim2 */ + (uint32_t)&tim3_handler, /* tim3 */ + (uint32_t)&tim4_handler, /* tim4 */ + (uint32_t)&i2c1_ev_handler, /* i2c1 event */ + (uint32_t)&i2c1_er_handler, /* i2c1 error */ + (uint32_t)&i2c2_ev_handler, /* i2c2 event */ + (uint32_t)&i2c2_er_handler, /* i2c2 error */ + (uint32_t)&spi1_handler, /* spi1 */ + (uint32_t)&spi2_handler, /* spi2 */ + (uint32_t)&usart1_handler, /* usart1 */ + (uint32_t)&usart2_handler, /* usart2 */ + (uint32_t)&usart3_handler, /* usart3 */ + (uint32_t)&exti15_10_handler, /* external line[15:10]s */ + (uint32_t)&rtc_alarm_handler, /* rtc alarm (a and b) through exti line */ + 0, + (uint32_t)&tim8_brk_tim12_handler, /* tim8 break and tim12 */ + (uint32_t)&tim8_up_tim13_handler, /* tim8 update and tim13 */ + (uint32_t)&tim8_trg_com_tim14_handler, /* tim8 trigger and commutation and tim14 */ + (uint32_t)&tim8_cc_handler, /* tim8 capture compare */ + (uint32_t)&dma1_stream7_handler, /* dma1 stream7 */ + (uint32_t)&fmc_handler, /* fmc */ + (uint32_t)&sdmmc1_handler, + (uint32_t)&tim5_handler, /* tim5 */ + (uint32_t)&spi3_handler, /* spi3 */ + (uint32_t)&uart4_handler, /* uart4 */ + (uint32_t)&uart5_handler, /* uart5 */ + (uint32_t)&tim6_dac_handler, /* tim6 and dac1&2 underrun errors */ + (uint32_t)&tim7_handler, /* tim7 */ + (uint32_t)&dma2_stream0_handler, /* dma2 stream 0 */ + (uint32_t)&dma2_stream1_handler, /* dma2 stream 1 */ + (uint32_t)&dma2_stream2_handler, /* dma2 stream 2 */ + (uint32_t)&dma2_stream3_handler, /* dma2 stream 3 */ + (uint32_t)&dma2_stream4_handler, /* dma2 stream 4 */ + (uint32_t)ð_handler, + (uint32_t)ð_wkup_handler, + (uint32_t)&fdcan_cal_handler, + 0, + 0, + 0, + 0, + (uint32_t)&dma2_stream5_handler, /* dma2 stream 5 */ + (uint32_t)&dma2_stream6_handler, /* dma2 stream 6 */ + (uint32_t)&dma2_stream7_handler, /* dma2 stream 7 */ + (uint32_t)&usart6_handler, /* usart6 */ + (uint32_t)&i2c3_ev_handler, /* i2c3 event */ + (uint32_t)&i2c3_er_handler, /* i2c3 error */ + (uint32_t)&otg_hs_ep1_out_handler, /* usb otg hs end point 1 out */ + (uint32_t)&otg_hs_ep1_in_handler, /* usb otg hs end point 1 in */ + (uint32_t)&otg_hs_wkup_handler, /* usb otg hs wakeup through exti */ + (uint32_t)&otg_hs_handler, /* usb otg hs */ + (uint32_t)&dcmi_handler, /* dcmi */ + (uint32_t)&cryp_handler, + (uint32_t)&hash_rng_handler, + (uint32_t)&fpu_handler, /* fpu */ + (uint32_t)&uart7_handler, + (uint32_t)&uart8_handler, + (uint32_t)&spi4_handler, /* spi4 */ + (uint32_t)&spi5_handler, /* spi5 */ + (uint32_t)&spi6_handler, /* spi6 */ + (uint32_t)&sai1_handler, /* sai1 */ + (uint32_t)<dc_handler, + (uint32_t)<dc_er_handler, + (uint32_t)&dma2d_handler, + (uint32_t)&sai2_handler, + (uint32_t)&quadspi_handler, /* quadspi */ + (uint32_t)&lptim1_handler, /* cec */ + (uint32_t)&cec_handler, /* cec */ + (uint32_t)&i2c4_ev_handler, + (uint32_t)&i2c4_er_handler, + (uint32_t)&spdif_handler, /* spdif rx */ + (uint32_t)&otg_fs_ep1_out_handler, + (uint32_t)&otg_fs_ep1_in_handler, + (uint32_t)&otg_fs_wkup_handler, + (uint32_t)&otg_fs_handler, + (uint32_t)&dmamux1_ov_handler, + (uint32_t)&hrtim1_mst_handler, + (uint32_t)&hrtim1_tima_handler, + (uint32_t)&hrtim1_timb_handler, + (uint32_t)&hrtim1_timc_handler, + (uint32_t)&hrtim1_timd_handler, + (uint32_t)&hrtim1_time_handler, + (uint32_t)&hrtim1_flt_handler, + (uint32_t)&dfsdm1_flt0_handler, + (uint32_t)&dfsdm1_flt1_handler, + (uint32_t)&dfsdm1_flt2_handler, + (uint32_t)&dfsdm1_flt3_handler, + (uint32_t)&sai3_handler, + (uint32_t)&swpmi1_handler, + (uint32_t)&tim15_handler, + (uint32_t)&tim16_handler, + (uint32_t)&tim17_handler, + (uint32_t)&mdios_wkup_handler, + (uint32_t)&mdios_handler, + (uint32_t)&jpeg_handler, + (uint32_t)&mdma_handler, + (uint32_t)&dsi_dsi_wkup_handler, + (uint32_t)&sdmmc2_handler, + (uint32_t)&hsem0_handler, + 0, + (uint32_t)&adc3_handler, + (uint32_t)&dmamux2_ovr_handler, + (uint32_t)&bdma_ch0_handler, + (uint32_t)&bdma_ch1_handler, + (uint32_t)&bdma_ch2_handler, + (uint32_t)&bdma_ch3_handler, + (uint32_t)&bdma_ch4_handler, + (uint32_t)&bdma_ch5_handler, + (uint32_t)&bdma_ch6_handler, + (uint32_t)&bdma_ch7_handler, + (uint32_t)&comp_handler, + (uint32_t)&lptim2_handler, + (uint32_t)&lptim3_handler, + (uint32_t)&lptim4_handler, + (uint32_t)&lptim5_handler, + (uint32_t)&lpuart_handler, + (uint32_t)&wwdg2_rst_handler, + (uint32_t)&crs_handler, + (uint32_t)&ecc_handler, + (uint32_t)&sai4_handler, + 0, + (uint32_t)&hold_core_handler, + (uint32_t)&wkup_handler +}; + +void default_handler(void) +{ + while(1); +} diff --git a/devices/stm32h747/linker_script.ld b/devices/stm32h747/linker_script.ld new file mode 100644 index 0000000..cda55f8 --- /dev/null +++ b/devices/stm32h747/linker_script.ld @@ -0,0 +1,53 @@ +MEMORY +{ + FLASH (rx): ORIGIN = 0x08000000, LENGTH = 512K + SRAM (rwx): ORIGIN = 0x24000000, LENGTH = 512K +} + +SECTIONS +{ + .isr_vector : + { + KEEP(*(.isr_vector)) + } >FLASH + + .text : + { + . = ALIGN(4); + + *(.text) + *(.rodata) + + . = ALIGN(4); + _etext = .; + } >FLASH + + .data : + { + . = ALIGN(4); + _sdata = .; + + *(.data) + + . = ALIGN(4); + _edata = .; + } >SRAM AT> FLASH + + _data_size = _edata - _sdata; + _data_loadaddr = LOADADDR(.data); + + .bss : + { + . = ALIGN(4); + _sbss = .; + + *(.bss) + + . = ALIGN(4); + _ebss = .; + } >SRAM + + _bss_size = _ebss - _sbss; +} + +ENTRY(reset_handler) -- 2.48.1