altos: Add SPI bus parameter to ao_spi_speed
authorKeith Packard <keithp@keithp.com>
Fri, 26 Jan 2024 19:07:55 +0000 (11:07 -0800)
committerKeith Packard <keithp@keithp.com>
Thu, 1 Feb 2024 01:50:19 +0000 (17:50 -0800)
The stm32f1 series has two SPI busses and they operate from different
base clocks, so the computation of the clock divider to get a
particular frequency depends upon which SPI bus is being used.

Signed-off-by: Keith Packard <keithp@keithp.com>
20 files changed:
src/drivers/ao_adxl375.c
src/drivers/ao_bmi088.c
src/drivers/ao_bmx160.c
src/drivers/ao_cc1120.c
src/drivers/ao_cc115l.c
src/drivers/ao_cc1200.c
src/drivers/ao_companion.c
src/drivers/ao_m25.c
src/drivers/ao_mma655x.c
src/drivers/ao_mmc5983.c
src/drivers/ao_mpu6000.c
src/drivers/ao_mpu9250.c
src/drivers/ao_ms5607.c
src/drivers/ao_st7565.h
src/lpc/ao_arch.h
src/samd21/ao_arch_funcs.h
src/snekboard/snekboard.c
src/stm/ao_arch_funcs.h
src/stm32l0/ao_arch_funcs.h
src/stmf0/ao_arch_funcs.h

index 9e5666cc5d6dcb83ea11697e676ba3b544555f01..70bf92a5f1fb72e6a44d0f711de58623a711a222 100644 (file)
@@ -26,7 +26,7 @@
 #define PRINTD(l,...)
 #endif
 
-#define AO_ADXL375_SPI_SPEED   ao_spi_speed(5000000)
+#define AO_ADXL375_SPI_SPEED   ao_spi_speed(AO_ADXL375_SPI_INDEX, 5000000)
 
 struct ao_adxl375_sample       ao_adxl375_current;
 
index d03fceab65845ea6aad79fec4ba83c1889b9b4b5..96e995f056035d2d7fa305e690f30a11fb6bce2b 100644 (file)
@@ -20,7 +20,7 @@
 #include <ao_bmi088.h>
 #include <ao_data.h>
 
-#define AO_BMI088_SPI_SPEED    ao_spi_speed(100000)
+#define AO_BMI088_SPI_SPEED    ao_spi_speed(AO_BMI088_SPI_BUS, 100000)
 
 #define ao_bmi088_spi_get()    ao_spi_get(AO_BMI088_SPI_BUS, AO_BMI088_SPI_SPEED)
 #define ao_bmi088_spi_put()    ao_spi_put(AO_BMI088_SPI_BUS)
index eabe0783253d05c788ff97c2cfc4cf9d12abe9c0..0df30f9428da8c24c53ef982c2b17e8324c67997 100644 (file)
@@ -24,7 +24,7 @@ static uint8_t        ao_bmx160_configured;
 
 static struct ao_bmm150_trim ao_bmm150_trim;
 
-#define AO_BMX160_SPI_SPEED    ao_spi_speed(10000000)
+#define AO_BMX160_SPI_SPEED    ao_spi_speed(AO_BMX160_SPI_BUS, 10000000)
 
 #define ao_bmx160_spi_get()    ao_spi_get(AO_BMX160_SPI_BUS, AO_BMX160_SPI_SPEED)
 #define ao_bmx160_spi_put()    ao_spi_put(AO_BMX160_SPI_BUS)
index 133f98036511735474d34a7079c67f74aee6a0a5..fe3c24c6adc5d59e59ebec32334f5ec53312556c 100644 (file)
@@ -42,7 +42,7 @@ extern const uint32_t ao_radio_cal;
 
 #define FOSC   32000000
 
