diff options
author | Keith Packard <keithp@keithp.com> | 2013-04-01 02:39:35 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-04-01 02:39:35 -0700 |
commit | 985df526ec142258ef990d0b55b0a14e13c099b4 (patch) | |
tree | a5b8e694c7c718e8f5000127013c901c1afcc30a /src/drivers/ao_sdcard.c | |
parent | 14c63f94f36a95272d91695039abf54efb423a91 (diff) |
altos: Horrible kludge -- disable radio while talking with SD card
The SD card really doesn't like the RFI generated by our enormous
radio, so just lock the radio out while working with the card.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/drivers/ao_sdcard.c')
-rw-r--r-- | src/drivers/ao_sdcard.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/drivers/ao_sdcard.c b/src/drivers/ao_sdcard.c index 6073677a..59ac9400 100644 --- a/src/drivers/ao_sdcard.c +++ b/src/drivers/ao_sdcard.c @@ -18,9 +18,11 @@ #include "ao.h" #include "ao_sdcard.h" -#define ao_sdcard_get_slow() ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_250kHz) -#define ao_sdcard_get() ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_FAST) -#define ao_sdcard_put() ao_spi_put(AO_SDCARD_SPI_BUS) +extern uint8_t ao_radio_mutex; + +#define ao_sdcard_get_slow() do { ao_mutex_get(&ao_radio_mutex); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_250kHz); } while (0) +#define ao_sdcard_get() do { ao_mutex_get(&ao_radio_mutex); ao_spi_get(AO_SDCARD_SPI_BUS, AO_SPI_SPEED_FAST); } while (0) +#define ao_sdcard_put() do { ao_spi_put(AO_SDCARD_SPI_BUS); ao_mutex_put(&ao_radio_mutex); } while (0) #define ao_sdcard_send_fixed(d,l) ao_spi_send_fixed((d), (l), AO_SDCARD_SPI_BUS) #define ao_sdcard_send(d,l) ao_spi_send((d), (l), AO_SDCARD_SPI_BUS) #define ao_sdcard_recv(d,l) ao_spi_recv((d), (l), AO_SDCARD_SPI_BUS) @@ -686,6 +688,9 @@ static const struct ao_cmds ao_sdcard_cmds[] = { void ao_sdcard_init(void) { + stm_pupdr_set(AO_SDCARD_SPI_PORT, AO_SDCARD_SPI_SCK_PIN, STM_PUPDR_PULL_UP); + stm_pupdr_set(AO_SDCARD_SPI_PORT, AO_SDCARD_SPI_MISO_PIN, STM_PUPDR_PULL_UP); + stm_pupdr_set(AO_SDCARD_SPI_PORT, AO_SDCARD_SPI_MOSI_PIN, STM_PUPDR_PULL_UP); ao_spi_init_cs(AO_SDCARD_SPI_CS_PORT, (1 << AO_SDCARD_SPI_CS_PIN)); #if SDCARD_DEBUG ao_cmd_register(&ao_sdcard_cmds[0]); |