diff options
| author | Keith Packard <keithp@keithp.com> | 2012-03-18 22:26:43 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-03-28 21:37:03 -0700 | 
| commit | 4be74ef0d13114707fd8217907a5ec457f886160 (patch) | |
| tree | fafe7935bad49480fefb462aa49a33f7e46af3a4 | |
| parent | ab6ea9043b592c25948a70b6204d613756a9a250 (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/Makefile | 1 | ||||
| -rw-r--r-- | src/stm-demo/ao_demo.c | 13 | ||||
| -rw-r--r-- | src/stm-demo/ao_pins.h | 11 | ||||
| -rw-r--r-- | src/stm/ao_led.c | 17 | 
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);  		}  	}  }  | 
