blob: a9b48009a692d1a5a9df533f03c5ba08343a6473 [file] [log] [blame]
/* mbed Microcontroller Library - cmsis_nvic for XXXX
* Copyright (c) 2009-2011 ARM Limited. All rights reserved.
*
* CMSIS-style functionality to support dynamic vectors
*/
#include "mcu/cmsis_nvic.h"
#ifndef __CORTEX_M
#error "Macro __CORTEX_M not defined; must define cortex-m type!"
#endif
#if (__CORTEX_M == 0)
#ifndef __VTOR_PRESENT
/* no VTOR is defined so we assume we can't relocate the vector table */
#define __VTOR_PRESENT (0)
#endif
#endif
extern char __isr_vector[];
extern char __vector_tbl_reloc__[];
void
NVIC_Relocate(void)
{
uint32_t *current_location;
uint32_t *new_location;
int i;
/*
* Relocate the vector table from its current position to the position
* designated in the linker script.
*/
current_location = (uint32_t *)&__isr_vector;
new_location = (uint32_t *)&__vector_tbl_reloc__;
if (new_location != current_location) {
for (i = 0; i < NVIC_NUM_VECTORS; i++) {
new_location[i] = current_location[i];
}
}
/* Set VTOR except for M0 */
#if ((__CORTEX_M == 0) && (__VTOR_PRESENT == 0))
#else
SCB->VTOR = (uint32_t)&__vector_tbl_reloc__;
#endif
}