ARM-7 Stack pointer register in different modes during context switches

Hi, I need a clarification regarding functions portSAVECONTEXT() & portRESTORECONTEXT() for ARM7 for example LPC-2129. These macros can be invoked from any where for example IRQ(timer interrupt) etc.. when the processor enters IRQ mode, stack pointer in use will be SPirq. What I could make out is, while saving the context or restoring, how is the SPsystem is accessed for saving or filling the stack pointer to or from TCB. in portRESTORE_CONTEXT() I could understand that the processor mode will be switched to system mode by “SUBS PC, LR, #4” but the stack pointer gets restored before that… could some one please clarify it? Thanks, Girish

ARM-7 Stack pointer register in different modes during context switches

The comments in the code tell you where it is done:
/* Set R0 to point to the task stack pointer. */
"STMDB  SP,{SP}^                            nt"
"NOP                                        nt"
"SUB    SP, SP, #4                          nt"
"LDMIA  SP!,{R0}                            nt"
If you don’t understand the assembly code then please refer to the ARM instruction set documentation. Regards.

ARM-7 Stack pointer register in different modes during context switches

Thanks.. Yes I gone through the comment and even the assembly code.. but I had missed the meaning of “^” in the code.. sorry for that thanks a lot

ARM-7 Stack pointer register in different modes during context switches

Thanks.. Yes I gone through the comment and even the assembly code.. but I had missed the meaning of “^” in the code.. sorry for that thanks a lot