ARM SAM9 BSP Question

Enrico Lüdecke enrico.luedecke at gmx.de
Mon Feb 2 10:46:00 UTC 2009


Hi all,

I am working on a BSP for an ARM SAM9 board. At the moment I try to
understand the interrupt handling of the board itself and the RTEMS part
of it. There is a macro in arm/rtems/score/cpu.h called _CPU_ISR_Enable
I don't fully understand:

#define _CPU_ISR_Enable( _level )               \
  {                                             \
    asm volatile ("MSR  cpsr, %0 \n"            \
                  : : "r" (_level));            \
  }

(Just write the content of %0 to the current program status register)

If I leave it in that way, the interrupts aren't enabled as it seems. If
I change it to:

#define _CPU_ISR_Enable( _level )               \
  {                                                \
    int reg;                                    \
    asm volatile ("MRS  %0, cpsr \n"            \
                  "BIC    %1, %0, #0xc0\n"        \
                  "MSR  cpsr, %1 \n"            \
                  : "=&r" (_level), "=&r" (reg));\
  }
(save the cpsr, clear the IRQ and FIQ mask bit, write it back to cpsr)

the interrupts are enabled and all seems to work well. I use a copy of
RTEMS 4.8. In older versions, the code looked more like mine, but now it
doesn't anymore. My question is: Where do I put my working code? Since
I'm writing a BSP, cpu.h seems to be the wrong place.

Please excuse me, if my question is kind of dumb, but I just started
looking over this whole stuff.

Regards

Enrico



More information about the users mailing list