-#define ao_spi_get_mask(reg,mask,bus) do { \
- ao_mutex_get(&ao_spi_mutex); \
- (reg) &= ~(mask); \
+#define AO_SPI_SPEED_FAST 17
+#define AO_SPI_SPEED_200kHz 13
+
+#define ao_spi_set_speed(speed) (U0GCR = (UxGCR_CPOL_NEGATIVE | \
+ UxGCR_CPHA_FIRST_EDGE | \
+ UxGCR_ORDER_MSB | \
+ ((speed) << UxGCR_BAUD_E_SHIFT)))
+
+#define ao_spi_get_slave(bus) do { \
+ ao_mutex_get(&ao_spi_mutex); \
+ ao_spi_set_speed(AO_SPI_SPEED_FAST); \
+ } while (0)
+
+#define ao_spi_put_slave(bus) do { \
+ ao_mutex_put(&ao_spi_mutex); \
+ } while (0)
+
+#define ao_spi_get_mask(reg,mask,bus,speed) do { \
+ ao_mutex_get(&ao_spi_mutex); \
+ ao_spi_set_speed(speed); \
+ (reg) &= ~(mask); \