[update] port blink example to stm32l discovery
authorFabien Le Mentec <texane@gmail.com>
Sat, 15 Oct 2011 22:10:15 +0000 (17:10 -0500)
committerFabien Le Mentec <texane@gmail.com>
Sat, 15 Oct 2011 22:10:15 +0000 (17:10 -0500)
example/main.c

index 7b96605430347c74093af97b9d925116771ba5bb..929e3b9c1279762da8bbdd5e703c2ac1a2f0d825 100644 (file)
@@ -1,10 +1,65 @@
+/* missing type */
+
 typedef unsigned int uint32_t;
 
-#define GPIOC          0x40011000 // port C
-#define GPIOC_CRH      (GPIOC + 0x04) // port configuration register high
-#define GPIOC_ODR      (GPIOC + 0x0c) // port output data register
-#define LED_BLUE       (1<<8) // pin 8
-#define LED_GREEN      (1<<9) // pin 9
+
+/* hardware configuration */
+
+#define CONFIG_STM32L_DISCOVERY 1
+#define CONFIG_STM32VL_DISCOVERY 0
+
+
+#if CONFIG_STM32VL_DISCOVERY
+
+# define GPIOC 0x40011000 /* port C */
+# define GPIOC_CRH (GPIOC + 0x04) /* port configuration register high */
+# define GPIOC_ODR (GPIOC + 0x0c) /* port output data register */
+
+# define LED_BLUE (1 << 8) /* port C, pin 8 */
+# define LED_GREEN (1 << 9) /* port C, pin 9 */
+
+static inline void setup_leds(void)
+{
+  *(volatile uint32_t*)GPIOC_CRH = 0x44444411;
+}
+
+static inline void switch_leds_on(void)
+{
+  *(volatile uint32_t*)GPIOC_ODR = LED_BLUE | LED_GREEN;
+}
+
+static inline void switch_leds_off(void)
+{
+  *(volatile uint32_t*)GPIOC_ODR = 0;
+}
+
+#elif CONFIG_STM32L_DISCOVERY
+
+# define GPIOB 0x40020400 /* port B */
+# define GPIOB_MODER (GPIOB + 0x00) /* port mode register */
+# define GPIOB_ODR (GPIOB + 0x14) /* port output data register */
+
+# define LED_BLUE (1 << 6) /* port B, pin 6 */
+# define LED_GREEN (1 << 7) /* port B, pin 7 */
+
+static inline void setup_leds(void)
+{
+  /* configure port 6 and 7 as output */
+  *(volatile uint32_t*)GPIOB_MODER |= (1 << (7 * 2)) | (1 << (6 * 2));
+}
+
+static inline void switch_leds_on(void)
+{
+  *(volatile uint32_t*)GPIOB_ODR = LED_BLUE | LED_GREEN;
+}
+
+static inline void switch_leds_off(void)
+{
+  *(volatile uint32_t*)GPIOB_ODR = 0;
+}
+
+#endif /* otherwise, error */
+
 
 #define delay()                                                \
 do {                                                   \
@@ -15,13 +70,13 @@ do {                                                        \
 
 static void __attribute__((naked)) __attribute__((used)) main(void)
 {
-  *(volatile uint32_t*)GPIOC_CRH = 0x44444411;
+  setup_leds();
 
   while (1)
   {
-    *(volatile uint32_t*)GPIOC_ODR = LED_BLUE | LED_GREEN;
+    switch_leds_on();
     delay();
-    *(volatile uint32_t*)GPIOC_ODR = 0;
+    switch_leds_off();
     delay();
   }
 }