diff options
Diffstat (limited to 'nuttx/arch/arm/src/lm3s')
-rw-r--r-- | nuttx/arch/arm/src/lm3s/lm3s_context.S | 6 | ||||
-rw-r--r-- | nuttx/arch/arm/src/lm3s/lm3s_irq.c | 59 | ||||
-rw-r--r-- | nuttx/arch/arm/src/lm3s/lm3s_pendsv.c | 1 | ||||
-rw-r--r-- | nuttx/arch/arm/src/lm3s/lm3s_serial.c | 12 | ||||
-rw-r--r-- | nuttx/arch/arm/src/lm3s/lm3s_start.c | 1 |
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(); |