| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- // SPDX-License-Identifier: BSD-3-Clause
- // Copyright (c) 2022, Alex Taradov <alex@taradov.com>. All rights reserved.
- /*- Includes ----------------------------------------------------------------*/
- #include "M480.h"
- /*- Definitions -------------------------------------------------------------*/
- #define DUMMY __attribute__ ((weak, alias ("irq_handler_dummy")))
- /*- Prototypes --------------------------------------------------------------*/
- void irq_handler_reset(void);
- DUMMY void irq_handler_nmi(void);
- DUMMY void irq_handler_hard_fault(void);
- DUMMY void irq_handler_mm_fault(void);
- DUMMY void irq_handler_bus_fault(void);
- DUMMY void irq_handler_usage_fault(void);
- DUMMY void irq_handler_sv_call(void);
- DUMMY void irq_handler_debug_mon(void);
- DUMMY void irq_handler_pend_sv(void);
- DUMMY void irq_handler_sys_tick(void);
- DUMMY void irq_handler_bod(void);
- DUMMY void irq_handler_irc(void);
- DUMMY void irq_handler_pwrwu(void);
- DUMMY void irq_handler_rampe(void);
- DUMMY void irq_handler_ckfail(void);
- DUMMY void irq_handler_rtc(void);
- DUMMY void irq_handler_tamper(void);
- DUMMY void irq_handler_wdt(void);
- DUMMY void irq_handler_wwdt(void);
- DUMMY void irq_handler_eint0(void);
- DUMMY void irq_handler_eint1(void);
- DUMMY void irq_handler_eint2(void);
- DUMMY void irq_handler_eint3(void);
- DUMMY void irq_handler_eint4(void);
- DUMMY void irq_handler_eint5(void);
- DUMMY void irq_handler_gpa(void);
- DUMMY void irq_handler_gpb(void);
- DUMMY void irq_handler_gpc(void);
- DUMMY void irq_handler_gpd(void);
- DUMMY void irq_handler_gpe(void);
- DUMMY void irq_handler_gpf(void);
- DUMMY void irq_handler_qspi0(void);
- DUMMY void irq_handler_spi0(void);
- DUMMY void irq_handler_brake0(void);
- DUMMY void irq_handler_epwm0p0(void);
- DUMMY void irq_handler_epwm0p1(void);
- DUMMY void irq_handler_epwm0p2(void);
- DUMMY void irq_handler_brake1(void);
- DUMMY void irq_handler_epwm1p0(void);
- DUMMY void irq_handler_epwm1p1(void);
- DUMMY void irq_handler_epwm1p2(void);
- DUMMY void irq_handler_tmr0(void);
- DUMMY void irq_handler_tmr1(void);
- DUMMY void irq_handler_tmr2(void);
- DUMMY void irq_handler_tmr3(void);
- DUMMY void irq_handler_uart0(void);
- DUMMY void irq_handler_uart1(void);
- DUMMY void irq_handler_i2c0(void);
- DUMMY void irq_handler_i2c1(void);
- DUMMY void irq_handler_pdma(void);
- DUMMY void irq_handler_dac(void);
- DUMMY void irq_handler_eadc00(void);
- DUMMY void irq_handler_eadc01(void);
- DUMMY void irq_handler_acmp01(void);
- DUMMY void irq_handler_eadc02(void);
- DUMMY void irq_handler_eadc03(void);
- DUMMY void irq_handler_uart2(void);
- DUMMY void irq_handler_uart3(void);
- DUMMY void irq_handler_qspi1(void);
- DUMMY void irq_handler_spi1(void);
- DUMMY void irq_handler_spi2(void);
- DUMMY void irq_handler_usbd(void);
- DUMMY void irq_handler_ohci(void);
- DUMMY void irq_handler_usbotg(void);
- DUMMY void irq_handler_can0(void);
- DUMMY void irq_handler_can1(void);
- DUMMY void irq_handler_sc0(void);
- DUMMY void irq_handler_sc1(void);
- DUMMY void irq_handler_sc2(void);
- DUMMY void irq_handler_spi3(void);
- DUMMY void irq_handler_sdh0(void);
- DUMMY void irq_handler_usbd20(void);
- DUMMY void irq_handler_emac_tx(void);
- DUMMY void irq_handler_emac_rx(void);
- DUMMY void irq_handler_i2s0(void);
- DUMMY void irq_handler_opa0(void);
- DUMMY void irq_handler_crypto(void);
- DUMMY void irq_handler_gpg(void);
- DUMMY void irq_handler_eint6(void);
- DUMMY void irq_handler_uart4(void);
- DUMMY void irq_handler_uart5(void);
- DUMMY void irq_handler_usci0(void);
- DUMMY void irq_handler_usci1(void);
- DUMMY void irq_handler_bpwm0(void);
- DUMMY void irq_handler_bpwm1(void);
- DUMMY void irq_handler_spim(void);
- DUMMY void irq_handler_ccap(void);
- DUMMY void irq_handler_i2c2(void);
- DUMMY void irq_handler_qei0(void);
- DUMMY void irq_handler_qei1(void);
- DUMMY void irq_handler_ecap0(void);
- DUMMY void irq_handler_ecap1(void);
- DUMMY void irq_handler_gph(void);
- DUMMY void irq_handler_eint7(void);
- DUMMY void irq_handler_sdh1(void);
- DUMMY void irq_handler_ehci(void);
- DUMMY void irq_handler_usbotg20(void);
- DUMMY void irq_handler_trng(void);
- DUMMY void irq_handler_uart6(void);
- DUMMY void irq_handler_uart7(void);
- DUMMY void irq_handler_eadc10(void);
- DUMMY void irq_handler_eadc11(void);
- DUMMY void irq_handler_eadc12(void);
- DUMMY void irq_handler_eadc13(void);
- DUMMY void irq_handler_can2(void);
- int main(void);
- extern void _stack_top(void);
- extern unsigned int _etext;
- extern unsigned int _data;
- extern unsigned int _edata;
- extern unsigned int _bss;
- extern unsigned int _ebss;
- /*- Variables ---------------------------------------------------------------*/
- //-----------------------------------------------------------------------------
- __attribute__ ((used, section(".rom_vectors")))
- void (* const rom_vectors[])(void) =
- {
- &_stack_top,
- irq_handler_reset,
- };
- //-----------------------------------------------------------------------------
- __attribute__ ((used, section(".vectors")))
- void (* const vectors[])(void) =
- {
- &_stack_top, // 0 - Initial Stack Pointer Value
- // Cortex-M4 handlers
- irq_handler_reset, // 1 - Reset
- irq_handler_nmi, // 2 - NMI
- irq_handler_hard_fault, // 3 - Hard Fault
- irq_handler_mm_fault, // 4 - MM Fault
- irq_handler_bus_fault, // 5 - Bus Fault
- irq_handler_usage_fault, // 6 - Usage Fault
- 0, // 7 - Reserved
- 0, // 8 - Reserved
- 0, // 9 - Reserved
- 0, // 10 - Reserved
- irq_handler_sv_call, // 11 - SVCall
- irq_handler_debug_mon, // 12 - Debug
- 0, // 13 - Reserved
- irq_handler_pend_sv, // 14 - PendSV
- irq_handler_sys_tick, // 15 - SysTick
- // Peripheral handlers
- irq_handler_bod, // 0 - brown out detection
- irq_handler_irc, // 1 - internal rc
- irq_handler_pwrwu, // 2 - power down wake up
- irq_handler_rampe, // 3 - ram parity error
- irq_handler_ckfail, // 4 - clock detection fail
- 0, // 5 - reserved
- irq_handler_rtc, // 6 - real time clock
- irq_handler_tamper, // 7 - tamper detection
- irq_handler_wdt, // 8 - watchdog timer
- irq_handler_wwdt, // 9 - window watchdog timer
- irq_handler_eint0, // 10 - external input 0
- irq_handler_eint1, // 11 - external input 1
- irq_handler_eint2, // 12 - external input 2
- irq_handler_eint3, // 13 - external input 3
- irq_handler_eint4, // 14 - external input 4
- irq_handler_eint5, // 15 - external input 5
- irq_handler_gpa, // 16 - gpio port a
- irq_handler_gpb, // 17 - gpio port b
- irq_handler_gpc, // 18 - gpio port c
- irq_handler_gpd, // 19 - gpio port d
- irq_handler_gpe, // 20 - gpio port e
- irq_handler_gpf, // 21 - gpio port f
- irq_handler_qspi0, // 22 - qspi0
- irq_handler_spi0, // 23 - spi0
- irq_handler_brake0, // 24
- irq_handler_epwm0p0, // 25
- irq_handler_epwm0p1, // 26
- irq_handler_epwm0p2, // 27
- irq_handler_brake1, // 28
- irq_handler_epwm1p0, // 29
- irq_handler_epwm1p1, // 30
- irq_handler_epwm1p2, // 31
- irq_handler_tmr0, // 32 - timer 0
- irq_handler_tmr1, // 33 - timer 1
- irq_handler_tmr2, // 34 - timer 2
- irq_handler_tmr3, // 35 - timer 3
- irq_handler_uart0, // 36 - uart0
- irq_handler_uart1, // 37 - uart1
- irq_handler_i2c0, // 38 - i2c0
- irq_handler_i2c1, // 39 - i2c1
- irq_handler_pdma, // 40 - peripheral dma
- irq_handler_dac, // 41 - dac
- irq_handler_eadc00, // 42 - eadc0 interrupt source 0
- irq_handler_eadc01, // 43 - eadc0 interrupt source 1
- irq_handler_acmp01, // 44 - acmp0 and acmp1
- 0, // 45 - reserved
- irq_handler_eadc02, // 46 - eadc0 interrupt source 2
- irq_handler_eadc03, // 47 - eadc0 interrupt source 3
- irq_handler_uart2, // 48 - uart2
- irq_handler_uart3, // 49 - uart3
- irq_handler_qspi1, // 50 - qspi1
- irq_handler_spi1, // 51 - spi1
- irq_handler_spi2, // 52 - spi2
- irq_handler_usbd, // 53 - usb device
- irq_handler_ohci, // 54 - ohci
- irq_handler_usbotg, // 55 - usb otg
- irq_handler_can0, // 56 - can0
- irq_handler_can1, // 57 - can1
- irq_handler_sc0, // 58
- irq_handler_sc1, // 59
- irq_handler_sc2, // 60
- 0, // 61 - reserved
- irq_handler_spi3, // 62 - spi3
- 0, // 63 - reserved
- irq_handler_sdh0, // 64 - sdh0
- irq_handler_usbd20, // 65 - usbd20
- irq_handler_emac_tx, // 66 - emac_tx
- irq_handler_emac_rx, // 67 - emax_rx
- irq_handler_i2s0, // 68 - i2s0
- 0, // 69 - reserved
- irq_handler_opa0, // 70 - opa0
- irq_handler_crypto, // 71 - crypto
- irq_handler_gpg, // 72
- irq_handler_eint6, // 73
- irq_handler_uart4, // 74 - uart4
- irq_handler_uart5, // 75 - uart5
- irq_handler_usci0, // 76 - usci0
- irq_handler_usci1, // 77 - usci1
- irq_handler_bpwm0, // 78 - bpwm0
- irq_handler_bpwm1, // 79 - bpwm1
- irq_handler_spim, // 80 - spim
- irq_handler_ccap, // 81 - ccap
- irq_handler_i2c2, // 82 - i2c2
- 0, // 83 - reserved
- irq_handler_qei0, // 84 - qei0
- irq_handler_qei1, // 85 - qei1
- irq_handler_ecap0, // 86 - ecap0
- irq_handler_ecap1, // 87 - ecap1
- irq_handler_gph, // 88
- irq_handler_eint7, // 89
- irq_handler_sdh1, // 90 - sdh1
- 0, // 91 - reserved
- irq_handler_ehci, // 92 - ehci
- irq_handler_usbotg20, // 93
- 0, // 94 - reserved
- 0, // 95 - reserved
- 0, // 96 - reserved
- 0, // 97 - reserved
- 0, // 98 - reserved
- 0, // 99 - reserved
- 0, // 100 - reserved
- irq_handler_trng, // 101 - trng
- irq_handler_uart6, // 102 - uart6
- irq_handler_uart7, // 103 - uart7
- irq_handler_eadc10, // 104 - eadc1 interrupt source 0
- irq_handler_eadc11, // 105 - eadc1 interrupt source 1
- irq_handler_eadc12, // 106 - eadc1 interrupt source 2
- irq_handler_eadc13, // 107 - eadc1 interrupt source 3
- irq_handler_can2, // 108 - can2
- };
- /*- Implementations ---------------------------------------------------------*/
- //-----------------------------------------------------------------------------
- __attribute__ ((used, section(".reset_handler"), optimize("-fno-tree-loop-distribute-patterns")))
- void irq_handler_reset(void)
- {
- unsigned int *src, *dst;
- src = &_etext;
- dst = &_data;
- while (dst < &_edata)
- *dst++ = *src++;
- dst = &_bss;
- while (dst < &_ebss)
- *dst++ = 0;
- // Enable FPU
- SCB->CPACR |= (0xf << 20);
- __DSB();
- __ISB();
- SCB->VTOR = (uint32_t)vectors;
- main();
- while (1);
- }
- //-----------------------------------------------------------------------------
- void irq_handler_dummy(void)
- {
- while (1);
- }
|