summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-06-26 23:17:00 -0700
committerKeith Packard <keithp@keithp.com>2012-06-26 23:17:00 -0700
commit097b337eb9b7deff13d5dcdafddec9bec3868b93 (patch)
tree73a690898e4a4422d17de567a1971a03a2dccf4d
parent1ae69a1c2ce7e45db9d9c175bc63867eff68ebe5 (diff)
altos: Abort radio receive when using flash memory on megametrum
Radio receive camps on the SPI bus, making it impossible to access flash memory. Abort any pending receive operation when trying to get to the flash part. Yes, this is a total hack. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/drivers/ao_m25.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/drivers/ao_m25.c b/src/drivers/ao_m25.c
index c807cd68..2983a405 100644
--- a/src/drivers/ao_m25.c
+++ b/src/drivers/ao_m25.c
@@ -99,7 +99,18 @@ static __xdata uint8_t ao_m25_mutex;
static __xdata uint8_t ao_m25_instruction[4];
-#define M25_SELECT(cs) ao_spi_get_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS)
+#if HAS_BOOT_RADIO
+extern uint8_t ao_radio_in_recv;
+
+static void ao_boot_radio(void) {
+ if (ao_radio_in_recv)
+ ao_radio_recv_abort();
+}
+#else
+#define ao_boot_radio()
+#endif
+
+#define M25_SELECT(cs) do { ao_boot_radio(); ao_spi_get_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS); } while (0)
#define M25_DESELECT(cs) ao_spi_put_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS)
#define M25_BLOCK_SHIFT 16