XMC4500-Relax: Add LED support.

This commit is contained in:
Gregory Nutt 2017-03-20 14:33:48 -06:00
parent 3a91ba5264
commit e1f86f407f
3 changed files with 162 additions and 10 deletions

View File

@ -42,6 +42,8 @@
#include <nuttx/config.h> #include <nuttx/config.h>
#include "xmc4_gpio.h"
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
****************************************************************************/ ****************************************************************************/
@ -50,18 +52,30 @@
* *
* The XMC4500 Relax Lite v1 board has two LEDs: * The XMC4500 Relax Lite v1 board has two LEDs:
* *
* LED1 P1.1 High output illuminates * LED1 P1.1, Pad type A1+, High output illuminates
* LED2 P1.0 High output illuminates * LED2 P1.0, Pad type A1+ High output illuminates
*/ */
#define GPIO_LED1 (GPIO_OUTPUT | GPIO_OUTPUT_PUSHPULL | \
GPIO_PADA1P_STRONGSOFT | GPIO_PINCTRL_SOFTWARE | \
GPIO_OUTPUT_CLEAR | GPIO_PORT1 | GPIO_PIN1)
#define GPIO_LED2 (GPIO_OUTPUT | GPIO_OUTPUT_PUSHPULL | \
GPIO_PADA1P_STRONGSOFT | GPIO_PINCTRL_SOFTWARE | \
GPIO_OUTPUT_CLEAR | GPIO_PORT1 | GPIO_PIN0)
/* BUTTONS /* BUTTONS
* *
* The XMC4500 Relax Lite v1 board has two buttons: * The XMC4500 Relax Lite v1 board has two buttons:
* *
* BUTTON1 P1.14 Low input sensed when button pressed * BUTTON1 P1.14, Pad type A2, Low input sensed when button pressed
* BUTTON2 P1.15 Low input sensed when button pressed * BUTTON2 P1.15, Pad type A2, Low input sensed when button pressed
*/ */
#define GPIO_BUTTON1 (GPIO_INPUT | GPIO_PINCTRL_SOFTWARE | \
GPIO_PORT1 | GPIO_PIN14)
#define GPIO_BUTTON2 (GPIO_INPUT | GPIO_PINCTRL_SOFTWARE | \
GPIO_PORT1 | GPIO_PIN15)
/**************************************************************************** /****************************************************************************
* Public Types * Public Types
****************************************************************************/ ****************************************************************************/

View File