-#define AO_CC1120_SPI_SPEED    ao_spi_speed(6100000)   /* 6.1MHz max with 32MHz osc */
+#define AO_CC1120_SPI_SPEED    ao_spi_speed(AO_CC1120_SPI_BUS, 6100000)        /* 6.1MHz max with 32MHz osc */
 
 #define ao_radio_try_select(task_id)   ao_spi_try_get_mask(AO_CC1120_SPI_CS_PORT,(1 << AO_CC1120_SPI_CS_PIN),AO_CC1120_SPI_BUS,AO_CC1120_SPI_SPEED, task_id)
 #define ao_radio_select()      ao_spi_get_mask(AO_CC1120_SPI_CS_PORT,(1 << AO_CC1120_SPI_CS_PIN),AO_CC1120_SPI_BUS,AO_CC1120_SPI_SPEED)
index 65ab576712043c84a49290af143dbf4d9212c66c..606a18049fa260686edda99602dfee906d9ca21d 100644 (file)
@@ -39,7 +39,7 @@ static uint8_t ao_radio_abort;                /* radio operation should abort */
 
 #define FOSC   26000000
 
-#define AO_CC115L_SPI_SPEED    ao_spi_speed(6500000)   /* for back-to-back access */
+#define AO_CC115L_SPI_SPEED    ao_spi_speed(AO_CC115L_SPI_BUS, 6500000)        /* for back-to-back access */
 
 #define ao_radio_select()      ao_spi_get_mask(AO_CC115L_SPI_CS_PORT,(1 << AO_CC115L_SPI_CS_PIN),AO_CC115L_SPI_BUS,AO_CC115L_SPI_SPEED)
 #define ao_radio_deselect()    ao_spi_put_mask(AO_CC115L_SPI_CS_PORT,(1 << AO_CC115L_SPI_CS_PIN),AO_CC115L_SPI_BUS)
index b295d054096bcf6c299486d2814e8cde39d5a9b2..ed1d298e1b4a8c100950da114c7ab45ed8abbce0 100644 (file)
@@ -53,7 +53,7 @@ extern const uint32_t ao_radio_cal;
 #define FOSC   40000000
 #endif
 
-#define AO_CC1200_SPI_SPEED    ao_spi_speed(7700000)   /* 7.7MHz max for extended memory reads */
+#define AO_CC1200_SPI_SPEED    ao_spi_speed(AO_CC1200_SPI_BUS, 7700000)        /* 7.7MHz max for extended memory reads */
 
 #define ao_radio_select()      ao_spi_get_mask(AO_CC1200_SPI_CS_PORT,(1 << AO_CC1200_SPI_CS_PIN),AO_CC1200_SPI_BUS,AO_CC1200_SPI_SPEED)
 #define ao_radio_deselect()    ao_spi_put_mask(AO_CC1200_SPI_CS_PORT,(1 << AO_CC1200_SPI_CS_PIN),AO_CC1200_SPI_BUS)
index 2315b63f43d5a87ad91ea095386da5d838f4e283..bda7805f30219c8cbd57bf22299e2c26bfa82b1f 100644 (file)
@@ -28,7 +28,7 @@
 #error HAS_COMPANION not set in ao_companion.c
 #endif
 
