From 2f8c8bbaf64896765d4ba66e2924e30fd4e5ecc9 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 28 Mar 2010 18:03:03 +0000 Subject: Cortex-M0 appears to work now. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1800 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/ports/GCC/ARMCMx/chcore.c | 45 ++++++++++++++++++++++---------------------- 1 file 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" \ -- cgit v1.2.3