diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-11-18 19:47:40 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-11-21 16:38:34 +0100 |
commit | f4539aa3950cbc0cd15b13e3327e6c674ebbb9d3 (patch) | |
tree | eb745956ab1bde19c5067701c6c812819dd03601 /cpukit | |
parent | score: Add RTEMS_FATAL_SOURCE_POWERPC_EXCEPTION (diff) | |
download | rtems-f4539aa3950cbc0cd15b13e3327e6c674ebbb9d3.tar.bz2 |
arm: Add _CPU_Thread_Idle_body for ARMv7-M
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/score/cpu/arm/Makefile.am | 1 | ||||
-rw-r--r-- | cpukit/score/cpu/arm/armv7m-thread-idle.c | 30 | ||||
-rw-r--r-- | cpukit/score/cpu/arm/rtems/score/cpu.h | 10 |
3 files changed, 40 insertions, 1 deletions
diff --git a/cpukit/score/cpu/arm/Makefile.am b/cpukit/score/cpu/arm/Makefile.am index cf511c9417..0da1984297 100644 --- a/cpukit/score/cpu/arm/Makefile.am +++ b/cpukit/score/cpu/arm/Makefile.am @@ -33,6 +33,7 @@ libscorecpu_a_SOURCES += armv7m-isr-level-get.c libscorecpu_a_SOURCES += armv7m-isr-level-set.c libscorecpu_a_SOURCES += armv7m-isr-vector-install.c libscorecpu_a_SOURCES += armv7m-multitasking-start-stop.c +libscorecpu_a_SOURCES += armv7m-thread-idle.c include $(srcdir)/preinstall.am include $(top_srcdir)/automake/local.am diff --git a/cpukit/score/cpu/arm/armv7m-thread-idle.c b/cpukit/score/cpu/arm/armv7m-thread-idle.c new file mode 100644 index 0000000000..cc9a05c94d --- /dev/null +++ b/cpukit/score/cpu/arm/armv7m-thread-idle.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2012 embedded brains GmbH. 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 + +void *_CPU_Thread_Idle_body( uintptr_t ignored ) +{ + while ( true ) { + __asm__ volatile ("wfi"); + } +} + +#endif /* ARM_MULTILIB_ARCH_V7M */ diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h b/cpukit/score/cpu/arm/rtems/score/cpu.h index b12133f054..5cc378a8c8 100644 --- a/cpukit/score/cpu/arm/rtems/score/cpu.h +++ b/cpukit/score/cpu/arm/rtems/score/cpu.h @@ -147,7 +147,11 @@ #define CPU_USE_DEFERRED_FP_SWITCH FALSE -#define CPU_PROVIDES_IDLE_THREAD_BODY FALSE +#if defined(ARM_MULTILIB_ARCH_V7M) + #define CPU_PROVIDES_IDLE_THREAD_BODY TRUE +#else + #define CPU_PROVIDES_IDLE_THREAD_BODY FALSE +#endif #define CPU_STACK_GROWS_UP FALSE @@ -461,6 +465,10 @@ static inline uint16_t CPU_swap_u16( uint16_t value ) #endif } +#if CPU_PROVIDES_IDLE_THREAD_BODY == TRUE + void *_CPU_Thread_Idle_body( uintptr_t ignored ); +#endif + /** @} */ #if defined(ARM_MULTILIB_ARCH_V4) |