summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/c5471/c5471_vectors.S
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-10-06 16:20:53 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-10-06 16:20:53 +0000
commita305dd56e4fcf5d74b3bfb5e4d91f1e48e6e1298 (patch)
tree38238ad32d0cec73a53f458a03c172a8734a8757 /nuttx/arch/arm/src/c5471/c5471_vectors.S
parent38dc3d5a7c2dfaf6a6d867e7c41ab455d2e8bc6f (diff)
downloadpx4-nuttx-a305dd56e4fcf5d74b3bfb5e4d91f1e48e6e1298.tar.gz
px4-nuttx-a305dd56e4fcf5d74b3bfb5e4d91f1e48e6e1298.tar.bz2
px4-nuttx-a305dd56e4fcf5d74b3bfb5e4d91f1e48e6e1298.zip
Add option for ARM interrupt stack
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@981 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/arm/src/c5471/c5471_vectors.S')
-rw-r--r--nuttx/arch/arm/src/c5471/c5471_vectors.S35
1 files changed, 34 insertions, 1 deletions
diff --git a/nuttx/arch/arm/src/c5471/c5471_vectors.S b/nuttx/arch/arm/src/c5471/c5471_vectors.S
index 1329017bc..f84647707 100644
--- a/nuttx/arch/arm/src/c5471/c5471_vectors.S
+++ b/nuttx/arch/arm/src/c5471/c5471_vectors.S
@@ -156,7 +156,15 @@ up_vectorirq:
mov fp, #0 /* Init frame pointer */
mov r1, sp /* Get r1=xcp */
+
+#if CONFIG_ARCH_INTERRUPTSTACK > 3
+ ldr sp, .Lirqstackbase /* SP = interrupt stack base */
+ str r1, [sp] /* Save the user stack pointer */
+ bl up_doirq /* Call the handler */
+ ldr sp, [sp] /* Restore the user stack pointer */
+#else
bl up_doirq /* Call the handler */
+#endif
/* Restore the CPSR, SVC modr registers and return */
.Lnoirqset:
@@ -166,7 +174,10 @@ up_vectorirq:
.Lirqtmp:
.word g_irqtmp
-
+#if CONFIG_ARCH_INTERRUPTSTACK > 3
+.Lirqstackbase:
+ .word up_stackbase
+#endif
.align 5
/************************************************************************************
@@ -446,4 +457,26 @@ up_vectorfiq:
.type up_vectoraddrexcptn, %function
up_vectoraddrexcptn:
b up_vectoraddrexcptn
+
+/************************************************************************************
+ * Name: up_interruptstack/g_userstack
+ *
+ * Description:
+ * Shouldn't happen
+ *
+ ************************************************************************************/
+
+#if CONFIG_ARCH_INTERRUPTSTACK > 3
+ .bss
+ .align 4
+ .globl g_userstack
+ .type g_userstack, object
+up_interruptstack:
+ .skip ((CONFIG_ARCH_INTERRUPTSTACK & ~3) - 4)
+g_userstack:
+up_stackbase:
+ .skip 4
+ .size g_userstack, 4
+ .size up_interruptstack, (CONFIG_ARCH_INTERRUPTSTACK & ~3)
+#endif
.end