summaryrefslogtreecommitdiff
path: root/nuttx
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx')
-rw-r--r--nuttx/ChangeLog3
-rw-r--r--nuttx/Documentation/NuttX.html5
-rw-r--r--nuttx/TODO8
-rw-r--r--nuttx/arch/arm/src/c5471/c5471_vectors.S35
-rw-r--r--nuttx/arch/arm/src/common/up_assert.c151
-rw-r--r--nuttx/arch/arm/src/common/up_internal.h12
-rw-r--r--nuttx/arch/arm/src/common/up_vectors.S36
-rw-r--r--nuttx/configs/README.txt4
-rw-r--r--nuttx/configs/c5471evm/README.txt72
-rw-r--r--nuttx/configs/c5471evm/defconfig5
-rw-r--r--nuttx/configs/c5471evm/dhcpconfig5
-rw-r--r--nuttx/configs/c5471evm/netconfig5
-rw-r--r--nuttx/configs/c5471evm/nshconfig5
-rw-r--r--nuttx/configs/mcu123-lpc214x/README.txt96
-rw-r--r--nuttx/configs/mcu123-lpc214x/nsh/defconfig5
-rw-r--r--nuttx/configs/mcu123-lpc214x/ostest/defconfig5
-rw-r--r--nuttx/configs/ntosd-dm320/README.txt77
-rw-r--r--nuttx/configs/ntosd-dm320/nettest/defconfig5
-rw-r--r--nuttx/configs/ntosd-dm320/nsh/defconfig5
-rw-r--r--nuttx/configs/ntosd-dm320/ostest/defconfig5
-rw-r--r--nuttx/configs/ntosd-dm320/udp/defconfig5
-rw-r--r--nuttx/configs/ntosd-dm320/uip/defconfig5
22 files changed, 506 insertions, 48 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index c133ff5d0..5c57f6aea 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -482,6 +482,9 @@
0.3.16 2008-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
* Added header files defining a common USB device controller architecture
* Added USB device side driver for the LPC214x (untested at initial checkin)
+ * Add an option to set aside a separate stack for interrupt handling (ARM only).
+ This is useful when memory is constrained, there are multiple tasks, and
+ the interrupt stack requirement is high (as when USB is enabled).
diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html
index 00d58f193..b405c52df 100644
--- a/nuttx/Documentation/NuttX.html
+++ b/nuttx/Documentation/NuttX.html
@@ -8,7 +8,7 @@
<tr align="center" bgcolor="#e4e4e4">
<td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
- <p>Last Updated: September 29, 2008</p>
+ <p>Last Updated: October 6, 2008</p>
</td>
</tr>
</table>
@@ -1072,6 +1072,9 @@ buildroot-0.1.0 2007-03-09 &lt;spudmonkey@racsa.co.cr&gt
nuttx-0.3.16 2008-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
* Added header files defining a common USB device controller architecture
* Added USB device side driver for the LPC214x (untested at initial checkin)
+ * Add an option to set aside a separate stack for interrupt handling (ARM only).
+ This is useful when memory is constrained, there are multiple tasks, and
+ the interrupt stack requirement is high (as when USB is enabled).
pascal-0.1.3 2008-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
diff --git a/nuttx/TODO b/nuttx/TODO
index 6555ce5d8..87e0dd119 100644
--- a/nuttx/TODO
+++ b/nuttx/TODO
@@ -16,7 +16,7 @@ NuttX TODO List (Last updated July 31, 2008)
(3) Build system
(2) NuttShell (NSH) (examples/nsh)
(1) Other Applications & Tests (examples/)
- (1) ARM (arch/arm/)
+ (0) ARM (arch/arm/)
(1) ARM/C5471 (arch/arm/src/c5471/)
(1) ARM/DM320 (arch/arm/src/dm320/)
(1) ARM/LPC214x (arch/arm/src/lpc214x/)
@@ -321,12 +321,6 @@ o Other Applications & Tests (examples/)
o ARM (arch/arm/)
^^^^^^^^^^^^^^^
- Description: Add option to use a separate stack for interrupt handling. At
- present, each interrupt executes on top of the user stack
- allocation making each user stack allocation larger than needed.
- Status: Open
- Priority: Medium
-
o ARM/C5471 (arch/arm/src/c5471/)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
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
diff --git a/nuttx/arch/arm/src/common/up_assert.c b/nuttx/arch/arm/src/common/up_assert.c
index 895b1f0f5..1790225c2 100644
--- a/nuttx/arch/arm/src/common/up_assert.c
+++ b/nuttx/arch/arm/src/common/up_assert.c
@@ -94,62 +94,143 @@ static inline uint32 up_getsp(void)
****************************************************************************/
#ifdef CONFIG_ARCH_STACKDUMP
-static void up_stackdump(void)
+static void up_stackdump(uint32 sp, uint32 stack_base)
+{
+ uint32 stack ;
+
+ for (stack = sp & ~0x1f; stack < stack_base; stack += 32)
+ {
+ uint32 *ptr = (uint32*)stack;
+ lldbg("%08x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
+ stack, ptr[0], ptr[1], ptr[2], ptr[3],
+ ptr[4], ptr[5], ptr[6], ptr[7]);
+ }
+}
+#else
+# define up_stackdump()
+#endif
+
+/****************************************************************************
+ * Name: up_registerdump
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_STACKDUMP
+static inline void up_registerdump(void)
+{
+ /* Are user registers available from interrupt processing? */
+
+ if (current_regs)
+ {
+ int regs;
+
+ /* Yes.. dump the interrupt registers */
+
+ for (regs = REG_R0; regs <= REG_R15; regs += 8)
+ {
+ uint32 *ptr = (uint32*)&current_regs[regs];
+ lldbg("R%d: %08x %08x %08x %08x %08x %08x %08x %08x\n",
+ regs, ptr[0], ptr[1], ptr[2], ptr[3],
+ ptr[4], ptr[5], ptr[6], ptr[7]);
+ }
+ lldbg("CPSR: %08x\n", current_regs[REG_CPSR]);
+ }
+}
+#else
+# define up_registerdump()
+#endif
+
+/****************************************************************************
+ * Name: up_dumpstate
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_STACKDUMP
+static void up_dumpstate(void)
{
_TCB *rtcb = (_TCB*)g_readytorun.head;
uint32 sp = up_getsp();
- uint32 stack_base;
- uint32 stack_size;
+ uint32 ustackbase;
+ uint32 ustacksize;
+#if CONFIG_ARCH_INTERRUPTSTACK > 3
+ uint32 istackbase;
+ uint32 istacksize;
+#endif
+
+ /* Get the limits on the user stack memory */
if (rtcb->pid == 0)
{
- stack_base = g_heapbase - 4;
- stack_size = CONFIG_PROC_STACK_SIZE;
+ ustackbase = g_heapbase - 4;
+ ustacksize = CONFIG_PROC_STACK_SIZE;
}
else
{
- stack_base = (uint32)rtcb->adj_stack_ptr;
- stack_size = (uint32)rtcb->adj_stack_size;
+ ustackbase = (uint32)rtcb->adj_stack_ptr;
+ ustacksize = (uint32)rtcb->adj_stack_size;
+ }
+
+ /* Get the limits on the interrupt stack memory */
+
+#if CONFIG_ARCH_INTERRUPTSTACK > 3
+ istackbase = (uint32)&g_userstack;
+ istacksize = (CONFIG_ARCH_INTERRUPTSTACK & ~3) - 4;
+
+ /* Show interrupt stack info */
+
+ lldbg("sp: %08x\n", sp);
+ lldbg("IRQ stack:\n");
+ lldbg(" base: %08x\n", istackbase);
+ lldbg(" size: %08x\n", istacksize);
+
+ /* Does the current stack pointer lie within the interrupt
+ * stack?
+ */
+
+ if (sp <= istackbase && sp < istackbase - istacksize)
+ {
+ /* Yes.. dump the interrupt stack */
+
+ up_stackdump(sp, istackbase);
+
+ /* Extract the user stack pointer which should lie
+ * at the base of the interrupt stack.
+ */
+
+ sp = g_userstack;
+ lldbg("sp: %08x\n", sp);
}
- lldbg("stack_base: %08x\n", stack_base);
- lldbg("stack_size: %08x\n", stack_size);
+ /* Show user stack info */
+
+ lldbg("User stack:\n");
+ lldbg(" base: %08x\n", ustackbase);
+ lldbg(" size: %08x\n", ustacksize);
+#else
lldbg("sp: %08x\n", sp);
+ lldbg("stack base: %08x\n", ustackbase);
+ lldbg("stack size: %08x\n", ustacksize);
+#endif
+
+ /* Dump the user stack if the stack pointer lies within the allocated user
+ * stack memory.
+ */
- if (sp >= stack_base || sp < stack_base - stack_size)
+ if (sp >= ustackbase || sp < ustackbase - ustacksize)
{
+#if !defined(CONFIG_ARCH_INTERRUPTSTACK) || CONFIG_ARCH_INTERRUPTSTACK < 4
lldbg("ERROR: Stack pointer is not within allocated stack\n");
- return;
+#endif
}
else
{
- uint32 stack = sp & ~0x1f;
-
- for (stack = sp & ~0x1f; stack < stack_base; stack += 32)
- {
- uint32 *ptr = (uint32*)stack;
- lldbg("%08x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
- stack, ptr[0], ptr[1], ptr[2], ptr[3],
- ptr[4], ptr[5], ptr[6], ptr[7]);
- }
+ up_stackdump(sp, ustackbase);
}
- if (current_regs)
- {
- int regs;
+ /* Then dump the registers (if available) */
- for (regs = REG_R0; regs <= REG_R15; regs += 8)
- {
- uint32 *ptr = (uint32*)&current_regs[regs];
- lldbg("R%d: %08x %08x %08x %08x %08x %08x %08x %08x\n",
- regs, ptr[0], ptr[1], ptr[2], ptr[3],
- ptr[4], ptr[5], ptr[6], ptr[7]);
- }
- lldbg("CPSR: %08x\n", current_regs[REG_CPSR]);
- }
+ up_registerdump();
}
#else
-# define up_stackdump()
+# define up_dumpstate()
#endif
/****************************************************************************
@@ -201,7 +282,7 @@ void up_assert(const ubyte *filename, int lineno)
lldbg("Assertion failed at file:%s line: %d\n",
filename, lineno);
#endif
- up_stackdump();
+ up_dumpstate();
_up_assert(EXIT_FAILURE);
}
@@ -223,6 +304,6 @@ void up_assert_code(const ubyte *filename, int lineno, int errorcode)
lldbg("Assertion failed at file:%s line: %d error code: %d\n",
filename, lineno, errorcode);
#endif
- up_stackdump();
+ up_dumpstate();
_up_assert(errorcode);
}
diff --git a/nuttx/arch/arm/src/common/up_internal.h b/nuttx/arch/arm/src/common/up_internal.h
index 76313b31d..862ceb82c 100644
--- a/nuttx/arch/arm/src/common/up_internal.h
+++ b/nuttx/arch/arm/src/common/up_internal.h
@@ -65,6 +65,12 @@
# define CONFIG_USE_EARLYSERIALINIT 1
#endif
+/* Check if an interrupt stack size is configured */
+
+#ifndef CONFIG_ARCH_INTERRUPTSTACK
+# define CONFIG_ARCH_INTERRUPTSTACK 0
+#endif
+
/****************************************************************************
* Public Types
****************************************************************************/
@@ -92,6 +98,12 @@ extern uint32 *current_regs;
*/
extern uint32 g_heapbase;
+
+/* Address of the saved user stack pointer */
+
+#if CONFIG_ARCH_INTERRUPTSTACK > 3
+extern uint32 g_userstack;
+#endif
#endif
/****************************************************************************
diff --git a/nuttx/arch/arm/src/common/up_vectors.S b/nuttx/arch/arm/src/common/up_vectors.S
index 6d4c79e7d..e97683a16 100644
--- a/nuttx/arch/arm/src/common/up_vectors.S
+++ b/nuttx/arch/arm/src/common/up_vectors.S
@@ -128,7 +128,15 @@ up_vectorirq:
mov fp, #0 /* Init frame pointer */
mov r0, sp /* Get r0=xcp */
+
+#if CONFIG_ARCH_INTERRUPTSTACK > 3
+ ldr sp, .Lirqstackbase /* SP = interrupt stack base */
+ str r0, [sp] /* Save the user stack pointer */
+ bl up_decodeirq /* Call the handler */
+ ldr sp, [sp] /* Restore the user stack pointer */
+#else
bl up_decodeirq /* Call the handler */
+#endif
/* Restore the CPSR, SVC modr registers and return */
.Lnoirqset:
@@ -138,8 +146,11 @@ up_vectorirq:
.Lirqtmp:
.word g_irqtmp
+#if CONFIG_ARCH_INTERRUPTSTACK > 3
+.Lirqstackbase:
+ .word up_stackbase
+#endif
.size up_vectorirq, . - up_vectorirq
-
.align 5
/************************************************************************************
@@ -404,4 +415,25 @@ up_vectorfiq:
subs pc, lr, #4
.size up_vectofiq, . - up_vectorfiq
- .align 5
+/************************************************************************************
+ * 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
diff --git a/nuttx/configs/README.txt b/nuttx/configs/README.txt
index ca3f44fa7..c7f557d65 100644
--- a/nuttx/configs/README.txt
+++ b/nuttx/configs/README.txt
@@ -124,8 +124,8 @@ defconfig -- This is a configuration file similar to the Linux
CONFIG_ARCH_BOARD - Identifies the configs subdirectory and
hence, the board that supports the particular chip or SoC.
CONFIG_ARCH_BOARD_name - For use in C code
- CONFIG_ENDIAN_BIG - define if big endian (default is little
- endian)
+ CONFIG_ENDIAN_BIG - define if big endian (default is little
+ endian)
Some architectures require a description of the RAM configuration:
diff --git a/nuttx/configs/c5471evm/README.txt b/nuttx/configs/c5471evm/README.txt
index f516f24a7..fd276ed05 100644
--- a/nuttx/configs/c5471evm/README.txt
+++ b/nuttx/configs/c5471evm/README.txt
@@ -1,6 +1,78 @@
README
^^^^^^
+ARM/C5471-specific Configuration Options
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ CONFIG_ARCH - Identifies the arch/ subdirectory. This should
+ be set to:
+
+ CONFIG_ARCH=arm
+
+ CONFIG_ARCH_name - For use in C code:
+
+ CONFIG_ARCH_ARM=y
+
+ CONFIG_ARCH_CHIP - Identifies the arch/*/chip subdirectory
+
+ CONFIG_ARCH_CHIP=c5471
+
+ CONFIG_ARCH_CHIP_name - For use in C code
+
+ CONFIG_ARCH_CHIP_C5471
+
+ CONFIG_ARCH_BOARD - Identifies the configs subdirectory and
+ hence, the board that supports the particular chip or SoC.
+
+ CONFIG_ARCH_BOARD=c5471evm (for the Spectrum Digital C5471 EVM)
+
+ CONFIG_ARCH_BOARD_name - For use in C code
+
+ CONFIG_ARCH_BOARD_C5471EVM (for the Spectrum Digital C5471 EVM)
+
+ CONFIG_ARCH_LOOPSPERMSEC - Must be calibrated for correct operation
+ of delay loops
+
+ CONFIG_ENDIAN_BIG - define if big endian (default is little
+ endian)
+
+ CONFIG_ROM_VECTORS - should be defined for the C5471 because the
+ interrupt vectors are in ROM
+
+ CONFIG_DRAM_END - the size of installed DRAM. Unique to c5471
+
+ CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to boards that
+ have LEDs
+
+ CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+ stack. If defined, this symbol is the size of the interrupt
+ stack in bytes. If not defined, the user task stacks will be
+ used during interrupt handling.
+
+ CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
+
+ C5471 specific device driver settings
+
+ CONFIG_SERIAL_IRDA_CONSOLE - selects the IRDA UART for the
+ console ant ttys0 (default is the modem UART).
+ CONFIG_UART_*_HWFLOWCONTROL - enables hardware flow control
+ CONFIG_UART_*_RXBUFSIZE - Characters are buffered as received.
+ This specific the size of the receive buffer
+ CONFIG_UART_*_TXBUFSIZE - Characters are buffered before
+ being sent. This specific the size of the transmit buffer
+ CONFIG_UART_*_BAUD - The configure BAUD of the UART. Must be
+ CONFIG_UART_*_BITS - The number of bits. Must be either 7 or 8.
+ CONFIG_UART_*_PARTIY - 0=no parity, 1=odd parity, 2=even parity
+ CONFIG_UART_*_2STOP - Two stop bits
+
+ C5471 Ethernet Driver settings
+
+ CONFIG_C5471_NET_STATS
+ CONFIG_C5471_ETHERNET_PHY={ETHERNET_PHY_LU3X31T_T64,ETHERNET_PHY_AC101L}
+ CONFIG_NET_C5471_AUTONEGOTIATION
+ CONFIG_NET_C5471_BASET100
+ CONFIG_NET_C5471_BASET10
+
defconfig
^^^^^^^^^
The default configuration file, defconfig, performs a
diff --git a/nuttx/configs/c5471evm/defconfig b/nuttx/configs/c5471evm/defconfig
index 626e7fc8b..d0a4f82f5 100644
--- a/nuttx/configs/c5471evm/defconfig
+++ b/nuttx/configs/c5471evm/defconfig
@@ -51,6 +51,10 @@
# CONFIG_DRAM_END - the size of installed DRAM.
# Unique to c5471
# CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to c5471.
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -63,6 +67,7 @@ CONFIG_BOARD_LOOPSPERMSEC=1250
CONFIG_ROM_VECTORS=n
CONFIG_DRAM_END=0x11000000
CONFIG_ARCH_LEDS=y
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=y
#
diff --git a/nuttx/configs/c5471evm/dhcpconfig b/nuttx/configs/c5471evm/dhcpconfig
index cbcea2f62..5b3a0e665 100644
--- a/nuttx/configs/c5471evm/dhcpconfig
+++ b/nuttx/configs/c5471evm/dhcpconfig
@@ -51,6 +51,10 @@
# CONFIG_DRAM_END - the size of installed DRAM.
# Unique to c5471
# CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to c5471.
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -63,6 +67,7 @@ CONFIG_BOARD_LOOPSPERMSEC=1250
CONFIG_ROM_VECTORS=n
CONFIG_DRAM_END=0x11000000
CONFIG_ARCH_LEDS=y
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=y
#
diff --git a/nuttx/configs/c5471evm/netconfig b/nuttx/configs/c5471evm/netconfig
index 109cd7279..e85364d7b 100644
--- a/nuttx/configs/c5471evm/netconfig
+++ b/nuttx/configs/c5471evm/netconfig
@@ -51,6 +51,10 @@
# CONFIG_DRAM_END - the size of installed DRAM.
# Unique to c5471
# CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to c5471.
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -63,6 +67,7 @@ CONFIG_BOARD_LOOPSPERMSEC=1250
CONFIG_ROM_VECTORS=n
CONFIG_DRAM_END=0x11000000
CONFIG_ARCH_LEDS=y
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=y
#
diff --git a/nuttx/configs/c5471evm/nshconfig b/nuttx/configs/c5471evm/nshconfig
index 206438f17..a45f91fb7 100644
--- a/nuttx/configs/c5471evm/nshconfig
+++ b/nuttx/configs/c5471evm/nshconfig
@@ -51,6 +51,10 @@
# CONFIG_DRAM_END - the size of installed DRAM.
# Unique to c5471
# CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to c5471.
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -63,6 +67,7 @@ CONFIG_BOARD_LOOPSPERMSEC=1250
CONFIG_ROM_VECTORS=n
CONFIG_DRAM_END=0x11000000
CONFIG_ARCH_LEDS=y
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=y
#
diff --git a/nuttx/configs/mcu123-lpc214x/README.txt b/nuttx/configs/mcu123-lpc214x/README.txt
index bab1758ee..16456266e 100644
--- a/nuttx/configs/mcu123-lpc214x/README.txt
+++ b/nuttx/configs/mcu123-lpc214x/README.txt
@@ -15,6 +15,102 @@ For example, the path to the built lpc21isp binary will most likely
have to have change. Then move this script to the top level NuttX
directory and simply execute it to load NuttX onto the board.
+ARM/LPC214X-specific Configuration Options
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ CONFIG_ARCH - Identifies the arch/ subdirectory. This should
+ be set to:
+
+ CONFIG_ARCH=arm
+
+ CONFIG_ARCH_name - For use in C code:
+
+ CONFIG_ARCH_ARM=y
+
+ CONFIG_ARCH_CHIP - Identifies the arch/*/chip subdirectory
+
+ CONFIG_ARCH_CHIP=c5471
+
+ CONFIG_ARCH_CHIP_name - For use in C code
+
+ CONFIG_ARCH_CHIP_C5471
+
+ CONFIG_ARCH_BOARD - Identifies the configs subdirectory and
+ hence, the board that supports the particular chip or SoC.
+
+ CONFIG_ARCH_BOARD=c5471evm (for the Spectrum Digital C5471 EVM)
+
+ CONFIG_ARCH_BOARD_name - For use in C code
+
+ CONFIG_ARCH_BOARD_C5471EVM (for the Spectrum Digital C5471 EVM)
+
+ CONFIG_ARCH_LOOPSPERMSEC - Must be calibrated for correct operation
+ of delay loops
+
+ CONFIG_ENDIAN_BIG - define if big endian (default is little
+ endian)
+
+ CONFIG_DRAM_SIZE - Describes the installed DRAM.
+
+ CONFIG_DRAM_START - The start address of installed DRAM
+
+ CONFIG_DRAM_END - Should be (CONFIG_DRAM_START+CONFIG_DRAM_SIZE)
+
+ CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to boards that
+ have LEDs
+
+ CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+ stack. If defined, this symbol is the size of the interrupt
+ stack in bytes. If not defined, the user task stacks will be
+ used during interrupt handling.
+
+ CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
+
+ LPC2148 specific chip initialization
+
+ CONFIG_EXTMEM_MODE, CONFIG_RAM_MODE, CONFIG_CODE_BASE, CONFIG_PLL_SETUP,
+ CONFIG_MAM_SETUP, CONFIG_APBDIV_SETUP, CONFIG_EMC_SETUP, CONFIG_BCFG0_SETUP,
+ CONFIG_BCFG1_SETUP, CONFIG_BCFG2_SETUP, CONFIG_BCFG3_SETUP, CONFIG_ADC_SETUP
+
+ LPC214X specific device driver settings
+
+ CONFIG_UARTn_SERIAL_CONSOLE - selects the UARTn for the
+ console and ttys0 (default is the UART0).
+
+ CONFIG_UARTn_RXBUFSIZE - Characters are buffered as received.
+ This specific the size of the receive buffer
+
+ CONFIG_UARTn_TXBUFSIZE - Characters are buffered before
+ being sent. This specific the size of the transmit buffer
+
+ CONFIG_UARTn_BAUD - The configure BAUD of the UART.
+
+ CONFIG_UARTn_BITS - The number of bits. Must be either 7 or 8.
+
+ CONFIG_UARTn_PARTIY - 0=no parity, 1=odd parity, 2=even parity, 3=mark 1, 4=space 0
+
+ CONFIG_UARTn_2STOP - Two stop bits
+
+ LPC214X USB Configuration
+
+ CONFIG_LPC214X_USBDEV_FRAME_INTERRUPT
+ Handle USB Start-Of-Frame events.
+ Enable reading SOF from interrupt handler vs. simply reading on demand.
+ Probably a bad idea... Unless there is some issue with sampling the SOF
+ from hardware asynchronously.
+
+ CONFIG_LPC214X_USBDEV_EPFAST_INTERRUPT
+ Enable high priority interrupts. I have no idea why you might want to
+ do that
+
+ CONFIG_LPC214X_USBDEV_NDMADESCRIPTORS
+ Number of DMA descriptors to allocate in the 8Kb USB RAM. This is a
+ tradeoff between the number of DMA channels that can be supported vs
+ the size of the DMA buffers available.
+
+ CONFIG_LPC214X_USBDEV_DMA
+ Enable lpc214x-specific DMA support
+
Configurations
^^^^^^^^^^^^^^
diff --git a/nuttx/configs/mcu123-lpc214x/nsh/defconfig b/nuttx/configs/mcu123-lpc214x/nsh/defconfig
index 3dec91a3a..cf194adf1 100644
--- a/nuttx/configs/mcu123-lpc214x/nsh/defconfig
+++ b/nuttx/configs/mcu123-lpc214x/nsh/defconfig
@@ -50,6 +50,10 @@
# CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to lpc2148.
# CONFIG_DRAM_SIZE - Describes the internal DRAM.
# CONFIG_DRAM_START - The start address of internal DRAM
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -62,6 +66,7 @@ CONFIG_ARCH_LEDS=y
CONFIG_DRAM_SIZE=0x00008000
CONFIG_DRAM_START=0x40000000
CONFIG_DRAM_END=(CONFIG_DRAM_START+CONFIG_DRAM_SIZE)
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=y
#
diff --git a/nuttx/configs/mcu123-lpc214x/ostest/defconfig b/nuttx/configs/mcu123-lpc214x/ostest/defconfig
index 4a1e38193..fdbabd3ed 100644
--- a/nuttx/configs/mcu123-lpc214x/ostest/defconfig
+++ b/nuttx/configs/mcu123-lpc214x/ostest/defconfig
@@ -50,6 +50,10 @@
# CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to lpc2148.
# CONFIG_DRAM_SIZE - Describes the internal DRAM.
# CONFIG_DRAM_START - The start address of internal DRAM
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -62,6 +66,7 @@ CONFIG_ARCH_LEDS=y
CONFIG_DRAM_SIZE=0x00008000
CONFIG_DRAM_START=0x40000000
CONFIG_DRAM_END=(CONFIG_DRAM_START+CONFIG_DRAM_SIZE)
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=y
#
diff --git a/nuttx/configs/ntosd-dm320/README.txt b/nuttx/configs/ntosd-dm320/README.txt
index 03111148b..6e620f3d6 100644
--- a/nuttx/configs/ntosd-dm320/README.txt
+++ b/nuttx/configs/ntosd-dm320/README.txt
@@ -1,6 +1,83 @@
README
^^^^^^
+ARM/DM320-specific Configuration Options
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ CONFIG_ARCH - Identifies the arch/ subdirectory. This should
+ be set to:
+
+ CONFIG_ARCH=arm
+
+ CONFIG_ARCH_name - For use in C code:
+
+ CONFIG_ARCH_ARM=y
+
+ CONFIG_ARCH_CHIP - Identifies the arch/*/chip subdirectory
+
+ CONFIG_ARCH_CHIP=c5471
+
+ CONFIG_ARCH_CHIP_name - For use in C code
+
+ CONFIG_ARCH_CHIP_C5471
+
+ CONFIG_ARCH_BOARD - Identifies the configs subdirectory and
+ hence, the board that supports the particular chip or SoC.
+
+ CONFIG_ARCH_BOARD=c5471evm (for the Spectrum Digital C5471 EVM)
+
+ CONFIG_ARCH_BOARD_name - For use in C code
+
+ CONFIG_ARCH_BOARD_C5471EVM (for the Spectrum Digital C5471 EVM)
+
+ CONFIG_ARCH_LOOPSPERMSEC - Must be calibrated for correct operation
+ of delay loops
+
+ CONFIG_ENDIAN_BIG - define if big endian (default is little
+ endian)
+
+ CONFIG_DRAM_SIZE - Describes the installed DRAM.
+
+ CONFIG_DRAM_START - The start address of installed DRAM
+
+ CONFIG_DRAM_VSTART - The startaddress of DRAM (virtual)
+
+ CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to boards that
+ have LEDs
+
+ CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+ stack. If defined, this symbol is the size of the interrupt
+ stack in bytes. If not defined, the user task stacks will be
+ used during interrupt handling.
+
+ CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
+
+ DM320 specific device driver settings
+
+ CONFIG_UARTn_SERIAL_CONSOLE - selects the UARTn for the
+ console and ttys0 (default is the UART0).
+ CONFIG_UARTn_RXBUFSIZE - Characters are buffered as received.
+ This specific the size of the receive buffer
+ CONFIG_UARTn_TXBUFSIZE - Characters are buffered before
+ being sent. This specific the size of the transmit buffer
+ CONFIG_UARTn_BAUD - The configure BAUD of the UART. Must be
+ CONFIG_UARTn_BITS - The number of bits. Must be either 7 or 8.
+ CONFIG_UARTn_PARTIY - 0=no parity, 1=odd parity, 2=even parity
+ CONFIG_UARTn_2STOP - Two stop bits
+
+ DM320 USB Configuration
+
+ CONFIG_DM320_GIO_USBATTACH
+ GIO that detects USB attach/detach events
+ CONFIG_DM320_GIO_USBDPPULLUP
+ GIO
+ CONFIG_DMA320_USBDEV_DMA
+ Enable DM320-specific DMA support
+ CONFIG_DM320_GIO_USBATTACH=6
+
+Configurations
+^^^^^^^^^^^^^^
+
Each Neuros OSD configuration is maintained in a sudirectory and
can be selected as follow:
diff --git a/nuttx/configs/ntosd-dm320/nettest/defconfig b/nuttx/configs/ntosd-dm320/nettest/defconfig
index 491e7a8a8..a17635949 100644
--- a/nuttx/configs/ntosd-dm320/nettest/defconfig
+++ b/nuttx/configs/ntosd-dm320/nettest/defconfig
@@ -50,6 +50,10 @@
# CONFIG_DRAM_SIZE - Describes the installed DRAM.
# CONFIG_DRAM_START - The start address of DRAM (physical)
# CONFIG_DRAM_VSTART - The startaddress of DRAM (virtual)
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -63,6 +67,7 @@ CONFIG_DRAM_SIZE=0x01000000
CONFIG_DRAM_START=0x01000000
CONFIG_DRAM_VSTART=0x00000000
CONFIG_DRAM_NUTTXENTRY=0x01008000
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=n
#
diff --git a/nuttx/configs/ntosd-dm320/nsh/defconfig b/nuttx/configs/ntosd-dm320/nsh/defconfig
index 0b2486383..4fb6c47bb 100644
--- a/nuttx/configs/ntosd-dm320/nsh/defconfig
+++ b/nuttx/configs/ntosd-dm320/nsh/defconfig
@@ -50,6 +50,10 @@
# CONFIG_DRAM_SIZE - Describes the installed DRAM.
# CONFIG_DRAM_START - The start address of DRAM (physical)
# CONFIG_DRAM_VSTART - The startaddress of DRAM (virtual)
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -63,6 +67,7 @@ CONFIG_DRAM_SIZE=0x01000000
CONFIG_DRAM_START=0x01000000
CONFIG_DRAM_VSTART=0x00000000
CONFIG_DRAM_NUTTXENTRY=0x01008000
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=n
#
diff --git a/nuttx/configs/ntosd-dm320/ostest/defconfig b/nuttx/configs/ntosd-dm320/ostest/defconfig
index 54d71af12..a8ac562d8 100644
--- a/nuttx/configs/ntosd-dm320/ostest/defconfig
+++ b/nuttx/configs/ntosd-dm320/ostest/defconfig
@@ -50,6 +50,10 @@
# CONFIG_DRAM_SIZE - Describes the installed DRAM.
# CONFIG_DRAM_START - The start address of DRAM (physical)
# CONFIG_DRAM_VSTART - The startaddress of DRAM (virtual)
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -63,6 +67,7 @@ CONFIG_DRAM_SIZE=0x01000000
CONFIG_DRAM_START=0x01000000
CONFIG_DRAM_VSTART=0x00000000
CONFIG_DRAM_NUTTXENTRY=0x01008000
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=y
#
diff --git a/nuttx/configs/ntosd-dm320/udp/defconfig b/nuttx/configs/ntosd-dm320/udp/defconfig
index b3c0633f9..d4c02d7ec 100644
--- a/nuttx/configs/ntosd-dm320/udp/defconfig
+++ b/nuttx/configs/ntosd-dm320/udp/defconfig
@@ -50,6 +50,10 @@
# CONFIG_DRAM_SIZE - Describes the installed DRAM.
# CONFIG_DRAM_START - The start address of DRAM (physical)
# CONFIG_DRAM_VSTART - The startaddress of DRAM (virtual)
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -63,6 +67,7 @@ CONFIG_DRAM_SIZE=0x01000000
CONFIG_DRAM_START=0x01000000
CONFIG_DRAM_VSTART=0x00000000
CONFIG_DRAM_NUTTXENTRY=0x01008000
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=n
#
diff --git a/nuttx/configs/ntosd-dm320/uip/defconfig b/nuttx/configs/ntosd-dm320/uip/defconfig
index ace6d935a..9f19366e8 100644
--- a/nuttx/configs/ntosd-dm320/uip/defconfig
+++ b/nuttx/configs/ntosd-dm320/uip/defconfig
@@ -50,6 +50,10 @@
# CONFIG_DRAM_SIZE - Describes the installed DRAM.
# CONFIG_DRAM_START - The start address of DRAM (physical)
# CONFIG_DRAM_VSTART - The startaddress of DRAM (virtual)
+# CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
+# stack. If defined, this symbol is the size of the interrupt
+# stack in bytes. If not defined, the user task stacks will be
+# used during interrupt handling.
# CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
#
CONFIG_ARCH=arm
@@ -63,6 +67,7 @@ CONFIG_DRAM_SIZE=0x01000000
CONFIG_DRAM_START=0x01000000
CONFIG_DRAM_VSTART=0x00000000
CONFIG_DRAM_NUTTXENTRY=0x01008000
+CONFIG_ARCH_INTERRUPTSTACK=0
CONFIG_ARCH_STACKDUMP=n
#