From: Keith Packard Date: Mon, 19 Mar 2012 05:26:43 +0000 (-0700) Subject: Fix STM LED driver and blink LEDs on discovery board X-Git-Tag: 1.0.9.4~25 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=4be74ef0d13114707fd8217907a5ec457f886160;hp=ab6ea9043b592c25948a70b6204d613756a9a250 Fix STM LED driver and blink LEDs on discovery board This adds a task to blink the LEDs, after first fixing up the LED output code to enable the GPIO and talk to the right pins for the discovery board. Signed-off-by: Keith Packard --- diff --git a/src/stm-demo/Makefile b/src/stm-demo/Makefile index a675182e..b2413a2c 100644 --- a/src/stm-demo/Makefile +++ b/src/stm-demo/Makefile @@ -37,6 +37,7 @@ ALTOS_SRC = \ ao_romconfig.c \ ao_cmd.c \ ao_task.c \ + ao_led.c \ ao_stdio.c \ ao_panic.c \ ao_timer.c \ diff --git a/src/stm-demo/ao_demo.c b/src/stm-demo/ao_demo.c index 5fe0b154..94527089 100644 --- a/src/stm-demo/ao_demo.c +++ b/src/stm-demo/ao_demo.c @@ -22,9 +22,13 @@ struct ao_task demo_task; void ao_demo(void) { - int i = 0; for (;;) { - printf ("hello %d\n", i++); + ao_led_on(AO_LED_BLUE); + ao_delay(AO_MS_TO_TICKS(500)); + ao_led_off(AO_LED_BLUE); + ao_led_on(AO_LED_GREEN); + ao_delay(AO_MS_TO_TICKS(500)); + ao_led_off(AO_LED_GREEN); } } @@ -42,9 +46,10 @@ main(void) ao_serial_init(); ao_timer_init(); -// ao_cmd_init(); - + ao_cmd_init(); + ao_led_init(LEDS_AVAILABLE); ao_add_task(&demo_task, ao_demo, "demo"); + ao_start_scheduler(); return 0; } diff --git a/src/stm-demo/ao_pins.h b/src/stm-demo/ao_pins.h index f436e9c8..39d4fc3c 100644 --- a/src/stm-demo/ao_pins.h +++ b/src/stm-demo/ao_pins.h @@ -26,4 +26,15 @@ #define LOW_LEVEL_DEBUG 1 +#define LED_PORT_ENABLE STM_RCC_AHBENR_GPIOBEN +#define LED_PORT stm_gpiob +#define LED_PIN_GREEN 7 +#define LED_PIN_BLUE 6 +#define AO_LED_GREEN (1 << LED_PIN_GREEN) +#define AO_LED_BLUE (1 << LED_PIN_BLUE) + +#define AO_LED_RED AO_LED_BLUE /* a patent lie */ + +#define LEDS_AVAILABLE (AO_LED_BLUE | AO_LED_GREEN) + #endif /* _AO_PINS_H_ */ diff --git a/src/stm/ao_led.c b/src/stm/ao_led.c index db65afdf..0574aa2a 100644 --- a/src/stm/ao_led.c +++ b/src/stm/ao_led.c @@ -19,30 +19,28 @@ __pdata uint8_t ao_led_enable; -#define LED_PORT STM_GPIOD - void ao_led_on(uint8_t colors) { - LED_PORT->odr |= (colors & ao_led_enable); + LED_PORT.odr |= (colors & ao_led_enable); } void ao_led_off(uint8_t colors) { - LED_PORT->odr &= ~(colors & ao_led_enable); + LED_PORT.odr &= ~(colors & ao_led_enable); } void ao_led_set(uint8_t colors) { - LED_PORT->odr = (LED_PORT->odr & ~(ao_led_enable)) | (colors & ao_led_enable); + LED_PORT.odr = (LED_PORT.odr & ~(ao_led_enable)) | (colors & ao_led_enable); } void ao_led_toggle(uint8_t colors) { - LED_PORT->odr ^= (colors & ao_led_enable); + LED_PORT.odr ^= (colors & ao_led_enable); } void @@ -58,12 +56,13 @@ ao_led_init(uint8_t enable) { int bit; + stm_rcc.ahbenr |= (1 << LED_PORT_ENABLE); ao_led_enable = enable; - LED_PORT->odr &= ~enable; + LED_PORT.odr &= ~enable; for (bit = 0; bit < 16; bit++) { if (enable & (1 << bit)) { - stm_moder_set(LED_PORT, bit, STM_MODER_OUTPUT); - stm_otyper_set(LED_PORT, bit, STM_OTYPER_PUSH_PULL); + stm_moder_set(&LED_PORT, bit, STM_MODER_OUTPUT); + stm_otyper_set(&LED_PORT, bit, STM_OTYPER_PUSH_PULL); } } }