aboutsummaryrefslogtreecommitdiffstats
path: root/os/ports/GCC
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2010-03-28 18:03:03 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2010-03-28 18:03:03 +0000
commit2f8c8bbaf64896765d4ba66e2924e30fd4e5ecc9 (patch)
tree341219026e5371e82fe48fd35be9aa572fcc20b2 /os/ports/GCC
parent89491f9ceba04e9e0de52e8d2305eec38329e710 (diff)
downloadChibiOS-2f8c8bbaf64896765d4ba66e2924e30fd4e5ecc9.tar.gz
ChibiOS-2f8c8bbaf64896765d4ba66e2924e30fd4e5ecc9.tar.bz2
ChibiOS-2f8c8bbaf64896765d4ba66e2924e30fd4e5ecc9.zip
Cortex-M0 appears to work now.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1800 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/ports/GCC')
-rw-r--r--os/ports/GCC/ARMCMx/chcore.c45
1 files changed, 23 insertions, 22 deletions
diff --git a/os/ports/GCC/ARMCMx/chcore.c b/os/ports/GCC/ARMCMx/chcore.c
index 6b6123e7c..2ab8d4941 100644
--- a/os/ports/GCC/ARMCMx/chcore.c
+++ b/os/ports/GCC/ARMCMx/chcore.c
@@ -72,33 +72,34 @@ void SysTickVector(void) {
#if CORTEX_MODEL == CORTEX_M0
#define PUSH_CONTEXT(sp, prio) { \
asm volatile ("mrs %0, PSP \n\t" \
+ "sub %0, %0, #40 \n\t" \
+ "stmia %0!, {r3-r7} \n\t" \
"sub %0, %0, #20 \n\t" \
- "push {r3-r7} \n\t" \
- "mov r0, r8 \n\t" \
- "str r0, [%0, #20] \n\t" \
- "mov r0, r9 \n\t" \
- "str r0, [%0, #24] \n\t" \
- "mov r0, r10 \n\t" \
- "str r0, [%0, #28] \n\t" \
- "mov r0, r11 \n\t" \
- "str r0, [%0, #32] \n\t" \
- "mov r0, lr \n\t" \
- "str r0, [%0, #36] \n\t" \
+ "mov r3, r8 \n\t" \
+ "str r3, [%0, #20] \n\t" \
+ "mov r3, r9 \n\t" \
+ "str r3, [%0, #24] \n\t" \
+ "mov r3, r10 \n\t" \
+ "str r3, [%0, #28] \n\t" \
+ "mov r3, r11 \n\t" \
+ "str r3, [%0, #32] \n\t" \
+ "mov r3, lr \n\t" \
+ "str r3, [%0, #36] \n\t" \
: "=r" (sp) : "r" (sp), "r" (prio)); \
}
#define POP_CONTEXT(sp) { \
- asm volatile ("ldr r0, [%0, #20] \n\t" \
- "mov r8, r0 \n\t" \
- "ldr r0, [%0, #24] \n\t" \
- "mov r9, r0 \n\t" \
- "ldr r0, [%0, #28] \n\t" \
- "mov r10, r0 \n\t" \
- "ldr r0, [%0, #32] \n\t" \
- "mov r11, r0 \n\t" \
- "ldr r0, [%0, #36] \n\t" \
- "mov lr, r0 \n\t" \
- "pop {r3-r7} \n\t" \
+ asm volatile ("ldr r3, [%0, #20] \n\t" \
+ "mov r8, r3 \n\t" \
+ "ldr r3, [%0, #24] \n\t" \
+ "mov r9, r3 \n\t" \
+ "ldr r3, [%0, #28] \n\t" \
+ "mov r10, r3 \n\t" \
+ "ldr r3, [%0, #32] \n\t" \
+ "mov r11, r3 \n\t" \
+ "ldr r3, [%0, #36] \n\t" \
+ "mov lr, r3 \n\t" \
+ "ldmia %0!, {r3-r7} \n\t" \
"add %0, %0, #20 \n\t" \
"msr PSP, %0 \n\t" \
"msr BASEPRI, r3 \n\t" \