Set Vector Table Offset to memory location of our vector table. Since we put the whole programm including the vector table into memory, we need to make use of the Cortex-M4 system control block Vector Table Offset Register (VTOR).
37 lines
1.1 KiB
C
37 lines
1.1 KiB
C
/*
|
|
* This file is part of the libopencm3 project.
|
|
*
|
|
* Copyright (C) 2014 Stefan Agner <stefan@agner.ch>
|
|
*
|
|
* This library is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <libopencm3/cm3/scb.h>
|
|
|
|
extern vector_table_t vector_table;
|
|
|
|
static inline void pre_main(void)
|
|
{
|
|
/*
|
|
* For Vybrid we need to set the stack pointer manually
|
|
* since the boot ROM has its own stack
|
|
*/
|
|
asm ( \
|
|
"ldr sp,=_stack;" \
|
|
);
|
|
|
|
/* Set Vector Table Offset to our memory based vector table */
|
|
SCB_VTOR = (uint32_t)&vector_table;
|
|
}
|