diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2013-12-22 11:16:29 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2013-12-22 11:16:29 -0600 |
commit | 350022ad4bbf8068b2f6ae5c4878fd51857f054b (patch) | |
tree | a0406b66b8118bceb1c76f1dc31a7d8e172d9eb7 | |
parent | 7d1e70ca45983e51ee2cf2645baa547f754cbdd6 (diff) | |
download | nuttx-350022ad4bbf8068b2f6ae5c4878fd51857f054b.tar.gz nuttx-350022ad4bbf8068b2f6ae5c4878fd51857f054b.tar.bz2 nuttx-350022ad4bbf8068b2f6ae5c4878fd51857f054b.zip |
Add logic to configure interrupt controller debug; Fix high priority, nested interrupt build problems
-rw-r--r-- | nuttx/ChangeLog | 6 | ||||
-rw-r--r-- | nuttx/Kconfig | 8 | ||||
-rw-r--r-- | nuttx/arch/arm/src/armv7-m/ram_vectors.h | 4 | ||||
-rw-r--r-- | nuttx/arch/arm/src/armv7-m/up_ramvec_attach.c | 17 | ||||
-rw-r--r-- | nuttx/arch/arm/src/armv7-m/up_ramvec_initialize.c | 27 | ||||
-rw-r--r-- | nuttx/configs/viewtool-stm32f107/highpri/Make.defs | 4 | ||||
-rw-r--r-- | nuttx/configs/viewtool-stm32f107/nsh/Make.defs | 4 | ||||
-rw-r--r-- | nuttx/configs/viewtool-stm32f107/scripts/cmndfu.ld (renamed from nuttx/configs/viewtool-stm32f107/scripts/ld.script.dfu) | 4 | ||||
-rw-r--r-- | nuttx/configs/viewtool-stm32f107/scripts/cmnflash.ld | 113 | ||||
-rw-r--r-- | nuttx/configs/viewtool-stm32f107/scripts/dfu.ld | 111 | ||||
-rw-r--r-- | nuttx/configs/viewtool-stm32f107/scripts/flash.ld (renamed from nuttx/configs/viewtool-stm32f107/scripts/ld.script) | 2 |
11 files changed, 289 insertions, 11 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index cdf0d8778..7ddd2d0a4 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -6267,3 +6267,9 @@ README.txt, and src/stm32_highpri.c: This is the initial framework for a test of the high priority, nested interrupt logic. Still incomplete and does not yet run (2013-12-22). + * arch/arm/src/armv7-m/ram_vectors.h and up_ramvec_initialize.c: + Correct alignment of the RAM vector table (2013-12-22). + * Kconfig: Support configuration of interrupt controller debug output + (2013-12-22). + * configs/viewtool-stm32f107/scripts: Need to do some special things + in linking of the common vectors are used (2013-12-22). diff --git a/nuttx/Kconfig b/nuttx/Kconfig index beb02405d..3c7c86c9b 100644 --- a/nuttx/Kconfig +++ b/nuttx/Kconfig @@ -560,6 +560,14 @@ config DEBUG_AUDIO device drivers. (disabled by default). Support for this debug option is architecture-specific and may not be available for some MCUs. +config DEBUG_IRQ + bool "Interrupt Controller Debug Output" + default n + ---help--- + Enable debug SYSLOG output from logic that managers the interrupt + control logic (disabled by default). Support for this debug option + is architecture-specific and may not be available for some MCUs. + endif config DEBUG_SYMBOLS diff --git a/nuttx/arch/arm/src/armv7-m/ram_vectors.h b/nuttx/arch/arm/src/armv7-m/ram_vectors.h index 5b228d69c..0fe7b83af 100644 --- a/nuttx/arch/arm/src/armv7-m/ram_vectors.h +++ b/nuttx/arch/arm/src/armv7-m/ram_vectors.h @@ -79,10 +79,12 @@ * irq_dispatch. In this case, it is also assumed that the ARM vector * table resides in RAM, has the name up_ram_vectors, and has been * properly positioned and aligned in memory by the linker script. + * + * REVISIT: Can this alignment requirement vary from core-to-core? */ extern up_vector_t g_ram_vectors[ARMV7M_VECTAB_SIZE] - __attribute__((section(".ram_vectors"))); + __attribute__ ((section (".ram_vectors"), aligned (64))); /************************************************************************************ * Public Function Prototypes diff --git a/nuttx/arch/arm/src/armv7-m/up_ramvec_attach.c b/nuttx/arch/arm/src/armv7-m/up_ramvec_attach.c index 605886352..274996af3 100644 --- a/nuttx/arch/arm/src/armv7-m/up_ramvec_attach.c +++ b/nuttx/arch/arm/src/armv7-m/up_ramvec_attach.c @@ -39,6 +39,8 @@ #include <nuttx/config.h> +#include <debug.h> + #include <nuttx/irq.h> #include <nuttx/arch.h> @@ -49,6 +51,19 @@ /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +/* Debug ********************************************************************/ +/* Non-standard debug that may be enabled just for testing the interrupt + * config. NOTE: that only lldbg types are used so that the output is + * immediately available. + */ + +#ifdef CONFIG_DEBUG_IRQ +# define intdbg lldbg +# define intvdbg llvdbg +#else +# define intdbg(x...) +# define intvdbg(x...) +#endif /**************************************************************************** * Private Type Declarations @@ -87,6 +102,8 @@ int up_ramvec_attach(int irq, up_vector_t vector) { int ret = ERROR; + intvdbg("%s IRQ%d\n", vector ? "Attaching" : "Detaching", irq); + if ((unsigned)irq < ARMV7M_PERIPHERAL_INTERRUPTS) { irqstate_t flags; diff --git a/nuttx/arch/arm/src/armv7-m/up_ramvec_initialize.c b/nuttx/arch/arm/src/armv7-m/up_ramvec_initialize.c index ee8ac43d0..a36e3126b 100644 --- a/nuttx/arch/arm/src/armv7-m/up_ramvec_initialize.c +++ b/nuttx/arch/arm/src/armv7-m/up_ramvec_initialize.c @@ -38,6 +38,9 @@ ****************************************************************************/ #include <nuttx/config.h> + +#include <debug.h> + #include <nuttx/arch.h> #include <nuttx/irq.h> @@ -51,8 +54,21 @@ #ifdef CONFIG_ARCH_RAMVECTORS /**************************************************************************** - * Definitions + * Pre-processor Definitions ****************************************************************************/ +/* Debug ********************************************************************/ +/* Non-standard debug that may be enabled just for testing the interrupt + * config. NOTE: that only lldbg types are used so that the output is + * immediately available. + */ + +#ifdef CONFIG_DEBUG_IRQ +# define intdbg lldbg +# define intvdbg llvdbg +#else +# define intdbg(x...) +# define intvdbg(x...) +#endif /**************************************************************************** * Private Type Declarations @@ -67,10 +83,12 @@ * irq_dispatch. In this case, it is also assumed that the ARM vector * table resides in RAM, has the name up_ram_vectors, and has been * properly positioned and aligned in memory by the linker script. + * + * REVISIT: Can this alignment requirement vary from core-to-core? */ up_vector_t g_ram_vectors[ARMV7M_VECTAB_SIZE] - __attribute__((section(".ram_vectors"))); + __attribute__ ((section (".ram_vectors"), aligned (64))); /**************************************************************************** * Private Variables @@ -108,9 +126,11 @@ void up_ramvec_initialize(void) * protect against NULL pointer references. */ - src = (const CODE up_vector_t *)0; + src = (const CODE up_vector_t *)getreg32(NVIC_VECTAB); dest = g_ram_vectors; + intvdbg("src=%p dest=%p\n", src, dest); + for (i = 0; i < ARMV7M_VECTAB_SIZE; i++) { *dest++ = *src++; @@ -119,6 +139,7 @@ void up_ramvec_initialize(void) /* Now configure the NVIC to use the new vector table. */ putreg32((uint32_t)g_ram_vectors, NVIC_VECTAB); + intvdbg("NVIC_VECTAB=%08x\n", getreg32(NVIC_VECTAB)); } #endif /* !CONFIG_ARCH_RAMVECTORS */ diff --git a/nuttx/configs/viewtool-stm32f107/highpri/Make.defs b/nuttx/configs/viewtool-stm32f107/highpri/Make.defs index 824cef788..d07b87dd8 100644 --- a/nuttx/configs/viewtool-stm32f107/highpri/Make.defs +++ b/nuttx/configs/viewtool-stm32f107/highpri/Make.defs @@ -38,9 +38,9 @@ include ${TOPDIR}/tools/Config.mk include ${TOPDIR}/arch/arm/src/armv7-m/Toolchain.defs ifeq ($(CONFIG_STM32_DFU),y) - LDSCRIPT = ld.script.dfu + LDSCRIPT = cmndfu.ld else - LDSCRIPT = ld.script + LDSCRIPT = cmnflash.ld endif ifeq ($(WINTOOL),y) diff --git a/nuttx/configs/viewtool-stm32f107/nsh/Make.defs b/nuttx/configs/viewtool-stm32f107/nsh/Make.defs index be6b97fed..62beecc06 100644 --- a/nuttx/configs/viewtool-stm32f107/nsh/Make.defs +++ b/nuttx/configs/viewtool-stm32f107/nsh/Make.defs @@ -38,9 +38,9 @@ include ${TOPDIR}/tools/Config.mk include ${TOPDIR}/arch/arm/src/armv7-m/Toolchain.defs ifeq ($(CONFIG_STM32_DFU),y) - LDSCRIPT = ld.script.dfu + LDSCRIPT = dfu.ld else - LDSCRIPT = ld.script + LDSCRIPT = flash.ld endif ifeq ($(WINTOOL),y) diff --git a/nuttx/configs/viewtool-stm32f107/scripts/ld.script.dfu b/nuttx/configs/viewtool-stm32f107/scripts/cmndfu.ld index d3f0d4cf9..8d8434606 100644 --- a/nuttx/configs/viewtool-stm32f107/scripts/ld.script.dfu +++ b/nuttx/configs/viewtool-stm32f107/scripts/cmndfu.ld @@ -1,5 +1,5 @@ /**************************************************************************** - * configs/viewtool-stm32f107/scripts/ld.script.dfu + * configs/viewtool-stm32f107/scripts/cmndfu.ld * * Copyright (C) 2013 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <gnutt@nuttx.org> @@ -33,7 +33,6 @@ * ****************************************************************************/ -/* Don't know if this is correct. Just 256K-48K (not testet) */ MEMORY { flash (rx) : ORIGIN = 0x08003000, LENGTH = 208K @@ -41,6 +40,7 @@ MEMORY } OUTPUT_ARCH(arm) +EXTERN(_vectors) ENTRY(_stext) SECTIONS { diff --git a/nuttx/configs/viewtool-stm32f107/scripts/cmnflash.ld b/nuttx/configs/viewtool-stm32f107/scripts/cmnflash.ld new file mode 100644 index 000000000..c467cb64c --- /dev/null +++ b/nuttx/configs/viewtool-stm32f107/scripts/cmnflash.ld @@ -0,0 +1,113 @@ +/**************************************************************************** + * configs/viewtool-stm32f107/scripts/cmnflash.ld + * + * Copyright (C) 2013 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +MEMORY +{ + flash (rx) : ORIGIN = 0x08000000, LENGTH = 256K + sram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K + +} + +OUTPUT_ARCH(arm) +EXTERN(_vectors) +ENTRY(_stext) +SECTIONS +{ + .text : { + _stext = ABSOLUTE(.); + *(.vectors) + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.rodata .rodata.*) + *(.gnu.linkonce.t.*) + *(.glue_7) + *(.glue_7t) + *(.got) + *(.gcc_except_table) + *(.gnu.linkonce.r.*) + _etext = ABSOLUTE(.); + } > flash + + .init_section : { + _sinit = ABSOLUTE(.); + *(.init_array .init_array.*) + _einit = ABSOLUTE(.); + } > flash + + .ARM.extab : { + *(.ARM.extab*) + } > flash + + __exidx_start = ABSOLUTE(.); + .ARM.exidx : { + *(.ARM.exidx*) + } > flash + __exidx_end = ABSOLUTE(.); + + _eronly = ABSOLUTE(.); + + /* The STM32F107VC has 64Kb of SRAM beginning at the following address */ + + .data : { + _sdata = ABSOLUTE(.); + *(.data .data.*) + *(.gnu.linkonce.d.*) + CONSTRUCTORS + _edata = ABSOLUTE(.); + } > sram AT > flash + + .bss : { + _sbss = ABSOLUTE(.); + *(.bss .bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + _ebss = ABSOLUTE(.); + } > sram + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } +} diff --git a/nuttx/configs/viewtool-stm32f107/scripts/dfu.ld b/nuttx/configs/viewtool-stm32f107/scripts/dfu.ld new file mode 100644 index 000000000..2a7e74664 --- /dev/null +++ b/nuttx/configs/viewtool-stm32f107/scripts/dfu.ld @@ -0,0 +1,111 @@ +/**************************************************************************** + * configs/viewtool-stm32f107/scripts/dfu.ld + * + * Copyright (C) 2013 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +MEMORY +{ + flash (rx) : ORIGIN = 0x08003000, LENGTH = 208K + sram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K +} + +OUTPUT_ARCH(arm) +ENTRY(_stext) +SECTIONS +{ + .text : { + _stext = ABSOLUTE(.); + *(.vectors) + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.rodata .rodata.*) + *(.gnu.linkonce.t.*) + *(.glue_7) + *(.glue_7t) + *(.got) + *(.gcc_except_table) + *(.gnu.linkonce.r.*) + _etext = ABSOLUTE(.); + } > flash + + .init_section : { + _sinit = ABSOLUTE(.); + *(.init_array .init_array.*) + _einit = ABSOLUTE(.); + } > flash + + .ARM.extab : { + *(.ARM.extab*) + } > flash + + __exidx_start = ABSOLUTE(.); + .ARM.exidx : { + *(.ARM.exidx*) + } > flash + __exidx_end = ABSOLUTE(.); + + _eronly = ABSOLUTE(.); + + /* The STM32F103Z has 64Kb of SRAM beginning at the following address */ + + .data : { + _sdata = ABSOLUTE(.); + *(.data .data.*) + *(.gnu.linkonce.d.*) + CONSTRUCTORS + _edata = ABSOLUTE(.); + } > sram AT > flash + + .bss : { + _sbss = ABSOLUTE(.); + *(.bss .bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + _ebss = ABSOLUTE(.); + } > sram + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } +} diff --git a/nuttx/configs/viewtool-stm32f107/scripts/ld.script b/nuttx/configs/viewtool-stm32f107/scripts/flash.ld index a4965132f..65dd41bfc 100644 --- a/nuttx/configs/viewtool-stm32f107/scripts/ld.script +++ b/nuttx/configs/viewtool-stm32f107/scripts/flash.ld @@ -1,5 +1,5 @@ /**************************************************************************** - * configs/viewtool-stm32f107/scripts/ld.script + * configs/viewtool-stm32f107/scripts/flash.ld * * Copyright (C) 2013 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <gnutt@nuttx.org> |