blob: 7e9809866378c4d5a0bcd08bcb8427b7830ddbc2 [file] [log] [blame]
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
extern void _start();
extern void* __StackTop;
static void HardFaultHandler()
{
uint32_t args[3];
args[0] = 2;
args[1] = (uint32_t)"HARDFAULT";
args[2] = 9;
asm("mov r0, #5\n"
"mov r1, %0\n"
"bkpt 0x00ab" : : "r"(args) : "r0", "r1", "memory");
asm("mov r12, %0\n" "mov r0, #24\n" "bkpt 0x00ab" : : "r"(0xDEADBEEF) : "r0");
while(1);
}
void* const g_vector_table[16] __attribute__((section(".isr_vector"))) = {
(void*)&__StackTop,
(void*)&_start,
(void*)&HardFaultHandler,
(void*)&HardFaultHandler,
(void*)&HardFaultHandler,
(void*)&HardFaultHandler,
(void*)&HardFaultHandler,
};
void ramboot() __attribute__((noreturn, naked, section(".ramboot")));
void ramboot()
{
*(const void**)0xE000ED08 = g_vector_table; // SCB->VTOR
__asm__(
"msr msp, %0\n\t"
"bx %1" : : "r" (g_vector_table[0]),
"r" (g_vector_table[1]) : "memory");
}
#ifdef __cplusplus
}
#endif