summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-08-12 05:38:16 -0700
committerKeith Packard <keithp@keithp.com>2011-08-13 18:46:12 -0700
commitebe2ffb29944abc4d6a35889c7b5f3d9f2871077 (patch)
treec674520ad9da808ac52f318653088fb38c5b079f /src
parent30abbdc7ffcfc809b4a3fc31486fe968161ea225 (diff)
altos: Put SPI in slower mode when talking to companion board
The AVR CPU on the other side just can't go very fast. This reduces the SPI clock by a factor of 16, just under 200kHz. As the companion commands are reasonably short, this shouldn't have a huge effect on overall SPI utilization. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r--src/ao_companion.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/ao_companion.c b/src/ao_companion.c
index 8db3273e..556ce044 100644
--- a/src/ao_companion.c
+++ b/src/ao_companion.c
@@ -17,8 +17,18 @@
#include "ao.h"
-#define COMPANION_SELECT() ao_spi_get_bit(COMPANION_CS)
-#define COMPANION_DESELECT() ao_spi_put_bit(COMPANION_CS)
+#define ao_spi_slow() (U0GCR = (UxGCR_CPOL_NEGATIVE | \
+ UxGCR_CPHA_FIRST_EDGE | \
+ UxGCR_ORDER_MSB | \
+ (13 << UxGCR_BAUD_E_SHIFT)))
+
+#define ao_spi_fast() (U0GCR = (UxGCR_CPOL_NEGATIVE | \
+ UxGCR_CPHA_FIRST_EDGE | \
+ UxGCR_ORDER_MSB | \
+ (17 << UxGCR_BAUD_E_SHIFT)))
+
+#define COMPANION_SELECT() do { ao_spi_get_bit(COMPANION_CS); ao_spi_slow(); } while (0)
+#define COMPANION_DESELECT() do { ao_spi_fast(); ao_spi_put_bit(COMPANION_CS); } while (0)
static __xdata struct ao_companion_command ao_companion_command;
__xdata struct ao_companion_setup ao_companion_setup;