altos: Abort radio receive when using flash memory on megametrum
authorKeith Packard <keithp@keithp.com>
Wed, 27 Jun 2012 06:17:00 +0000 (23:17 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 27 Jun 2012 06:17:00 +0000 (23:17 -0700)
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>
src/drivers/ao_m25.c

index c807cd686cb053c06921395d81448f82ec18a8cc..2983a405ac3d64adda9d8a0715bfff4dedb36ca8 100644 (file)
@@ -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