@ -33,6 +33,30 @@
* *
****************************************************************************/ ****************************************************************************/
/* The XMC4500 Relax Lite v1 board has two LEDs:
*
* LED1 P1.1 High output illuminates
* LED2 P1.0 High output illuminates
*
* These LEDs are not used by the board port unless CONFIG_ARCH_LEDS is
* defined. In that case, the usage by the board port is defined in
* include/board.h and src/sam_autoleds.c. The LEDs are used to encode
* OS-related events as follows:
*
* SYMBOL Meaning LED state
* LED2 LED1
* --------------------- -------------------------- ------ ------ */
#define LED_STARTED 0 /* NuttX has been started OFF OFF */
#define LED_HEAPALLOCATE 0 /* Heap has been allocated OFF OFF */
#define LED_IRQSENABLED 0 /* Interrupts enabled OFF OFF */
#define LED_STACKCREATED 1 /* Idle stack created ON OFF */
#define LED_INIRQ 2 /* In an interrupt No change */
#define LED_SIGNAL 2 /* In a signal handler No change */
#define LED_ASSERTION 2 /* An assertion failed No change */
#define LED_PANIC 3 /* The system has crashed N/C Blinking */
#undef LED_IDLE /* MCU is is sleep mode Not used */
/**************************************************************************** /****************************************************************************
* Included Files * Included Files
****************************************************************************/ ****************************************************************************/
@ -42,10 +66,93 @@
#include <nuttx/board.h> #include <nuttx/board.h>
#include <arch/board/board.h> #include <arch/board/board.h>
#include "xmc4_gpio.h"
#include "xmc4500-relax.h" #include "xmc4500-relax.h"
#ifdef CONFIG_ARCH_LEDS #ifdef CONFIG_ARCH_LEDS
/****************************************************************************
* Private Functions
****************************************************************************/
static void board_led1_on(int led)
{
bool ledon = false;
switch (led)
{
case 0: /* LED1=OFF */
break;
case 1: /* LED1=ON */
ledon = true;
break;
case 2: /* LED1=N/C */
case 3: /* LED1=N/C */
default:
return;
}
xmc4_gpio_write(GPIO_LED1, ledon);
}
static void board_led2_on(int led)
{
bool ledon = false;
switch (led)
{
case 0: /* LED2=OFF */
case 1: /* LED2=OFF */
break;
case 3: /* LED2=ON */
ledon = true;
break;
case 2: /* LED2=N/C */
default:
return;
}
xmc4_gpio_write(GPIO_LED2, ledon);
}
void board_led1_off(int led)
{
switch (led)
{
case 0: /* LED1=OFF */
case 1: /* LED1=OFF */
break;
case 2: /* LED1=N/C */
case 3: /* LED1=N/C */
default:
return;
}
xmc4_gpio_write(GPIO_LED1, false);
}
void board_led2_off(int led)
{
switch (led)
{
case 0: /* LED2=OFF */
case 1: /* LED2=OFF */
case 3: /* LED2=OFF */
break;
case 2: /* LED2=N/C */
default:
return;
}
xmc4_gpio_write(GPIO_LED2, false);
}
/**************************************************************************** /****************************************************************************
* Public Functions * Public Functions
****************************************************************************/ ****************************************************************************/
@ -56,7 +163,10 @@
void board_autoled_initialize(void) void board_autoled_initialize(void)
{ {
#warning Missing logic /* Configure LED1-2 GPIOs for output */
(void)xmc4_gpio_config(GPIO_LED1);
(void)xmc4_gpio_config(GPIO_LED2);
} }
/**************************************************************************** /****************************************************************************
@ -65,7 +175,8 @@ void board_autoled_initialize(void)
void board_autoled_on(int led) void board_autoled_on(int led)
{ {
#warning Missing logic board_led1_on(led);
board_led2_on(led);
} }
/**************************************************************************** /****************************************************************************
@ -74,7 +185,8 @@ void board_autoled_on(int led)
void board_autoled_off(int led) void board_autoled_off(int led)
{ {
#warning Missing logic board_led1_off(led);
board_led2_off(led);
} }
#endif /* CONFIG_ARCH_LEDS */ #endif /* CONFIG_ARCH_LEDS */

View File

@ -41,6 +41,8 @@
#include <debug.h> #include <debug.h>
#include <arch/board/board.h> #include <arch/board/board.h>
#include "xmc4_gpio.h"
#include "xmc4500-relax.h" #include "xmc4500-relax.h"
/**************************************************************************** /****************************************************************************
@ -53,7 +55,10 @@
void board_userled_initialize(void) void board_userled_initialize(void)
{ {
#warning Missing logic /* Configure LED1-2 GPIOs for output */
(void)xmc4_gpio_config(GPIO_LED1);
(void)xmc4_gpio_config(GPIO_LED2);
} }
/**************************************************************************** /****************************************************************************
@ -62,7 +67,22 @@ void board_userled_initialize(void)
void board_userled(int led, bool ledon) void board_userled(int led, bool ledon)
{ {
#warning Missing logic gpioconfig_t ledcfg;
if (led == BOARD_LED1)
{
ledcfg = GPIO_LED1;
}
else if (led == BOARD_LED2)
{
ledcfg = GPIO_LED2;
}
else
{
return;
}
xmc4_gpio_write(ledcfg, ledon);
} }
/**************************************************************************** /****************************************************************************
@ -71,5 +91,11 @@ void board_userled(int led, bool ledon)
void board_userled_all(uint8_t ledset) void board_userled_all(uint8_t ledset)
{ {
#warning Missing logic bool ledon;
ledon = ((ledset & BOARD_LED1_BIT) != 0);
xmc4_gpio_write(GPIO_LED1, ledon);
ledon = ((ledset & BOARD_LED2_BIT) != 0);
xmc4_gpio_write(GPIO_LED2, ledon);
} }