summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2013-12-22 11:16:29 -0600
committerGregory Nutt <gnutt@nuttx.org>2013-12-22 11:16:29 -0600
commit350022ad4bbf8068b2f6ae5c4878fd51857f054b (patch)
treea0406b66b8118bceb1c76f1dc31a7d8e172d9eb7
parent7d1e70ca45983e51ee2cf2645baa547f754cbdd6 (diff)
downloadnuttx-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/ChangeLog6
-rw-r--r--nuttx/Kconfig8
-rw-r--r--nuttx/arch/arm/src/armv7-m/ram_vectors.h4
-rw-r--r--nuttx/arch/arm/src/armv7-m/up_ramvec_attach.c17
-rw-r--r--nuttx/arch/arm/src/armv7-m/up_ramvec_initialize.c27
-rw-r--r--nuttx/configs/viewtool-stm32f107/highpri/Make.defs4
-rw-r--r--nuttx/configs/viewtool-stm32f107/nsh/Make.defs4
-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.ld113
-rw-r--r--nuttx/configs/viewtool-stm32f107/scripts/dfu.ld111
-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>