summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/common/up_initialstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/arch/arm/src/common/up_initialstate.c')
-rw-r--r--nuttx/arch/arm/src/common/up_initialstate.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/nuttx/arch/arm/src/common/up_initialstate.c b/nuttx/arch/arm/src/common/up_initialstate.c
index 2dd1695ba..a945b4c51 100644
--- a/nuttx/arch/arm/src/common/up_initialstate.c
+++ b/nuttx/arch/arm/src/common/up_initialstate.c
@@ -81,11 +81,18 @@ void up_initial_state(_TCB *tcb)
/* Initialize the initial exception register context structure */
memset(xcp, 0, sizeof(struct xcptcontext));
- xcp->regs[REG_SP] = (uint32)tcb->adj_stack_ptr;
- xcp->regs[REG_PC] = (uint32)tcb->start;
-#ifdef CONFIG_SUPPRESS_INTERRUPTS
- xcp->regs[REG_CPSR] = SVC_MODE | PSR_I_BIT | PSR_F_BIT;
+ xcp->regs[REG_SP] = (uint32)tcb->adj_stack_ptr;
+ xcp->regs[REG_PC] = (uint32)tcb->start;
+
+#ifdef __thumb2__
+# ifdef CONFIG_SUPPRESS_INTERRUPTS
+ xcp->regs[REG_PRIMASK] = 1;
+# endif
#else
- xcp->regs[REG_CPSR] = SVC_MODE | PSR_F_BIT;
+# ifdef CONFIG_SUPPRESS_INTERRUPTS
+ xcp->regs[REG_CPSR] = SVC_MODE | PSR_I_BIT | PSR_F_BIT;
+# else
+ xcp->regs[REG_CPSR] = SVC_MODE | PSR_F_BIT;
+# endif
#endif
}