summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/lm3s
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/arch/arm/src/lm3s')
-rw-r--r--nuttx/arch/arm/src/lm3s/lm3s_context.S6
-rw-r--r--nuttx/arch/arm/src/lm3s/lm3s_irq.c59
-rw-r--r--nuttx/arch/arm/src/lm3s/lm3s_pendsv.c1
-rw-r--r--nuttx/arch/arm/src/lm3s/lm3s_serial.c12
-rw-r--r--nuttx/arch/arm/src/lm3s/lm3s_start.c1
5 files changed, 67 insertions, 12 deletions
diff --git a/nuttx/arch/arm/src/lm3s/lm3s_context.S b/nuttx/arch/arm/src/lm3s/lm3s_context.S
index a0a75fea4..9f74408d6 100644
--- a/nuttx/arch/arm/src/lm3s/lm3s_context.S
+++ b/nuttx/arch/arm/src/lm3s/lm3s_context.S
@@ -85,7 +85,7 @@ up_saveusercontext:
/* Perform the System call with R0=0 and R1=regs */
ldr r2, nvic_intctrl /* R2: Address NVIC INTCTRL registers */
- ldr r3, [r2, #0] /* R3: Contentx of NVIC INCTRL */
+ ldr r3, [r2, #0] /* R3: Content of NVIC INCTRL */
orr r3, r3, #NVIC_INTCTRL_PENDSVSET
mov r1, r0 /* R1: regs */
mov r0, #0 /* R0: 0 means save context (also return value) */
@@ -125,13 +125,13 @@ up_fullcontextrestore:
/* Perform the System call with R0=1 and R1=regs */
ldr r2, nvic_intctrl /* R2: Address NVIC INTCTRL registers */
- ldr r3, [r2, #0] /* R3: Contentx of NVIC INCTRL */
+ ldr r3, [r2, #0] /* R3: Content of NVIC INCTRL */
orr r3, r3, #NVIC_INTCTRL_PENDSVSET
mov r1, r0 /* R1: regs */
mov r0, #1 /* R0: 1 means restore context */
str r3, [r2, #0] /* Force Pend SV */
- /* These call should not return */
+ /* This call should not return */
bx lr /* Unnecessary ... will not return */
.size up_fullcontextrestore, .-up_fullcontextrestore
diff --git a/nuttx/arch/arm/src/lm3s/lm3s_irq.c b/nuttx/arch/arm/src/lm3s/lm3s_irq.c
index c9f47c0df..c8307aac3 100644
--- a/nuttx/arch/arm/src/lm3s/lm3s_irq.c
+++ b/nuttx/arch/arm/src/lm3s/lm3s_irq.c
@@ -55,6 +55,12 @@
* Definitions
****************************************************************************/
+/* Enable debug features that are probably on desireable during bringup */
+
+#define LM2S_IRQ_DEBUG 1
+
+/* Get a 32-bit version of the default priority */
+
#define DEFPRIORITY32 \
(NVIC_SYSH_PRIORITY_DEFAULT << 24 |\
NVIC_SYSH_PRIORITY_DEFAULT << 16 |\
@@ -76,6 +82,39 @@ uint32 *current_regs;
****************************************************************************/
/****************************************************************************
+ * Name: lm3s_dumpnvic
+ *
+ * Description:
+ * Dump some interesting NVIC registers
+ *
+ ****************************************************************************/
+
+#if defined(LM2S_IRQ_DEBUG) && defined (CONFIG_DEBUG)
+static void lm3s_dumpnvic(const char *msg, int irq)
+{
+ slldbg("NVIC (%s, irq=%d):\n", msg, irq);
+ slldbg(" INTCTRL: %08x VECTAB: %08x\n",
+ getreg32(NVIC_INTCTRL), getreg32(NVIC_VECTAB));
+ slldbg(" IRQ ENABLE: %08x %08x\n",
+ getreg32(NVIC_IRQ0_31_ENABLE), getreg32(NVIC_IRQ32_63_ENABLE));
+ slldbg(" SYSH_PRIO: %08x %08x %08x\n",
+ getreg32(NVIC_SYSH4_7_PRIORITY), getreg32(NVIC_SYSH8_11_PRIORITY),
+ getreg32(NVIC_SYSH12_15_PRIORITY));
+ slldbg(" IRQ PRIO: %08x %08x %08x %08x\n",
+ getreg32(NVIC_IRQ0_3_PRIORITY), getreg32(NVIC_IRQ4_7_PRIORITY),
+ getreg32(NVIC_IRQ8_11_PRIORITY), getreg32(NVIC_IRQ12_15_PRIORITY));
+ slldbg(" %08x %08x %08x %08x\n",
+ getreg32(NVIC_IRQ16_19_PRIORITY), getreg32(NVIC_IRQ20_23_PRIORITY),
+ getreg32(NVIC_IRQ24_27_PRIORITY), getreg32(NVIC_IRQ28_31_PRIORITY));
+ slldbg(" %08x %08x %08x %08x\n",
+ getreg32(NVIC_IRQ32_35_PRIORITY), getreg32(NVIC_IRQ36_39_PRIORITY),
+ getreg32(NVIC_IRQ40_43_PRIORITY), getreg32(NVIC_IRQ44_47_PRIORITY));
+}
+#else
+# define lm3s_dumpnvic(msg, irq)
+#endif
+
+/****************************************************************************
* Name: lm3s_nmi, lm3s_hardfault, lm3s_mpu, lm3s_busfault, lm3s_usagefault,
* lm3s_svcall, lm3s_dbgmonitor, lm3s_pendsv, lm3s_reserved
*
@@ -217,7 +256,7 @@ static int lml3s_irqinfo(int irq, uint32 *regaddr, uint32 *bit)
}
/****************************************************************************
- * Public Funtions
+ * Public Functions
****************************************************************************/
/****************************************************************************
@@ -233,6 +272,10 @@ void up_irqinitialize(void)
/* Set all interrrupts (and exceptions) to the default priority */
+ putreg32(DEFPRIORITY32, NVIC_SYSH4_7_PRIORITY);
+ putreg32(DEFPRIORITY32, NVIC_SYSH8_11_PRIORITY);
+ putreg32(DEFPRIORITY32, NVIC_SYSH12_15_PRIORITY);
+
putreg32(DEFPRIORITY32, NVIC_IRQ0_3_PRIORITY);
putreg32(DEFPRIORITY32, NVIC_IRQ4_7_PRIORITY);
putreg32(DEFPRIORITY32, NVIC_IRQ8_11_PRIORITY);
@@ -245,10 +288,6 @@ void up_irqinitialize(void)
putreg32(DEFPRIORITY32, NVIC_IRQ36_39_PRIORITY);
putreg32(DEFPRIORITY32, NVIC_IRQ40_43_PRIORITY);
putreg32(DEFPRIORITY32, NVIC_IRQ44_47_PRIORITY);
- putreg32(DEFPRIORITY32, NVIC_IRQ48_51_PRIORITY);
- putreg32(DEFPRIORITY32, NVIC_IRQ52_55_PRIORITY);
- putreg32(DEFPRIORITY32, NVIC_IRQ56_59_PRIORITY);
- putreg32(DEFPRIORITY32, NVIC_IRQ60_63_PRIORITY);
/* currents_regs is non-NULL only while processing an interrupt */
@@ -272,7 +311,7 @@ void up_irqinitialize(void)
irq_attach(LMSB_IRQ_PENDSV, lm3s_pendsv);
#ifdef CONFIG_ARCH_IRQPRIO
- up_prioritize_irq(LMSB_IRQ_PENDSV, NVIC_SYSH_PRIORITY_MIN);
+/* up_prioritize_irq(LMSB_IRQ_PENDSV, NVIC_SYSH_PRIORITY_MIN); */
#endif
/* Attach all other processor exceptions (except reset and sys tick) */
@@ -288,6 +327,8 @@ void up_irqinitialize(void)
irq_attach(LMSB_IRQ_RESERVED, lm3s_reserved);
#endif
+ lm3s_dumpnvic("inital", NR_IRQS);
+
#ifndef CONFIG_SUPPRESS_INTERRUPTS
/* Initialize FIQs */
@@ -298,6 +339,7 @@ void up_irqinitialize(void)
/* And finally, enable interrupts */
+ setbasepri(0);
irqrestore(0);
#endif
}
@@ -324,6 +366,7 @@ void up_disable_irq(int irq)
regval &= ~bit;
putreg32(regval, regaddr);
}
+ lm3s_dumpnvic("disable", irq);
}
/****************************************************************************
@@ -348,6 +391,7 @@ void up_enable_irq(int irq)
regval |= bit;
putreg32(regval, regaddr);
}
+ lm3s_dumpnvic("enable", irq);
}
/****************************************************************************
@@ -385,6 +429,7 @@ int up_prioritize_irq(int irq, int priority)
if (irq < LM3S_IRQ_INTERRUPTS)
{
+ irq -= 4;
regaddr = NVIC_SYSH_PRIORITY(irq);
}
else
@@ -398,6 +443,8 @@ int up_prioritize_irq(int irq, int priority)
regval &= ~(0xff << shift);
regval |= (priority << shift);
putreg32(regval, regaddr);
+
+ lm3s_dumpnvic("prioritize", irq);
return OK;
}
#endif
diff --git a/nuttx/arch/arm/src/lm3s/lm3s_pendsv.c b/nuttx/arch/arm/src/lm3s/lm3s_pendsv.c
index 1db255fef..ef2b189c8 100644
--- a/nuttx/arch/arm/src/lm3s/lm3s_pendsv.c
+++ b/nuttx/arch/arm/src/lm3s/lm3s_pendsv.c
@@ -89,6 +89,7 @@ int lm3s_pendsv(int irq, FAR void *context)
* the TCB register save area.
*/
+ svdbg("Command: %d regs: %08x\n", svregs[REG_R0], tcbregs);
switch (svregs[REG_R0])
{
/* R0=0: This is a save context command. In this case, we simply need
diff --git a/nuttx/arch/arm/src/lm3s/lm3s_serial.c b/nuttx/arch/arm/src/lm3s/lm3s_serial.c
index 71a877e3f..42cf0fe23 100644
--- a/nuttx/arch/arm/src/lm3s/lm3s_serial.c
+++ b/nuttx/arch/arm/src/lm3s/lm3s_serial.c
@@ -39,11 +39,13 @@
#include <nuttx/config.h>
#include <sys/types.h>
+
#include <unistd.h>
#include <semaphore.h>
#include <string.h>
#include <errno.h>
#include <debug.h>
+
#include <nuttx/irq.h>
#include <nuttx/arch.h>
#include <nuttx/serial.h>
@@ -53,8 +55,6 @@
#include "up_arch.h"
#include "up_internal.h"
-#ifdef CONFIG_USE_SERIALDRIVER
-
/****************************************************************************
* Definitions
****************************************************************************/
@@ -82,6 +82,12 @@
# undef HAVE_CONSOLE
#endif
+/* If we are not using the serial driver for the console, then we
+ * still must provide some minimal implementation of up_putc.
+ */
+
+#ifdef CONFIG_USE_SERIALDRIVER
+
/* Which UART with be tty0/console and which tty1? */
#if defined(CONFIG_UART0_SERIAL_CONSOLE)
@@ -796,7 +802,7 @@ static boolean up_txempty(struct uart_dev_s *dev)
}
/****************************************************************************
- * Public Funtions
+ * Public Functions
****************************************************************************/
/****************************************************************************
diff --git a/nuttx/arch/arm/src/lm3s/lm3s_start.c b/nuttx/arch/arm/src/lm3s/lm3s_start.c
index 8de6e48e1..df1a48c84 100644
--- a/nuttx/arch/arm/src/lm3s/lm3s_start.c
+++ b/nuttx/arch/arm/src/lm3s/lm3s_start.c
@@ -151,6 +151,7 @@ void __start(void)
/* Then start NuttX */
+ showprogress('\r');
showprogress('\n');
os_start();