| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- /*
- * Copyright (c) 2017, Alex Taradov <alex@taradov.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
- /*- Includes ----------------------------------------------------------------*/
- #include "same70.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_supc(void);
- DUMMY void irq_handler_rstc(void);
- DUMMY void irq_handler_rtc(void);
- DUMMY void irq_handler_rtt(void);
- DUMMY void irq_handler_wdt(void);
- DUMMY void irq_handler_pmc(void);
- DUMMY void irq_handler_efc(void);
- DUMMY void irq_handler_uart0(void);
- DUMMY void irq_handler_uart1(void);
- DUMMY void irq_handler_pioa(void);
- DUMMY void irq_handler_piob(void);
- DUMMY void irq_handler_pioc(void);
- DUMMY void irq_handler_usart0(void);
- DUMMY void irq_handler_usart1(void);
- DUMMY void irq_handler_usart2(void);
- DUMMY void irq_handler_piod(void);
- DUMMY void irq_handler_pioe(void);
- DUMMY void irq_handler_hsmci(void);
- DUMMY void irq_handler_twihs0(void);
- DUMMY void irq_handler_twihs1(void);
- DUMMY void irq_handler_spi0(void);
- DUMMY void irq_handler_ssc(void);
- DUMMY void irq_handler_tc0(void);
- DUMMY void irq_handler_tc1(void);
- DUMMY void irq_handler_tc2(void);
- DUMMY void irq_handler_tc3(void);
- DUMMY void irq_handler_tc4(void);
- DUMMY void irq_handler_tc5(void);
- DUMMY void irq_handler_afec0(void);
- DUMMY void irq_handler_dacc(void);
- DUMMY void irq_handler_pwm0(void);
- DUMMY void irq_handler_icm(void);
- DUMMY void irq_handler_acc(void);
- DUMMY void irq_handler_usbhs(void);
- DUMMY void irq_handler_mcan0(void);
- DUMMY void irq_handler_mcan1(void);
- DUMMY void irq_handler_gmac(void);
- DUMMY void irq_handler_afec1(void);
- DUMMY void irq_handler_twihs2(void);
- DUMMY void irq_handler_spi1(void);
- DUMMY void irq_handler_qspi(void);
- DUMMY void irq_handler_uart2(void);
- DUMMY void irq_handler_uart3(void);
- DUMMY void irq_handler_uart4(void);
- DUMMY void irq_handler_tc6(void);
- DUMMY void irq_handler_tc7(void);
- DUMMY void irq_handler_tc8(void);
- DUMMY void irq_handler_tc9(void);
- DUMMY void irq_handler_tc10(void);
- DUMMY void irq_handler_tc11(void);
- DUMMY void irq_handler_aes(void);
- DUMMY void irq_handler_trng(void);
- DUMMY void irq_handler_xdmac(void);
- DUMMY void irq_handler_isi(void);
- DUMMY void irq_handler_pwm1(void);
- DUMMY void irq_handler_sdramc(void);
- DUMMY void irq_handler_rswdt(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(".vectors")))
- void (* const vectors[])(void) =
- {
- &_stack_top, // 0 - Initial Stack Pointer Value
- // Cortex-M7 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_supc, // 0 - Supply Controller
- irq_handler_rstc, // 1 - Reset Controller
- irq_handler_rtc, // 2 - Real Time Clock
- irq_handler_rtt, // 3 - Real Time Timer
- irq_handler_wdt, // 4 - Watchdog Timer
- irq_handler_pmc, // 5 - Power Management Controller
- irq_handler_efc, // 6 - Embedded Flash Controller
- irq_handler_uart0, // 7 - UART 0
- irq_handler_uart1, // 8 - UART 1
- 0, // 9 - Reserved
- irq_handler_pioa, // 10 - Parallel I/O Controller A
- irq_handler_piob, // 11 - Parallel I/O Controller B
- irq_handler_pioc, // 12 - Parallel I/O Controller C
- irq_handler_usart0, // 13 - USART 0
- irq_handler_usart1, // 14 - USART 1
- irq_handler_usart2, // 15 - USART 2
- irq_handler_piod, // 16 - Parallel I/O Controller D
- irq_handler_pioe, // 17 - Parallel I/O Controller E
- irq_handler_hsmci, // 18 - High Speed Multimedia Card Interface
- irq_handler_twihs0, // 19 - Two-wire Interface 0
- irq_handler_twihs1, // 20 - Two-wire Interface 1
- irq_handler_spi0, // 21 - Serial Peripheral Interface 0
- irq_handler_ssc, // 22 - Synchronous Serial Controller
- irq_handler_tc0, // 23 - Timer/Counter 0
- irq_handler_tc1, // 24 - Timer/Counter 1
- irq_handler_tc2, // 25 - Timer/Counter 2
- irq_handler_tc3, // 26 - Timer/Counter 3
- irq_handler_tc4, // 27 - Timer/Counter 4
- irq_handler_tc5, // 28 - Timer/Counter 5
- irq_handler_afec0, // 29 - Analog Front End 0
- irq_handler_dacc, // 30 - Digital To Analog Converter
- irq_handler_pwm0, // 31 - Pulse Width Modulation 0
- irq_handler_icm, // 32 - Integrity Check Monitor
- irq_handler_acc, // 33 - Analog Comparator
- irq_handler_usbhs, // 34 - USB Host / Device Controller
- irq_handler_mcan0, // 35 - Controller Area Network Controller 0
- 0, // 36 - Reserved
- irq_handler_mcan1, // 37 - Controller Area Network Controller 1
- 0, // 38 - Reserved
- irq_handler_gmac, // 39 - Ethernet MAC
- irq_handler_afec1, // 40 - Analog Front End 1
- irq_handler_twihs2, // 41 - Two-wire Interface 2
- irq_handler_spi1, // 42 - Serial Peripheral Interface 1
- irq_handler_qspi, // 43 - Quad I/O Serial Peripheral Interface
- irq_handler_uart2, // 44 - UART 2
- irq_handler_uart3, // 45 - UART 3
- irq_handler_uart4, // 46 - UART 4
- irq_handler_tc6, // 47 - Timer/Counter 6
- irq_handler_tc7, // 48 - Timer/Counter 7
- irq_handler_tc8, // 49 - Timer/Counter 8
- irq_handler_tc9, // 50 - Timer/Counter 9
- irq_handler_tc10, // 51 - Timer/Counter 10
- irq_handler_tc11, // 52 - Timer/Counter 11
- 0, // 53 - Reserved
- 0, // 54 - Reserved
- 0, // 55 - Reserved
- irq_handler_aes, // 56 - Advanced Encryption Standard (AES) Controller
- irq_handler_trng, // 57 - True Random Number Generator
- irq_handler_xdmac, // 58 - DMA Controller
- irq_handler_isi, // 59 - Image Sensor Interface Controller
- irq_handler_pwm1, // 60 - Pulse Width Modulation 1
- 0, // 61 - Reserved
- irq_handler_sdramc, // 62 - SDRAM Controller
- irq_handler_rswdt, // 63 - Reinforced Secure Watchdog Timer
- };
- /*- Implementations ---------------------------------------------------------*/
- //-----------------------------------------------------------------------------
- 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);
- }
|