summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/sam3u
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/arch/arm/src/sam3u')
-rw-r--r--nuttx/arch/arm/src/sam3u/chip.h43
-rw-r--r--nuttx/arch/arm/src/sam3u/sam3u_irq.c43
2 files changed, 48 insertions, 38 deletions
diff --git a/nuttx/arch/arm/src/sam3u/chip.h b/nuttx/arch/arm/src/sam3u/chip.h
index 865cad5ea..1ce104ab2 100644
--- a/nuttx/arch/arm/src/sam3u/chip.h
+++ b/nuttx/arch/arm/src/sam3u/chip.h
@@ -1,7 +1,7 @@
/************************************************************************************
* arch/arm/src/sam3u/chip.h
*
- * Copyright (C) 2009-2010 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2009-2010, 2013 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -42,45 +42,16 @@
#include <nuttx/config.h>
-/************************************************************************************
- * Pre-processor Definitions
- ************************************************************************************/
-
-/* Get customizations for each supported chip */
-
-#ifdef CONFIG_ARCH_CHIP_AT91SAM3U4E
-/* Internal memory */
-
-# define CONFIG_SAM3U_SRAM0_SIZE 0x00008000 /* 32Kb */
-# define CONFIG_SAM3U_SRAM1_SIZE 0x00004000 /* 16Kb */
-# define CONFIG_SAM3U_NFCSRAM_SIZE 0x00001000 /* 4Kb */
-
-/* DMA */
-
-# define CONFIG_SAM3U_NDMACHAN 4 /* 4 DMA Channels */
-
-/* Memory card interface */
-
-# define CONFIG_SAM3U_MCI2 1
-#else
-# error "Unknown SAM3U chip type"
-#endif
-
-/* Include only the memory map. Other chip hardware files should then include this
- * file for the proper setup
+/* Include the memory map and the chip definitions file. Other chip hardware files
+ * should then include this file for the proper setup.
*/
+#include <arch/sam3u/chip.h>
#include "sam3u_memorymap.h"
-/* NVIC priority levels *************************************************************/
-/* Each priority field holds a priority value, 0-15. The lower the value, the greater
- * the priority of the corresponding interrupt. The processor implements only
- * bits[7:4] of each field, bits[3:0] read as zero and ignore writes.
- */
-
-#define NVIC_SYSH_PRIORITY_MIN 0xf0 /* All bits[7:4] set is minimum priority */
-#define NVIC_SYSH_PRIORITY_DEFAULT 0x80 /* Midpoint is the default */
-#define NVIC_SYSH_PRIORITY_MAX 0x00 /* Zero is maximum priority */
+/************************************************************************************
+ * Pre-processor Definitions
+ ************************************************************************************/
/************************************************************************************
* Public Types
diff --git a/nuttx/arch/arm/src/sam3u/sam3u_irq.c b/nuttx/arch/arm/src/sam3u/sam3u_irq.c
index db79314c0..d9fd4dac8 100644
--- a/nuttx/arch/arm/src/sam3u/sam3u_irq.c
+++ b/nuttx/arch/arm/src/sam3u/sam3u_irq.c
@@ -2,7 +2,7 @@
* arch/arm/src/sam3u/sam3u_irq.c
* arch/arm/src/chip/sam3u_irq.c
*
- * Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2009, 2011, 2013 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -185,6 +185,35 @@ static int sam3u_reserved(int irq, FAR void *context)
#endif
/****************************************************************************
+ * Name: up_prioritize_irq
+ *
+ * Description:
+ * Set the priority of an exception. This function may be needed
+ * internally even if support for prioritized interrupts is not enabled.
+ *
+ ****************************************************************************/
+
+#if !defined(CONFIG_ARCH_IRQPRIO) && defined(CONFIG_ARMV7M_USEBASEPRI)
+static int up_prioritize_irq(int irq, int priority)
+{
+ uint32_t regaddr;
+ uint32_t regval;
+ int shift;
+
+ irq -= 4;
+ regaddr = NVIC_SYSH_PRIORITY(irq);
+ regval = getreg32(regaddr);
+ shift = ((irq & 3) << 3);
+ regval &= ~(0xff << shift);
+ regval |= (priority << shift);
+ putreg32(regval, regaddr);
+
+ stm32_dumpnvic("prioritize", irq);
+ return OK;
+}
+#endif
+
+/****************************************************************************
* Name: sam3u_irqinfo
*
* Description:
@@ -296,6 +325,9 @@ void up_irqinitialize(void)
#ifdef CONFIG_ARCH_IRQPRIO
/* up_prioritize_irq(SAM3U_IRQ_PENDSV, NVIC_SYSH_PRIORITY_MIN); */
#endif
+#ifdef CONFIG_ARMV7M_USEBASEPRI
+ up_prioritize_irq(SAM3U_IRQ_SVCALL, NVIC_SYSH_SVCALL_PRIORITY);
+#endif
/* If the MPU is enabled, then attach and enable the Memory Management
* Fault handler.
@@ -436,7 +468,14 @@ int up_prioritize_irq(int irq, int priority)
uint32_t regval;
int shift;
- DEBUGASSERT(irq >= SAM3U_IRQ_MEMFAULT && irq < SAM3U_IRQ_NIRQS && (unsigned)priority <= NVIC_SYSH_PRIORITY_MIN);
+#ifdef CONFIG_ARMV7M_USEBASEPRI
+ DEBUGASSERT(irq >= SAM3U_IRQ_MEMFAULT && irq < SAM3U_IRQ_NIRQS &&
+ priority >= NVIC_SYSH_DISABLE_PRIORITY &&
+ priority <= NVIC_SYSH_PRIORITY_MIN);
+#else
+ DEBUGASSERT(irq >= SAM3U_IRQ_MEMFAULT && irq < SAM3U_IRQ_NIRQS &&
+ (unsigned)priority <= NVIC_SYSH_PRIORITY_MIN);
+#endif
if (irq < SAM3U_IRQ_EXTINT)
{