From: Keith Packard Date: Fri, 12 Aug 2011 12:38:16 +0000 (-0700) Subject: altos: Put SPI in slower mode when talking to companion board X-Git-Tag: 0.9.6.0~17 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=ebe2ffb29944abc4d6a35889c7b5f3d9f2871077 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 --- 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;