From 39c7e133e27067c6129e98fc6a7ef315bf5be418 Mon Sep 17 00:00:00 2001 From: patacongo Date: Sun, 25 Dec 2011 19:35:36 +0000 Subject: Improved starter kit LED support git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4226 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/configs/pic32-starterkit/include/board.h | 60 +++++++++++++++++++---- nuttx/configs/pic32-starterkit/src/Makefile | 6 +-- nuttx/configs/pic32-starterkit/src/up_leds.c | 66 ++++++++++++++++++++++---- 3 files changed, 111 insertions(+), 21 deletions(-) (limited to 'nuttx') diff --git a/nuttx/configs/pic32-starterkit/include/board.h b/nuttx/configs/pic32-starterkit/include/board.h index 5a2ca7692..e33ae3337 100644 --- a/nuttx/configs/pic32-starterkit/include/board.h +++ b/nuttx/configs/pic32-starterkit/include/board.h @@ -43,6 +43,10 @@ #include +#ifndef __ASSEMBLY__ +# include +#endif + /**************************************************************************** * Pre-Processor Definitions ****************************************************************************/ @@ -96,6 +100,32 @@ * * We will use the labels on the board to identify LEDs * + * There are 5 additional LEDs available on the MEB (but not used by NuttX): + * + * RD1 LED1 + * RD2 LED2 + * RD3 LED3 + * RC1 LED4 + * RC2 LED5 + */ + +/* LED index values for use with pic32mx_setled() */ + +#define PIC32MX_STARTERKIT_LED1 0 +#define PIC32MX_STARTERKIT_LED2 1 +#define PIC32MX_STARTERKIT_LED3 2 +#define PIC32MX_STARTERKIT_NLEDS 3 + +/* LED bits for use with pic32mx_setleds() */ + +#define PIC32MX_STARTERKIT_LED1_BIT (1 << PIC32MX_STARTERKIT_LED1) +#define PIC32MX_STARTERKIT_LED2_BIT (1 << PIC32MX_STARTERKIT_LED2) +#define PIC32MX_STARTERKIT_LED3_BIT (1 << PIC32MX_STARTERKIT_LED3) + +/* If CONFIG_ARCH_LEDs is defined, then NuttX will control the 3 LEDs + * on board the Ethernet Starter Kit. The following definitions + * describe how NuttX controls the LEDs: + * * ON OFF * ------------------------- ---- ---- ---- ---- ---- ---- * LED1 LED2 LED3 LED1 LED2 LED3 @@ -108,14 +138,6 @@ * LED_SIGNAL 4 N/C N/C ON N/C N/C OFF * LED_ASSERTION 4 N/C N/C ON N/C N/C OFF * LED_PANIC 5 ON N/C N/C OFF N/C N/C - * - * There are 5 additional LEDs available on the MEB: - * - * RD1 LED1 - * RD2 LED2 - * RD3 LED3 - * RC1 LED4 - * RC2 LED5 */ #define LED_STARTED 0 @@ -158,6 +180,28 @@ extern "C" { #define EXTERN extern #endif +/**************************************************************************** + * Name: pic32mx_ledinit and pic32mx_setled + * + * Description: + * If CONFIG_ARCH_LEDS is defined, then NuttX will control the on-board + * LEDs. If CONFIG_ARCH_LEDS is not defined, then the following interfaces + * are available to control the LEDs from user applicaitons. + * + ****************************************************************************/ + +#ifndef CONFIG_ARCH_LEDS +EXTERN void pic32mx_ledinit(void); +#endif + +#ifndef CONFIG_ARCH_LEDS +EXTERN void pic32mx_setled(int led, bool ledon); +#endif + +#ifndef CONFIG_ARCH_LEDS +EXTERN void pic32mx_setleds(uint8_t ledset); +#endif + #undef EXTERN #ifdef __cplusplus } diff --git a/nuttx/configs/pic32-starterkit/src/Makefile b/nuttx/configs/pic32-starterkit/src/Makefile index 366cb9412..f45e70826 100644 --- a/nuttx/configs/pic32-starterkit/src/Makefile +++ b/nuttx/configs/pic32-starterkit/src/Makefile @@ -38,11 +38,7 @@ CFLAGS += -I$(TOPDIR)/sched ASRCS = -CSRCS = up_boot.c up_spi.c - -ifeq ($(CONFIG_ARCH_LEDS),y) -CSRCS += up_leds.c -endif +CSRCS = up_boot.c up_leds.c up_spi.c ifeq ($(CONFIG_NSH_ARCHINIT),y) CSRCS += up_nsh.c diff --git a/nuttx/configs/pic32-starterkit/src/up_leds.c b/nuttx/configs/pic32-starterkit/src/up_leds.c index 7d07b4331..14b924f30 100644 --- a/nuttx/configs/pic32-starterkit/src/up_leds.c +++ b/nuttx/configs/pic32-starterkit/src/up_leds.c @@ -54,8 +54,6 @@ #include "pic32mx-ioport.h" #include "starterkit_internal.h" -#ifdef CONFIG_ARCH_LEDS - /**************************************************************************** * Definitions ****************************************************************************/ @@ -91,9 +89,11 @@ /* LED Management Definitions ***********************************************/ -#define LED_OFF 0 -#define LED_ON 1 -#define LED_NC 2 +#ifdef CONFIG_ARCH_LEDS +# define LED_OFF 0 +# define LED_ON 1 +# define LED_NC 2 +#endif /* Debug ********************************************************************/ @@ -115,6 +115,7 @@ * Private types ****************************************************************************/ +#ifdef CONFIG_ARCH_LEDS struct led_setting_s { uint8_t led1 : 2; @@ -122,11 +123,16 @@ struct led_setting_s uint8_t led3 : 2; uint8_t unused : 2; }; +#endif /**************************************************************************** * Private Data ****************************************************************************/ +/* If CONFIG_ARCH_LEDS is defined then NuttX will control the LEDs. The + * following structures identified the LED settings for each NuttX LED state. + */ +#ifdef CONFIG_ARCH_LEDS static const struct led_setting_s g_ledonvalues[LED_NVALUES] = { {LED_OFF, LED_OFF, LED_OFF, LED_OFF}, @@ -147,6 +153,18 @@ static const struct led_setting_s g_ledoffvalues[LED_NVALUES] = {LED_OFF, LED_NC, LED_NC, LED_OFF}, }; +/* If CONFIG_ARCH_LEDS is not defined, the the user can control the LEDs in + * any way. The following array simply maps the PIC32MX_STARTERKIT_LEDn + * index values to the correct LED pin configuration. + */ + +#else +static const uint16_t g_ledpincfg[PIC32MX_STARTERKIT_NLEDS] = +{ + GPIO_LED_1, GPIO_LED_2, GPIO_LED_3 +}; +#endif + /**************************************************************************** * Private Functions ****************************************************************************/ @@ -155,6 +173,7 @@ static const struct led_setting_s g_ledoffvalues[LED_NVALUES] = * Name: up_setleds ****************************************************************************/ +#ifdef CONFIG_ARCH_LEDS void up_setleds(FAR const struct led_setting_s *setting) { if (setting->led1 != LED_NC) @@ -172,6 +191,7 @@ void up_setleds(FAR const struct led_setting_s *setting) pic32mx_gpiowrite(GPIO_LED_3, setting->led3 == LED_ON); } } +#endif /**************************************************************************** * Public Functions @@ -190,27 +210,57 @@ void pic32mx_ledinit(void) pic32mx_configgpio(GPIO_LED_3); } +/**************************************************************************** + * Name: pic32mx_setled + ****************************************************************************/ + +#ifndef CONFIG_ARCH_LEDS +void pic32mx_setled(int led, bool ledon) +{ + if ((unsigned)led < PIC32MX_STARTERKIT_NLEDS) + { + pic32mx_gpiowrite(g_ledpincfg[led], ledon); + } +} +#endif + +/**************************************************************************** + * Name: pic32mx_setleds + ****************************************************************************/ + +#ifndef CONFIG_ARCH_LEDS +void pic32mx_setleds(uint8_t ledset) +{ + pic32mx_setled(PIC32MX_STARTERKIT_LED1, (ledset & PIC32MX_STARTERKIT_LED1_BIT) != 0); + pic32mx_setled(PIC32MX_STARTERKIT_LED2, (ledset & PIC32MX_STARTERKIT_LED2_BIT) != 0); + pic32mx_setled(PIC32MX_STARTERKIT_LED3, (ledset & PIC32MX_STARTERKIT_LED3_BIT) != 0); +} +#endif + /**************************************************************************** * Name: up_ledon ****************************************************************************/ +#ifdef CONFIG_ARCH_LEDS void up_ledon(int led) { - if (led < LED_NVALUES) + if ((unsigned)led < LED_NVALUES) { up_setleds(&g_ledonvalues[led]); } } +#endif /**************************************************************************** * Name: up_ledoff ****************************************************************************/ +#ifdef CONFIG_ARCH_LEDS void up_ledoff(int led) { - if (led < LED_NVALUES) + if ((unsigned)led < LED_NVALUES) { up_setleds(&g_ledoffvalues[led]); } } -#endif /* CONFIG_ARCH_LEDS */ +#endif -- cgit v1.2.3