summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-05-04 22:07:51 -0700
committerKeith Packard <keithp@keithp.com>2017-05-04 22:10:36 -0700
commit178d7c0aa32267ea71be2ccff146ea6ff990d7dc (patch)
tree56b8e97c76d0f871afe6c3e7196ac04337ead647 /src
parent3b4e3189211801c6f8f41c5d08c5a8551f28976c (diff)
altos/telemini-v3.0: Add 'recovery mode' on PA14 (pin 6 on dbg header)
Connect this pin to GND (pin 3) and TeleMini will come up with N0CALL at 434.550MHz using the original frequency calibration. Helps recover from accidental mis-configuration. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r--src/telemini-v3.0/ao_pins.h7
-rw-r--r--src/telemini-v3.0/ao_telemini.c17
2 files changed, 24 insertions, 0 deletions
diff --git a/src/telemini-v3.0/ao_pins.h b/src/telemini-v3.0/ao_pins.h
index 0551e1fc..17cff2ae 100644
--- a/src/telemini-v3.0/ao_pins.h
+++ b/src/telemini-v3.0/ao_pins.h
@@ -67,6 +67,13 @@
#define HAS_IGNITE_REPORT 1
#define AO_SMALL_ALTITUDE_TABLE 1
+/* Use debug connector clock for recovery mode */
+#define HAS_FORCE_FREQ 1
+#define AO_RECOVERY_PORT (&stm_gpioa)
+#define AO_RECOVERY_PIN 14
+#define AO_RECOVERY_VALUE 0
+#define AO_RECOVERY_MODE AO_EXTI_MODE_PULL_UP
+
/* Beeper is on Tim1 CH3 */
#define BEEPER_CHANNEL 4
#define BEEPER_TIMER 2
diff --git a/src/telemini-v3.0/ao_telemini.c b/src/telemini-v3.0/ao_telemini.c
index ecd16dd2..a50268b9 100644
--- a/src/telemini-v3.0/ao_telemini.c
+++ b/src/telemini-v3.0/ao_telemini.c
@@ -19,9 +19,26 @@
#include <ao.h>
#include <ao_exti.h>
+static void
+ao_check_recovery(void)
+{
+ int i;
+ ao_enable_input(AO_RECOVERY_PORT, AO_RECOVERY_PIN, AO_RECOVERY_MODE);
+ for (i = 0; i < 100; i++)
+ ao_arch_nop();
+ if (ao_gpio_get(AO_RECOVERY_PORT, AO_RECOVERY_PIN, AO_RECOVERY) == AO_RECOVERY_VALUE) {
+ ao_flight_force_idle = 1;
+ ao_force_freq = 1;
+ }
+ ao_gpio_set_mode(AO_RECOVERY_PORT, AO_RECOVERY_PIN, 0);
+ ao_disable_port(AO_RECOVERY_PORT);
+}
+
void
main(void)
{
+ ao_check_recovery();
+
ao_clock_init();
ao_task_init();
ao_timer_init();