diff --git a/ChangeLog b/ChangeLog index c133ff5d046..5c57f6aea5c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -482,6 +482,9 @@ 0.3.16 2008-xx-xx Gregory Nutt * 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/Documentation/NuttX.html b/Documentation/NuttX.html index 00d58f19366..b405c52df63 100644 --- a/Documentation/NuttX.html +++ b/Documentation/NuttX.html @@ -8,7 +8,7 @@

NuttX RTOS

-

Last Updated: September 29, 2008

+

Last Updated: October 6, 2008

@@ -1072,6 +1072,9 @@ buildroot-0.1.0 2007-03-09 <spudmonkey@racsa.co.cr> nuttx-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). pascal-0.1.3 2008-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> diff --git a/TODO b/TODO index 6555ce5d887..87e0dd11924 100644 --- a/TODO +++ b/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/arch/arm/src/c5471/c5471_vectors.S b/arch/arm/src/c5471/c5471_vectors.S index 1329017bce4..f8464770786 100644 --- a/arch/arm/src/c5471/c5471_vectors.S +++ b/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/arch/arm/src/common/up_assert.c b/arch/arm/src/common/up_assert.c index 895b1f0f511..1790225c2bb 100644 --- a/arch/arm/src/common/up_assert.c +++ b/arch/arm/src/common/up_assert.c @@ -94,50 +94,37 @@ static inline uint32 up_getsp(void) ****************************************************************************/ #ifdef CONFIG_ARCH_STACKDUMP -static void up_stackdump(void) +static void up_stackdump(uint32 sp, uint32 stack_base) { - _TCB *rtcb = (_TCB*)g_readytorun.head; - uint32 sp = up_getsp(); - uint32 stack_base; - uint32 stack_size; + uint32 stack ; - if (rtcb->pid == 0) + for (stack = sp & ~0x1f; stack < stack_base; stack += 32) { - stack_base = g_heapbase - 4; - stack_size = CONFIG_PROC_STACK_SIZE; - } - else - { - stack_base = (uint32)rtcb->adj_stack_ptr; - stack_size = (uint32)rtcb->adj_stack_size; + 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 - lldbg("stack_base: %08x\n", stack_base); - lldbg("stack_size: %08x\n", stack_size); - lldbg("sp: %08x\n", sp); +/**************************************************************************** + * Name: up_registerdump + ****************************************************************************/ - if (sp >= stack_base || sp < stack_base - stack_size) - { - lldbg("ERROR: Stack pointer is not within allocated stack\n"); - return; - } - 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]); - } - } +#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*)¤t_regs[regs]; @@ -149,7 +136,101 @@ static void up_stackdump(void) } } #else -# define up_stackdump() +# 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 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) + { + ustackbase = g_heapbase - 4; + ustacksize = CONFIG_PROC_STACK_SIZE; + } + else + { + 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); + } + + /* 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 >= ustackbase || sp < ustackbase - ustacksize) + { +#if !defined(CONFIG_ARCH_INTERRUPTSTACK) || CONFIG_ARCH_INTERRUPTSTACK < 4 + lldbg("ERROR: Stack pointer is not within allocated stack\n"); +#endif + } + else + { + up_stackdump(sp, ustackbase); + } + + /* Then dump the registers (if available) */ + + up_registerdump(); +} +#else +# 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/arch/arm/src/common/up_internal.h b/arch/arm/src/common/up_internal.h index 76313b31d72..862ceb82c62 100644 --- a/arch/arm/src/common/up_internal.h +++ b/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/arch/arm/src/common/up_vectors.S b/arch/arm/src/common/up_vectors.S index 6d4c79e7d4a..e97683a1649 100644 --- a/arch/arm/src/common/up_vectors.S +++ b/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/configs/README.txt b/configs/README.txt index ca3f44fa7ae..c7f557d652a 100644 --- a/configs/README.txt +++ b/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/configs/c5471evm/README.txt b/configs/c5471evm/README.txt index f516f24a78f..fd276ed0576 100644 --- a/configs/c5471evm/README.txt +++ b/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/configs/c5471evm/defconfig b/configs/c5471evm/defconfig index 626e7fc8baf..d0a4f82f537 100644 --- a/configs/c5471evm/defconfig +++ b/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/configs/c5471evm/dhcpconfig b/configs/c5471evm/dhcpconfig index cbcea2f6200..5b3a0e6658f 100644 --- a/configs/c5471evm/dhcpconfig +++ b/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/configs/c5471evm/netconfig b/configs/c5471evm/netconfig index 109cd72794f..e85364d7b5d 100644 --- a/configs/c5471evm/netconfig +++ b/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/configs/c5471evm/nshconfig b/configs/c5471evm/nshconfig index 206438f17cb..a45f91fb7f1 100644 --- a/configs/c5471evm/nshconfig +++ b/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/configs/mcu123-lpc214x/README.txt b/configs/mcu123-lpc214x/README.txt index bab1758eeaf..16456266e57 100644 --- a/configs/mcu123-lpc214x/README.txt +++ b/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/configs/mcu123-lpc214x/nsh/defconfig b/configs/mcu123-lpc214x/nsh/defconfig index 3dec91a3a27..cf194adf128 100644 --- a/configs/mcu123-lpc214x/nsh/defconfig +++ b/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/configs/mcu123-lpc214x/ostest/defconfig b/configs/mcu123-lpc214x/ostest/defconfig index 4a1e3819398..fdbabd3ed27 100644 --- a/configs/mcu123-lpc214x/ostest/defconfig +++ b/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/configs/ntosd-dm320/README.txt b/configs/ntosd-dm320/README.txt index 03111148be7..6e620f3d662 100644 --- a/configs/ntosd-dm320/README.txt +++ b/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/configs/ntosd-dm320/nettest/defconfig b/configs/ntosd-dm320/nettest/defconfig index 491e7a8a8a4..a176359491e 100644 --- a/configs/ntosd-dm320/nettest/defconfig +++ b/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/configs/ntosd-dm320/nsh/defconfig b/configs/ntosd-dm320/nsh/defconfig index 0b248638392..4fb6c47bb97 100644 --- a/configs/ntosd-dm320/nsh/defconfig +++ b/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/configs/ntosd-dm320/ostest/defconfig b/configs/ntosd-dm320/ostest/defconfig index 54d71af127f..a8ac562d8de 100644 --- a/configs/ntosd-dm320/ostest/defconfig +++ b/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/configs/ntosd-dm320/udp/defconfig b/configs/ntosd-dm320/udp/defconfig index b3c0633f952..d4c02d7eca2 100644 --- a/configs/ntosd-dm320/udp/defconfig +++ b/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/configs/ntosd-dm320/uip/defconfig b/configs/ntosd-dm320/uip/defconfig index ace6d935a7b..9f19366e862 100644 --- a/configs/ntosd-dm320/uip/defconfig +++ b/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 #