X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=cfg%2Fcpu.h;h=8a9457290f9492740a0435dcb96ff681a85dbd36;hb=7f390830190a03757e07e4ee8654021cc0adeee6;hp=23d0ddf1fe157b8893732dd0cd42471f699483b2;hpb=8c4f04bc9071d6d5c9fa55fe097cbff72325f5e9;p=bertos.git diff --git a/cfg/cpu.h b/cfg/cpu.h old mode 100755 new mode 100644 index 23d0ddf1..8a945729 --- a/cfg/cpu.h +++ b/cfg/cpu.h @@ -1,9 +1,34 @@ /** * \file * * * \brief CPU-specific definitions @@ -94,8 +119,8 @@ #define CPU_REG_BITS 32 #define CPU_REGS_CNT 16 #define CPU_SAVED_REGS_CNT FIXME - #define CPU_STACK_GROWS_UPWARD 0 //FIXME - #define CPU_SP_ON_EMPTY_SLOT 0 //FIXME + #define CPU_STACK_GROWS_UPWARD 0 + #define CPU_SP_ON_EMPTY_SLOT 0 #define CPU_BYTE_ORDER (__BIG_ENDIAN__ ? CPU_BIG_ENDIAN : CPU_LITTLE_ENDIAN) #define CPU_HARVARD 0 @@ -135,6 +160,7 @@ #else /* !__IAR_SYSTEMS_ICC__ */ #warning "IRQ_ macros need testing!" + #warning "Test now or die :-)" #define NOP asm volatile ("mov r0,r0" ::) @@ -142,9 +168,9 @@ do { \ asm volatile ( \ "mrs r0, cpsr\n\t" \ - "orr r0, r0, #0xb0\n\t" \ - "msr cpsr, r0" \ - :: \ + "orr r0, r0, #0xc0\n\t" \ + "msr cpsr_c, r0" \ + ::: "r0" \ ); \ } while (0) @@ -152,19 +178,18 @@ do { \ asm volatile ( \ "mrs r0, cpsr\n\t" \ - "bic r0, r0, #0xb0\n\t" \ - "msr cpsr, r0" \ - :: \ + "bic r0, r0, #0xc0\n\t" \ + "msr cpsr_c, r0" \ + ::: "r0" \ ); \ } while (0) #define IRQ_SAVE_DISABLE(x) \ do { \ asm volatile ( \ - "mrs r0, cpsr\n\t" \ - "mov %0, r0\n\t" \ - "orr r0, r0, #0xb0\n\t" \ - "msr cpsr, r0" \ + "mrs %0, cpsr\n\t" \ + "orr r0, %0, #0xc0\n\t" \ + "msr cpsr_c, r0" \ : "=r" (x) \ : /* no inputs */ \ : "r0" \ @@ -174,11 +199,9 @@ #define IRQ_RESTORE(x) \ do { \ asm volatile ( \ - "mov r0, %0\n\t" \ - "msr cpsr, r0" \ + "msr cpsr_c, %0" \ : /* no outputs */ \ : "r" (x) \ - : "r0" \ ); \ } while (0) @@ -186,16 +209,14 @@ ({ \ uint32_t sreg; \ asm volatile ( \ - "mrs r0, cpsr\n\t" \ - "mov %0, r0" \ + "mrs %0, cpsr\n\t" \ : "=r" (sreg) \ : /* no inputs */ \ - : "r0" \ ); \ - (bool)(sreg & 0xb0); \ + !((sreg & 0xc0) == 0xc0); \ }) - #endif /* __IAR_SYSTEMS_ICC_ */ + #endif /* !__IAR_SYSTEMS_ICC_ */ #elif CPU_PPC #define NOP asm volatile ("nop" ::)