summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-03-18 22:26:43 -0700
committerKeith Packard <keithp@keithp.com>2012-03-28 21:37:03 -0700
commit4be74ef0d13114707fd8217907a5ec457f886160 (patch)
treefafe7935bad49480fefb462aa49a33f7e46af3a4
parentab6ea9043b592c25948a70b6204d613756a9a250 (diff)
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 <keithp@keithp.com>
-rw-r--r--src/stm-demo/Makefile1
-rw-r--r--src/stm-demo/ao_demo.c13
-rw-r--r--src/stm-demo/ao_pins.h11
-rw-r--r--src/stm/ao_led.c17
4 files changed, 29 insertions, 13 deletions
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);
}
}
}