diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2014-09-11 14:45:20 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2014-09-11 14:45:20 -0600 |
commit | a31bfe92ff06f03dcc757d76a2aec488fede2040 (patch) | |
tree | 816624a2114859189994db4d5e2e225f765417c4 /nuttx/configs/cc3200-launchpad | |
parent | 21588bb5aab97e83ab7f37c2742759e9512eddab (diff) | |
download | px4-nuttx-a31bfe92ff06f03dcc757d76a2aec488fede2040.tar.gz px4-nuttx-a31bfe92ff06f03dcc757d76a2aec488fede2040.tar.bz2 px4-nuttx-a31bfe92ff06f03dcc757d76a2aec488fede2040.zip |
Add LED support for the CC3200 Launchpad. From Jim Ewing
Diffstat (limited to 'nuttx/configs/cc3200-launchpad')
-rw-r--r-- | nuttx/configs/cc3200-launchpad/include/cc3200_utils.h | 20 | ||||
-rw-r--r-- | nuttx/configs/cc3200-launchpad/nsh/defconfig | 3 | ||||
-rw-r--r-- | nuttx/configs/cc3200-launchpad/src/Makefile | 3 | ||||
-rw-r--r-- | nuttx/configs/cc3200-launchpad/src/cc3200_autoleds.c | 60 | ||||
-rw-r--r-- | nuttx/configs/cc3200-launchpad/src/cc3200_boot.c | 2 | ||||
-rw-r--r-- | nuttx/configs/cc3200-launchpad/src/cc3200_launchpad.h | 18 | ||||
-rw-r--r-- | nuttx/configs/cc3200-launchpad/src/cc3200_leds.c | 156 | ||||
-rw-r--r-- | nuttx/configs/cc3200-launchpad/src/cc3200_utils.c | 77 |
8 files changed, 317 insertions, 22 deletions
diff --git a/nuttx/configs/cc3200-launchpad/include/cc3200_utils.h b/nuttx/configs/cc3200-launchpad/include/cc3200_utils.h index d4dc093ef..746f806fa 100644 --- a/nuttx/configs/cc3200-launchpad/include/cc3200_utils.h +++ b/nuttx/configs/cc3200-launchpad/include/cc3200_utils.h @@ -117,19 +117,11 @@ #define PIN_63 0x0000003E #define PIN_64 0x0000003F -/************************************************************************************ - * Private Data - ************************************************************************************/ +#define GPIO_O_GPIO_DATA 0x00000000 +#define GPIO_O_GPIO_DIR 0x00000400 -static const unsigned long g_cc3200_pinmap[64] = -{ - 10, 11, 12, 13, 14, 15, 16, 17, 255, 255, 18, - 19, 20, 21, 22, 23, 24, 40, 28, 29, 25, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 31, 255, 255, 255, 255, 0, 255, 32, 30, 255, 1, - 255, 2, 3, 4, 5, 6, 7, 8, 9 -}; +#define GPIO_DIR_MODE_OUT 0x00000001 +#define GPIO_DIR_MODE_IN 0x00000000 /************************************************************************************ * Public Functions @@ -139,5 +131,9 @@ void cc3200_print(char* str); void cc3200_pin_config_set(uint32_t pin, uint32_t pin_strength, uint32_t pin_type); void cc3200_pin_mode_set(uint32_t pin, uint32_t pin_mode); void cc3200_pin_type_uart(uint32_t pin, uint32_t pin_mode); +void cc3200_get_gpio_port_pin(uint8_t pin, uint32_t *gpio_port, uint8_t *gpio_pin); +void cc3200_set_gpio(uint8_t pin, uint32_t gpio_port, uint8_t gpio_pin, uint8_t gpio_val); +void cc3200_set_gpio_dir(uint32_t port, uint8_t pins, uint32_t pin_io); +void cc3200_pin_type_gpio(uint32_t pin, uint32_t pin_mode, uint32_t open_drain); #endif /* __CONFIGS_CC3200_INCLUDE_UTILS_H */ diff --git a/nuttx/configs/cc3200-launchpad/nsh/defconfig b/nuttx/configs/cc3200-launchpad/nsh/defconfig index 31f98a73c..3b00430d6 100644 --- a/nuttx/configs/cc3200-launchpad/nsh/defconfig +++ b/nuttx/configs/cc3200-launchpad/nsh/defconfig @@ -211,7 +211,7 @@ CONFIG_ARCH_BOARD="cc3200-launchpad" # Common Board Options # CONFIG_ARCH_HAVE_LEDS=y -# CONFIG_ARCH_LEDS is not set +CONFIG_ARCH_LEDS=y CONFIG_ARCH_HAVE_BUTTONS=y # CONFIG_ARCH_BUTTONS is not set CONFIG_ARCH_HAVE_IRQBUTTONS=y @@ -249,6 +249,7 @@ CONFIG_PREALLOC_TIMERS=2 # # Tasks and Scheduling # +# CONFIG_INIT_NONE is not set CONFIG_INIT_ENTRYPOINT=y # CONFIG_INIT_FILEPATH is not set CONFIG_USER_ENTRYPOINT="nsh_main" diff --git a/nuttx/configs/cc3200-launchpad/src/Makefile b/nuttx/configs/cc3200-launchpad/src/Makefile index a1644a02e..c9b9b3e48 100644 --- a/nuttx/configs/cc3200-launchpad/src/Makefile +++ b/nuttx/configs/cc3200-launchpad/src/Makefile @@ -40,8 +40,7 @@ CFLAGS += -I$(TOPDIR)/sched -I../include ASRCS = AOBJS = $(ASRCS:.S=$(OBJEXT)) -CSRCS = cc3200_boot.c cc3200_serial.c cc3200_utils.c -#cc3200_leds.c +CSRCS = cc3200_boot.c cc3200_serial.c cc3200_utils.c cc3200_leds.c ifeq ($(CONFIG_ARCH_LEDS),y) CSRCS += cc3200_autoleds.c diff --git a/nuttx/configs/cc3200-launchpad/src/cc3200_autoleds.c b/nuttx/configs/cc3200-launchpad/src/cc3200_autoleds.c index 820618971..6243c3653 100644 --- a/nuttx/configs/cc3200-launchpad/src/cc3200_autoleds.c +++ b/nuttx/configs/cc3200-launchpad/src/cc3200_autoleds.c @@ -72,10 +72,10 @@ * briefly while the assertion is handled. You will probably never see this. * * Flashing RED: - * - In the event of a fatal crash, the BLUE and GREEN components will be + * - In the event of a fatal crash, the YELLOW and GREEN components will be * extinguished and the RED component will FLASH at a 2Hz rate. * - * RED GREEN BLUE + * RED YELLOW BLUE * LED_STARTED 0 OFF OFF OFF * LED_HEAPALLOCATE 0 OFF OFF OFF * LED_IRQSENABLED 0 OFF OFF OFF @@ -135,7 +135,38 @@ void board_led_on(int led) { -// cc3200_ledon(led); + switch (led) + { + /* All components stay off until the file initialization step */ + + default: + case 0: + break; + + /* The GREEN component is illuminated at the final initialization step */ + + case 1: + cc3200_ledon(1); + break; + + /* These will illuminate the YELLOW component with on effect no RED and GREEN */ + + case 2: + cc3200_ledon(2); + break; + + /* This will turn off YELLOW and GREEN and turn RED on */ + + case 4: + cc3200_ledoff(1); + cc3200_ledoff(2); + + /* This will illuminate the RED component with no effect on YELLOW and GREEN */ + + case 3: + cc3200_ledon(3); + break; + } } /**************************************************************************** @@ -144,7 +175,28 @@ void board_led_on(int led) void board_led_off(int led) { -// cc3200_ledoff(led); + switch (led) + { + /* These should not happen and are ignored */ + + default: + case 0: + case 1: + break; + + /* These will extinguish the YELLOW component with no effect on RED and GREEN */ + + case 2: + cc3200_ledoff(2); + break; + + /* These will extinguish the RED component with on effect on RED and GREEN */ + + case 3: + case 4: + cc3200_ledoff(3); + break; + } } #endif /* CONFIG_ARCH_LEDS */ diff --git a/nuttx/configs/cc3200-launchpad/src/cc3200_boot.c b/nuttx/configs/cc3200-launchpad/src/cc3200_boot.c index 76d6e8811..7d1e8fa5b 100644 --- a/nuttx/configs/cc3200-launchpad/src/cc3200_boot.c +++ b/nuttx/configs/cc3200-launchpad/src/cc3200_boot.c @@ -103,7 +103,7 @@ void tiva_boardinitialize(void) cc3200_print("\r\nCC3200 init\r\n"); -// cc3200_ledinit(); + cc3200_ledinit(); } /************************************************************************ diff --git a/nuttx/configs/cc3200-launchpad/src/cc3200_launchpad.h b/nuttx/configs/cc3200-launchpad/src/cc3200_launchpad.h index 2378023ad..9f9c77dc6 100644 --- a/nuttx/configs/cc3200-launchpad/src/cc3200_launchpad.h +++ b/nuttx/configs/cc3200-launchpad/src/cc3200_launchpad.h @@ -65,4 +65,22 @@ void cc3200_init(void); void cc3200_uart_init(void); +/************************************************************************************ + * Name: cc3200_led_init + ************************************************************************************/ + +void cc3200_led_init(void); + +/**************************************************************************** + * Name: cc3200_ledon + ****************************************************************************/ + +void cc3200_ledon(int led); + +/**************************************************************************** + * Name: cc3200_ledoff + ****************************************************************************/ + +void cc3200_ledoff(int led); + #endif /* __CONFIGS_CC3200_LAUNCHPAD_SRC_CC3200_LAUNCHPAD_H */ diff --git a/nuttx/configs/cc3200-launchpad/src/cc3200_leds.c b/nuttx/configs/cc3200-launchpad/src/cc3200_leds.c new file mode 100644 index 000000000..e72a8098f --- /dev/null +++ b/nuttx/configs/cc3200-launchpad/src/cc3200_leds.c @@ -0,0 +1,156 @@ +#include <nuttx/config.h> + +#include <stdbool.h> +#include <stdio.h> +#include <unistd.h> +#include <fcntl.h> +#include <debug.h> + +#include <arch/board/board.h> +#include <chip/cc3200_memorymap.h> + +#include "up_arch.h" + +#include "cc3200_launchpad.h" +#include "cc3200_utils.h" + +#define LED1_GPIO 9 +#define LED2_GPIO 10 +#define LED3_GPIO 11 + +/**************************************************************************** + * Name: cc3200_ledinit + ****************************************************************************/ + +void cc3200_ledinit(void) +{ + + uint32_t led1_port; + uint8_t led1_pin; + uint32_t led2_port; + uint8_t led2_pin; + uint32_t led3_port; + uint8_t led3_pin; + uint8_t x=16; + + putreg32(getreg32(0x44025000 + 0x00000058) | 0x00000001, 0x44025000 + 0x00000058); + while(--x) + ; + + cc3200_pin_type_gpio(PIN_01, PIN_MODE_0, false); + cc3200_set_gpio_dir(TIVA_GPIOB_BASE, 0x4, GPIO_DIR_MODE_OUT); + + cc3200_pin_type_gpio(PIN_02, PIN_MODE_0, false); + cc3200_set_gpio_dir(TIVA_GPIOB_BASE, 0x8, GPIO_DIR_MODE_OUT); + + cc3200_pin_type_gpio(PIN_64, PIN_MODE_0, false); + cc3200_set_gpio_dir(TIVA_GPIOB_BASE, 0x2, GPIO_DIR_MODE_OUT); + + cc3200_get_gpio_port_pin(LED1_GPIO, &led1_port, &led1_pin); + cc3200_get_gpio_port_pin(LED2_GPIO, &led2_port, &led2_pin); + cc3200_get_gpio_port_pin(LED3_GPIO, &led3_port, &led3_pin); + + cc3200_set_gpio(LED1_GPIO, led1_port, led1_pin, 0); + cc3200_set_gpio(LED2_GPIO, led2_port, led2_pin, 0); + cc3200_set_gpio(LED3_GPIO, led3_port, led3_pin, 0); + +} + +/**************************************************************************** + * Name: cc3200_ledon + ****************************************************************************/ + +void cc3200_ledon(int led) +{ + unsigned int led1_port; + unsigned char led1_pin; + unsigned int led2_port; + unsigned char led2_pin; + unsigned int led3_port; + unsigned char led3_pin; + + cc3200_get_gpio_port_pin(LED1_GPIO, &led1_port, &led1_pin); + cc3200_get_gpio_port_pin(LED2_GPIO, &led2_port, &led2_pin); + cc3200_get_gpio_port_pin(LED3_GPIO, &led3_port, &led3_pin); + + switch (led) + { + /* All */ + + default: + case 0: + cc3200_set_gpio(LED1_GPIO, led1_port, led1_pin, 1); + cc3200_set_gpio(LED2_GPIO, led2_port, led2_pin, 1); + cc3200_set_gpio(LED3_GPIO, led3_port, led3_pin, 1); + break; + + /* GREEN */ + + case 1: + cc3200_set_gpio(LED3_GPIO, led3_port, led3_pin, 1); + break; + + /* YELLOW */ + + case 2: + cc3200_set_gpio(LED2_GPIO, led2_port, led2_pin, 1); + break; + + /* RED */ + + case 3: + cc3200_set_gpio(LED1_GPIO, led1_port, led1_pin, 1); + break; + + } +} + +/**************************************************************************** + * Name: cc3200_ledoff + ****************************************************************************/ + +void cc3200_ledoff(int led) +{ + + unsigned int led1_port; + unsigned char led1_pin; + unsigned int led2_port; + unsigned char led2_pin; + unsigned int led3_port; + unsigned char led3_pin; + + cc3200_get_gpio_port_pin(LED1_GPIO, &led1_port, &led1_pin); + cc3200_get_gpio_port_pin(LED2_GPIO, &led2_port, &led2_pin); + cc3200_get_gpio_port_pin(LED3_GPIO, &led3_port, &led3_pin); + + switch (led) + { + /* All */ + + default: + case 0: + cc3200_set_gpio(LED1_GPIO, led1_port, led1_pin, 0); + cc3200_set_gpio(LED2_GPIO, led2_port, led2_pin, 0); + cc3200_set_gpio(LED3_GPIO, led3_port, led3_pin, 0); + break; + + /* GREEN */ + + case 1: + cc3200_set_gpio(LED3_GPIO, led3_port, led3_pin, 0); + break; + + /* YELLOW */ + + case 2: + cc3200_set_gpio(LED2_GPIO, led2_port, led2_pin, 0); + break; + + /* RED */ + + case 3: + cc3200_set_gpio(LED1_GPIO, led1_port, led1_pin, 0); + break; + + } +}
\ No newline at end of file diff --git a/nuttx/configs/cc3200-launchpad/src/cc3200_utils.c b/nuttx/configs/cc3200-launchpad/src/cc3200_utils.c index e83030d97..69fcaa2d5 100644 --- a/nuttx/configs/cc3200-launchpad/src/cc3200_utils.c +++ b/nuttx/configs/cc3200-launchpad/src/cc3200_utils.c @@ -38,17 +38,72 @@ #include <sys/types.h> #include <arch/board/cc3200_utils.h> +#include <chip/cc3200_memorymap.h> #include "nuttx/arch.h" #include "up_arch.h" -#include "cc3200_launchpad.h" +#include "cc3200_utils.h" + +/************************************************************************************ + * Private Data + ************************************************************************************/ + +static const unsigned long g_cc3200_pinmap[64] = +{ + 10, 11, 12, 13, 14, 15, 16, 17, 255, 255, 18, + 19, 20, 21, 22, 23, 24, 40, 28, 29, 25, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 31, 255, 255, 255, 255, 0, 255, 32, 30, 255, 1, + 255, 2, 3, 4, 5, 6, 7, 8, 9 +}; + +static const unsigned long gpio_reg[]= +{ + TIVA_GPIOA_BASE, + TIVA_GPIOB_BASE, + TIVA_GPIOC_BASE, + TIVA_GPIOD_BASE +}; /************************************************************************************ * Public Functions ************************************************************************************/ /************************************************************************************ + * Name: cc3200_get_gpio_port_pin + ************************************************************************************/ + +void cc3200_get_gpio_port_pin(uint8_t pin, uint32_t *gpio_port, uint8_t *gpio_pin) +{ + *gpio_pin = 1 << (pin % 8); + *gpio_port = (pin / 8); + *gpio_port = gpio_reg[*gpio_port]; +} + +/************************************************************************************ + * Name: cc3200_set_gpio + ************************************************************************************/ + +void cc3200_set_gpio(uint8_t pin, uint32_t gpio_port, uint8_t gpio_pin, + uint8_t gpio_val) +{ + gpio_val = gpio_val << (pin % 8); + putreg32(gpio_val, gpio_port + (gpio_pin << 2)); +} + +/************************************************************************************ + * Name: cc3200_set_gpio_dir + ************************************************************************************/ + +void cc3200_set_gpio_dir(uint32_t port, uint8_t pins, uint32_t pin_io) +{ + putreg32(((pin_io & 1) ? (getreg32(port + GPIO_O_GPIO_DIR) | pins) : + (getreg32(port + GPIO_O_GPIO_DIR) & ~(pins))), port + GPIO_O_GPIO_DIR); +} + +/************************************************************************************ * Name: cc3200_print ************************************************************************************/ @@ -110,6 +165,24 @@ void cc3200_pin_type_uart(uint32_t pin, uint32_t pin_mode) } /************************************************************************************ + * Name: cc3200_pin_type_gpio + ************************************************************************************/ + +void cc3200_pin_type_gpio(uint32_t pin, uint32_t pin_mode, uint32_t open_drain) +{ + if(open_drain) + { + cc3200_pin_config_set(pin, PIN_STRENGTH_2MA, PIN_TYPE_OD); + } + else + { + cc3200_pin_config_set(pin, PIN_STRENGTH_2MA, PIN_TYPE_STD); + } + + cc3200_pin_mode_set(pin, pin_mode); +} + +/************************************************************************************ * Name: cc3200_init ************************************************************************************/ @@ -117,7 +190,7 @@ void cc3200_init(void) { uint8_t x=16; - putreg32(getreg32(0x4402F064) | 0x800000,0x4402F064); + putreg32(getreg32(0x4402F064) | 0x800000, 0x4402F064); putreg32(getreg32(0x4402F800 + 0x00000418) | (1<<4), 0x4402F800 + 0x00000418); putreg32(getreg32(0x4402E16C) | 0x3C, 0x4402E16C); putreg32(getreg32(0x44025000 + 0x00000048) | 0x00000001, 0x44025000 + 0x00000048); |