blob: dfd8af230ebe4c4dfefb73ffceddef3cad1a386b [file] [log] [blame]
/*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "rk3399_mcu.h"
/* Stack configuration */
#define STACK_SIZE 0x00000040
__attribute__ ((section(".co_stack")))
unsigned long pstack[STACK_SIZE];
/* Macro definition */
#define WEAK __attribute__ ((weak))
/* System exception vector handler */
__attribute__ ((used))
void WEAK reset_handler(void);
void WEAK nmi_handler(void);
void WEAK hardware_fault_handler(void);
void WEAK svc_handler(void);
void WEAK pend_sv_handler(void);
void WEAK systick_handler(void);
extern int m0_main(void);
/* Function prototypes */
static void default_reset_handler(void);
static void default_handler(void);
/*
* The minimal vector table for a Cortex M3. Note that the proper constructs
* must be placed on this to ensure that it ends up at physical address
* 0x00000000.
*/
__attribute__ ((used, section(".isr_vector")))
void (* const g_pfnVectors[])(void) = {
/* core Exceptions */
(void *)&pstack[STACK_SIZE], /* the initial stack pointer */
reset_handler,
nmi_handler,
hardware_fault_handler,
0, 0, 0, 0, 0, 0, 0,
svc_handler,
0, 0,
pend_sv_handler,
systick_handler,
/* external exceptions */
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0
};
/**
* This is the code that gets called when the processor first
* starts execution following a reset event. Only the absolutely
* necessary set is performed, after which the application
* supplied m0_main() routine is called.
*/
static void default_reset_handler(void)
{
/* call the application's entry point */
m0_main();
}
/**
* Provide weak aliases for each Exception handler to the Default_Handler.
* As they are weak aliases, any function with the same name will override
* this definition.
*/
#pragma weak reset_handler = default_reset_handler
#pragma weak nmi_handler = default_handler
#pragma weak hardware_fault_handler = default_handler
#pragma weak svc_handler = default_handler
#pragma weak pend_sv_handler = default_handler
#pragma weak systick_handler = default_handler
/**
* This is the code that gets called when the processor receives
* an unexpected interrupt. This simply enters an infinite loop,
* preserving the system state for examination by a debugger.
*/
static void default_handler(void)
{
/* go into an infinite loop. */
while (1)
;
}