-#define AO_COMPANION_SPI_SPEED ao_spi_speed(200000)
+#define AO_COMPANION_SPI_SPEED ao_spi_speed(AO_COMPANION_SPI_BUS, 200000)
 
 #define COMPANION_SELECT()     do {                    \
                ao_spi_get_bit(AO_COMPANION_CS_PORT,    \
index accf943a3fbe6e079ad0825b21f53d08823828fb..4be91e13b7599cedd73f7778134d7187d51a7e1d 100644 (file)
@@ -101,7 +101,7 @@ static uint8_t ao_m25_mutex;
 
 static uint8_t ao_m25_instruction[4];
 
-#define AO_M25_SPI_SPEED       ao_spi_speed(10000000)  /* this seems like a reasonable minimum speed to require */
+#define AO_M25_SPI_SPEED       ao_spi_speed(AO_M25_SPI_BUS, 10000000)  /* this seems like a reasonable minimum speed to require */
 
 #define M25_SELECT(cs)         ao_spi_get_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS,AO_M25_SPI_SPEED)
 #define M25_DESELECT(cs)       ao_spi_put_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS)
index 3fd8e064602bc092f00319c2a3878c3b65f0fc80..f79ea2d75f24ac445911a3a80db58dad55225398 100644 (file)
@@ -30,7 +30,7 @@
 #define PRINTD(l,...) 
 #endif
 
-#define AO_MMA655X_SPI_SPEED   ao_spi_speed(8333333)   /* 120ns clock period */
+#define AO_MMA655X_SPI_SPEED   ao_spi_speed(AO_MMA655X_SPI_INDEX, 8333333)     /* 120ns clock period */
 
 static void
 ao_mma655x_start(void) {
index d086fc3e5941aa941ad3a79b53205b6016c6cde9..02df7a2661e82149403f16215db53101c0c2ef3b 100644 (file)
@@ -127,7 +127,7 @@ ao_mmc5983_raw(struct ao_mmc5983_raw *raw)
 #endif
 
 #else
-#define AO_MMC5983_SPI_SPEED   ao_spi_speed(2000000)
+#define AO_MMC5983_SPI_SPEED   ao_spi_speed(AO_MMC5983_SPI_INDEX, 2000000)
 
 static void
 ao_mmc5983_start(void) {
index c33032af7e5dc017e363b19171a585eb62e0f76a..e5594a662c6dfcb62f6d11e0acd1a78565bd2ce1 100644 (file)
@@ -32,7 +32,7 @@ static uint8_t        ao_mpu6000_configured;
 
 #if AO_MPU6000_SPI
 
-#define AO_MPU6000_SPI_SPEED   ao_spi_speed(1000000)   /* 1Mhz for all register access */
+#define AO_MPU6000_SPI_SPEED   ao_spi_speed(AO_MPU6000_SPI_BUS, 1000000)       /* 1Mhz for all register access */
 
 #define ao_mpu6000_spi_get()   ao_spi_get(AO_MPU6000_SPI_BUS, AO_MPU6000_SPI_SPEED)
 #define ao_mpu6000_spi_put()   ao_spi_put(AO_MPU6000_SPI_BUS)
index a77abf98dfe7bcfa2d6ce3b8267b1571dd7d642b..63d8d6d7fe31ffbc32dc8c786dc349df9bfee413 100644 (file)
@@ -35,7 +35,7 @@ static uint8_t        ao_mpu9250_configured;
 #if AO_MPU9250_SPI
 
 #ifndef AO_MPU9250_SPI_SPEED
-#define AO_MPU9250_SPI_SPEED   ao_spi_speed(1000000)   /* 1MHz max SCLK */
+#define AO_MPU9250_SPI_SPEED   ao_spi_speed(AO_MPU9250_SPI_BUS, 1000000)       /* 1MHz max SCLK */
 #endif
 
 #define ao_mpu9250_spi_get()   ao_spi_get(AO_MPU9250_SPI_BUS, AO_MPU9250_SPI_SPEED)
index dce7c0e6a3c5a5de8af7ccf570ee6b43c0c5f9b9..4a9802d7190d4c06eaeeb6e128af96f5e3daceb8 100644 (file)
@@ -25,7 +25,7 @@
 struct ao_ms5607_prom  ao_ms5607_prom;
 static uint8_t         ms5607_configured;
 
-#define AO_MS5607_SPI_SPEED    ao_spi_speed(20000000)
+#define AO_MS5607_SPI_SPEED    ao_spi_speed(AO_MS5607_SPI_INDEX, 20000000)
 
 static void
 ao_ms5607_start(void) {
index e1340f8ac819d7d47689d816df24ee7dd2423169..f7ddfa3d2656914cc4092a810d2540513e657bf2 100644 (file)
@@ -47,7 +47,7 @@
 #define ST7565_BOOSTER_RATIO_SET               0xf8
 #define ST7565_NOP                             0xe3
 
-#define AO_ST7565_SPI_SPEED                    ao_spi_speed(20000000)
+#define AO_ST7565_SPI_SPEED                    ao_spi_speed(AO_ST7565_SPI_BUS, 10000000)
 
 void
 ao_st7565_update(struct ao_bitmap *bitmap);
index 59f3a7eee4983a94fee99c4bf19d716725010811..05bb97d9cb3a8cbf9c7fe314f512a095fede33f5 100644 (file)
@@ -116,8 +116,9 @@ ao_serial_init(void);
 #define _AO_SPI_SPEED_62500Hz          768
 
 static inline uint32_t
-ao_spi_speed(uint32_t hz)
+ao_spi_speed(int index, uint32_t hz)
 {
+       (void) index;
        if (hz >= 4000000) return _AO_SPI_SPEED_4MHz;
        if (hz >= 2000000) return _AO_SPI_SPEED_2MHz;
        if (hz >= 1000000) return _AO_SPI_SPEED_1MHz;
index 32670b45ca1897bc1f6a3016a4fd9c1cf4902930..754ca3b51c3c84ecc4c8a6e2079ea64c8c8f54ba 100644 (file)
@@ -282,10 +282,11 @@ ao_spi_put_bit(struct samd21_port *port, uint8_t bit, uint16_t spi_index)
 }
 
 static inline uint8_t
-ao_spi_speed(uint32_t hz)
+ao_spi_speed(int index, uint32_t hz)
 {
        int32_t baud = (int32_t) (AO_SYSCLK / (2 * hz)) - 1;
 
+       (void) index;
        if (baud < 1)
                baud = 1;
        if (baud > 255)
index 719ea01dd454230005de6af442be839e8d5b9a24..a829aa132f408aab31a5ea6ba0fe3b2af39efe34 100644 (file)
@@ -19,7 +19,7 @@
 #define SNEK_CS_PORT   (&samd21_port_a)
 #define SNEK_CS_PIN    (11)
 #define SNEK_SPI_INDEX AO_SPI_0_PA08_PA09_PA10
-#define SNEK_SPI_SPEED ao_spi_speed(1000000)
+#define SNEK_SPI_SPEED ao_spi_speed(SNEK_SPI_INDEX, 1000000)
 
 static const uint8_t spi_test[] = {
        0x55,
index 9922513be007bf005c19c9d9d1cd5021e3266300..0f2f36a6e40aa0a6a64b147c02508ade2d2e380c 100644 (file)
@@ -34,8 +34,9 @@
 #define _AO_SPI_SPEED_62500Hz  STM_SPI_CR1_BR_PCLK_256
 
 static inline uint32_t
-ao_spi_speed(uint32_t hz)
+ao_spi_speed(int index, uint32_t hz)
 {
+       (void) index;
        if (hz >= 4000000) return _AO_SPI_SPEED_4MHz;
        if (hz >= 2000000) return _AO_SPI_SPEED_2MHz;
        if (hz >= 1000000) return _AO_SPI_SPEED_1MHz;
index 385fe0e32b192d6c815ec0fd32bdb96f8d69abe0..5f0f07dea9ed0d7a6ce3ce2a67170beebf55c7d9 100644 (file)
@@ -36,8 +36,9 @@
 /* Companion bus wants something no faster than 200kHz */
 
 static inline uint32_t
-ao_spi_speed(uint32_t hz)
+ao_spi_speed(int index, uint32_t hz)
 {
+       (void) index;
        if (hz >= 4000000) return _AO_SPI_SPEED_4MHz;
        if (hz >= 2000000) return _AO_SPI_SPEED_2MHz;
        if (hz >= 1000000) return _AO_SPI_SPEED_1MHz;
index 1a9f28e30ef0b68d4f7ac69fe846e16dea915bb5..953a0c00c2a69ad107124a91b337bb04ed05256e 100644 (file)
@@ -36,8 +36,9 @@
 #define _AO_SPI_SPEED_187500Hz STM_SPI_CR1_BR_PCLK_256
 
 static inline uint32_t
-ao_spi_speed(uint32_t hz)
+ao_spi_speed(int index, uint32_t hz)
 {
+       (void) index;
        if (hz >=24000000) return _AO_SPI_SPEED_24MHz;
        if (hz >=12000000) return _AO_SPI_SPEED_12MHz;
        if (hz >= 6000000) return _AO_SPI_SPEED_6MHz;