summaryrefslogtreecommitdiff
path: root/nuttx/configs/sam3u-ek/src
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-01-22 03:08:29 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-01-22 03:08:29 +0000
commit8765c895a02731e26a6eb7f883173db1bf959d34 (patch)
tree706b5d9a28b9c10e19614c17a291ab5c79c916c3 /nuttx/configs/sam3u-ek/src
parentbb5d61e8e375cc88c61e973710186c94af501b7b (diff)
downloadpx4-nuttx-8765c895a02731e26a6eb7f883173db1bf959d34.tar.gz
px4-nuttx-8765c895a02731e26a6eb7f883173db1bf959d34.tar.bz2
px4-nuttx-8765c895a02731e26a6eb7f883173db1bf959d34.zip
Add serial and LED driver
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2519 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/configs/sam3u-ek/src')
-rwxr-xr-xnuttx/configs/sam3u-ek/src/sam3uek_internal.h9
-rwxr-xr-xnuttx/configs/sam3u-ek/src/up_leds.c91
2 files changed, 98 insertions, 2 deletions
diff --git a/nuttx/configs/sam3u-ek/src/sam3uek_internal.h b/nuttx/configs/sam3u-ek/src/sam3uek_internal.h
index 9c13dc5f5..fde22f7d8 100755
--- a/nuttx/configs/sam3u-ek/src/sam3uek_internal.h
+++ b/nuttx/configs/sam3u-ek/src/sam3uek_internal.h
@@ -51,10 +51,19 @@
/* SAM3U-EK GPIOs *******************************************************************/
+/* GPIO pin definitions *************************************************************/
+
/* LEDs */
+#define GPIO_LED0 (GPIO_OUTPUT|GPIO_CFG_DEFAULT|GPIO_PORT_PIOB|GPIO_OUTPUT_CLEAR|GPIO_PIN0)
+#define GPIO_LED1 (GPIO_OUTPUT|GPIO_CFG_DEFAULT|GPIO_PORT_PIOB|GPIO_OUTPUT_SET|GPIO_PIN1)
+#define GPIO_LED2 (GPIO_OUTPUT|GPIO_CFG_DEFAULT|GPIO_PORT_PIOB|GPIO_OUTPUT_SET|GPIO_PIN2)
+
/* BUTTONS */
+#define GPIO_BUTTON1 (GPIO_INPUT|GPIO_CFG_PULLUP|GPIO_CFG_DEGLITCH|GPIO_PORT_PIOA|GPIO_PIN18)
+#define GPIO_BUTTON2 (GPIO_INPUT|GPIO_CFG_PULLUP|GPIO_CFG_DEGLITCH|GPIO_PORT_PIOA|GPIO_PIN19)
+
/* SPI Chip Selects */
/************************************************************************************
diff --git a/nuttx/configs/sam3u-ek/src/up_leds.c b/nuttx/configs/sam3u-ek/src/up_leds.c
index 8ec9a4707..09acb23de 100755
--- a/nuttx/configs/sam3u-ek/src/up_leds.c
+++ b/nuttx/configs/sam3u-ek/src/up_leds.c
@@ -2,7 +2,7 @@
* configs/sam3u-ek/src/up_leds.c
* arch/arm/src/board/up_leds.c
*
- * Copyright (C) 2009 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2009-2010 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
@@ -52,6 +52,8 @@
#include "sam3u_internal.h"
#include "sam3uek_internal.h"
+#ifdef CONFIG_ARCH_LEDS
+
/****************************************************************************
* Definitions
****************************************************************************/
@@ -70,15 +72,96 @@
# define ledvdbg(x...)
#endif
+#define LED_OFF 0
+#define LED_ON 1
+#define LED_NOCHANGE 2
+#define LED_MASK 3
+
+#define LED0_SHIFT 0
+#define LED0_OFF (LED_OFF << LED0_SHIFT)
+#define LED0_ON (LED_ON << LED0_SHIFT)
+#define LED0_NOCHANGE (LED_NOCHANGE << LED0_SHIFT)
+#define LED1_SHIFT 2
+#define LED1_OFF (LED_OFF << LED1_SHIFT)
+#define LED1_ON (LED_ON << LED1_SHIFT)
+#define LED1_NOCHANGE (LED_NOCHANGE << LED1_SHIFT)
+#define LED2_SHIFT 4
+#define LED2_OFF (LED_OFF << LED2_SHIFT)
+#define LED2_ON (LED_ON << LED2_SHIFT)
+#define LED2_NOCHANGE (LED_NOCHANGE << LED2_SHIFT)
+
/****************************************************************************
* Private Data
****************************************************************************/
+static const uint8_t g_ledon[8] =
+{
+
+ (LED0_OFF |LED1_OFF |LED2_OFF), /* LED_STARTED */
+ (LED0_ON |LED1_OFF |LED2_ON), /* LED_HEAPALLOCATE */
+ (LED0_OFF |LED1_ON |LED2_OFF), /* LED_IRQSENABLED */
+ (LED0_ON |LED1_ON |LED2_ON), /* LED_STACKCREATED */
+
+ (LED0_OFF |LED1_OFF |LED2_NOCHANGE), /* LED_INIRQ */
+ (LED0_OFF |LED1_NOCHANGE|LED2_OFF), /* LED_SIGNAL */
+ (LED0_ON |LED1_NOCHANGE|LED2_NOCHANGE), /* LED_ASSERTION */
+ (LED0_ON |LED1_NOCHANGE|LED2_NOCHANGE) /* LED_PANIC */
+};
+
+static const uint8_t g_ledoff[8] =
+{
+
+ (LED0_OFF |LED1_OFF |LED2_OFF), /* LED_STARTED (does not happen) */
+ (LED0_ON |LED1_OFF |LED2_ON), /* LED_HEAPALLOCATE (does not happen) */
+ (LED0_OFF |LED1_ON |LED2_OFF), /* LED_IRQSENABLED (does not happen) */
+ (LED0_ON |LED1_ON |LED2_ON), /* LED_STACKCREATED (does not happen) */
+
+ (LED0_OFF |LED1_ON |LED2_NOCHANGE), /* LED_INIRQ */
+ (LED0_OFF |LED1_NOCHANGE|LED2_ON), /* LED_SIGNAL */
+ (LED0_OFF |LED1_NOCHANGE|LED2_NOCHANGE), /* LED_ASSERTION */
+ (LED0_OFF |LED1_NOCHANGE|LED2_NOCHANGE) /* LED_PANIC */
+};
+
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
+ * Name: up_setled
+ ****************************************************************************/
+
+static void up_setled(uint16_t pinset, uint8_t state)
+{
+ /* Assume active high. Initial state == 0 means active high */
+
+ bool polarity = ((pinset & GPIO_OUTPUT_SET) == 0);
+ switch (state)
+ {
+ case LED_OFF:
+ polarity = !polarity;
+
+ case LED_ON:
+ break;
+
+ case LED_NOCHANGE:
+ default:
+ return;
+ }
+ sam3u_gpiowrite(pinset, polarity);
+}
+
+/****************************************************************************
+ * Name: up_setleds
+ ****************************************************************************/
+
+static void up_setleds(uint8_t state)
+{
+ up_setled(GPIO_LED0, (state >> LED0_SHIFT) & LED_MASK);
+ up_setled(GPIO_LED1, (state >> LED1_SHIFT) & LED_MASK);
+ up_setled(GPIO_LED2, (state >> LED2_SHIFT) & LED_MASK);
+}
+
+/****************************************************************************
* Public Functions
****************************************************************************/
@@ -86,9 +169,11 @@
* Name: up_ledinit
****************************************************************************/
-#ifdef CONFIG_ARCH_LEDS
void up_ledinit(void)
{
+ (void)sam3u_configgpio(GPIO_LED0);
+ (void)sam3u_configgpio(GPIO_LED1);
+ (void)sam3u_configgpio(GPIO_LED2);
}
/****************************************************************************
@@ -97,6 +182,7 @@ void up_ledinit(void)
void up_ledon(int led)
{
+ up_setleds(g_ledon[led & 7]);
}
/****************************************************************************
@@ -105,6 +191,7 @@ void up_ledon(int led)
void up_ledoff(int led)
{
+ up_setleds(g_ledoff[led & 7]);
}
#endif /* CONFIG_ARCH_LEDS */