From 8765c895a02731e26a6eb7f883173db1bf959d34 Mon Sep 17 00:00:00 2001 From: patacongo Date: Fri, 22 Jan 2010 03:08:29 +0000 Subject: Add serial and LED driver git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2519 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/configs/sam3u-ek/include/board.h | 26 +++----- nuttx/configs/sam3u-ek/ostest/defconfig | 2 +- nuttx/configs/sam3u-ek/src/sam3uek_internal.h | 9 +++ nuttx/configs/sam3u-ek/src/up_leds.c | 91 ++++++++++++++++++++++++++- 4 files changed, 108 insertions(+), 20 deletions(-) (limited to 'nuttx/configs/sam3u-ek') diff --git a/nuttx/configs/sam3u-ek/include/board.h b/nuttx/configs/sam3u-ek/include/board.h index 4ba49e224..3376b3993 100755 --- a/nuttx/configs/sam3u-ek/include/board.h +++ b/nuttx/configs/sam3u-ek/include/board.h @@ -86,23 +86,15 @@ /* LED definitions ******************************************************************/ -#define LED_STARTED 0 -#define LED_HEAPALLOCATE 1 -#define LED_IRQSENABLED 2 -#define LED_STACKCREATED 3 -#define LED_INIRQ 4 -#define LED_SIGNAL 5 -#define LED_ASSERTION 6 -#define LED_PANIC 7 - -/* GPIO pin definitions *************************************************************/ - -#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) - -#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) +#define LED_STARTED 0 /* LED0=OFF LED1=OFF LED2=OFF */ +#define LED_HEAPALLOCATE 1 /* LED0=OFF LED1=OFF LED2=ON */ +#define LED_IRQSENABLED 2 /* LED0=OFF LED1=ON LED2=OFF */ +#define LED_STACKCREATED 3 /* LED0=OFF LED1=ON LED2=ON */ + +#define LED_INIRQ 4 /* LED0=OFF LED1=TOG LED2=XXX */ +#define LED_SIGNAL 5 /* LED0=OFF LED1=XXX LED2=TOG */ +#define LED_ASSERTION 6 /* LED0=TOG LED1=XXX LED2=XXX */ +#define LED_PANIC 7 /* LED0=TOG LED1=XXX LED2=XXX*/ /************************************************************************************ * Public Data diff --git a/nuttx/configs/sam3u-ek/ostest/defconfig b/nuttx/configs/sam3u-ek/ostest/defconfig index 7c5b33c31..33f1ee3ec 100755 --- a/nuttx/configs/sam3u-ek/ostest/defconfig +++ b/nuttx/configs/sam3u-ek/ostest/defconfig @@ -100,7 +100,7 @@ CONFIG_SAM3U_BUILDROOT=y # # Individual subsystems can be enabled: # -CONFIG_SAM3U_USART=y +CONFIG_SAM3U_UART=y CONFIG_SAM3U_USART0=n CONFIG_SAM3U_USART1=n CONFIG_SAM3U_USART2=n 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 * * 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,14 +72,95 @@ # 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 */ -- cgit v1.2.3