diff options
Diffstat (limited to 'cpukit/score/cpu/arm/armv7m-initialize.c')
-rw-r--r-- | cpukit/score/cpu/arm/armv7m-initialize.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/cpukit/score/cpu/arm/armv7m-initialize.c b/cpukit/score/cpu/arm/armv7m-initialize.c new file mode 100644 index 0000000000..f8e652d84d --- /dev/null +++ b/cpukit/score/cpu/arm/armv7m-initialize.c @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2011 Sebastian Huber. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include <rtems/score/cpu.h> + +#ifdef ARM_MULTILIB_ARCH_V7M + +#include <rtems/score/armv7m.h> + +void _CPU_Initialize( void ) +{ + /* + * The exception handler used to carry out the thead dispatching must have + * the lowest priority possible. No other exception handlers must have this + * priority if they use services that may lead to a thread dispatch. See + * also "ARMv7-M Architecture Reference Manual, Issue D" section B1.5.4 + * "Exception priorities and preemption". + */ + _ARMV7M_Set_exception_priority( ARMV7M_VECTOR_SVC, 0xff ); + _ARMV7M_Set_exception_priority( ARMV7M_VECTOR_PENDSV, 0xff ); + _ARMV7M_Set_exception_handler( + ARMV7M_VECTOR_SVC, + _ARMV7M_Supervisor_call + ); + _ARMV7M_Set_exception_handler( + ARMV7M_VECTOR_PENDSV, + _ARMV7M_Pendable_service_call + ); +} + +#endif /* ARM_MULTILIB_ARCH_V7M */ |