altos/fox1ihu: Pull down radio control pin in flash loader
authorKeith Packard <keithp@keithp.com>
Sat, 21 Apr 2018 23:16:18 +0000 (16:16 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 27 Apr 2018 02:33:48 +0000 (19:33 -0700)
Ensures that the radio is powered down while in the flash loader.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/fox1ihu/flash-loader/ao_pins.h

index 31201eb0cae28bf099762338bf405bce0a91dfbe..19f29b0881822151e2dc4612807e5ed6958c7c1c 100644 (file)
 #define AO_HSE         8000000
 
 #define AO_WATCHDOG_PORT       (&stm_gpiod)
 #define AO_HSE         8000000
 
 #define AO_WATCHDOG_PORT       (&stm_gpiod)
+#define AO_WATCHDOG_PORT_BIT   (1 << STM_RCC_AHBENR_GPIODEN)
 #define AO_WATCHDOG_BIT                3
 #define AO_WATCHDOG_BIT                3
-
-#define AO_FLASH_LOADER_INIT do {                                              \
-               ao_enable_output(AO_WATCHDOG_PORT, AO_WATCHDOG_BIT, AO_WATCHDOG, 0); \
+#define AO_WATCHDOG_VALUE      0
+
+#define AO_RADIO_CONTROL_PORT          (&stm_gpioe)
+#define AO_RADIO_CONTROL_PORT_BIT      (1 << STM_RCC_AHBENR_GPIOEEN)
+#define AO_RADIO_CONTROL_BIT           12
+#define AO_RADIO_CONTROL_VALUE         1
+
+#define AO_FLASH_LOADER_INIT do {                                      \
+               stm_rcc.ahbenr |= AO_WATCHDOG_PORT_BIT | AO_RADIO_CONTROL_PORT_BIT; \
+                                                                       \
+               stm_gpio_set(AO_WATCHDOG_PORT, AO_WATCHDOG_BIT, AO_WATCHDOG_VALUE); \
+               stm_moder_set(AO_WATCHDOG_PORT, AO_WATCHDOG_BIT, STM_MODER_OUTPUT); \
+                                                                       \
+               stm_gpio_set(AO_RADIO_CONTROL_PORT, AO_RADIO_CONTROL_BIT, AO_RADIO_CONTROL_VALUE); \
+               stm_moder_set(AO_RADIO_CONTROL_PORT, AO_RADIO_CONTROL_BIT, STM_MODER_OUTPUT); \
        } while (0)
        } while (0)
-       
+
 #define AO_TIMER_HOOK  do {                                            \
 #define AO_TIMER_HOOK  do {                                            \
-               static uint8_t  watchdog;                               \
-               ao_gpio_set(AO_WATCHDOG_PORT, AO_WATCHDOG_BIT, AO_WATCHDOG_PIN, watchdog); \
-               watchdog ^= 1;                                          \
+               AO_WATCHDOG_PORT->odr ^= (1 << AO_WATCHDOG_BIT);        \
        } while (0)
 
 #define HAS_TICK               1
        } while (0)
 
 #define HAS_TICK               1