diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2008-10-06 16:20:53 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2008-10-06 16:20:53 +0000 |
commit | a305dd56e4fcf5d74b3bfb5e4d91f1e48e6e1298 (patch) | |
tree | 38238ad32d0cec73a53f458a03c172a8734a8757 /nuttx/arch/arm/src/c5471 | |
parent | 38dc3d5a7c2dfaf6a6d867e7c41ab455d2e8bc6f (diff) | |
download | px4-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')
-rw-r--r-- | nuttx/arch/arm/src/c5471/c5471_vectors.S | 35 |
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 |