altos: Set STM GPIO output speed for SPI pins correctly
authorKeith Packard <keithp@keithp.com>
Mon, 14 Jan 2013 04:48:47 +0000 (20:48 -0800)
committerKeith Packard <keithp@keithp.com>
Mon, 14 Jan 2013 04:54:14 +0000 (20:54 -0800)
The GPIO pin settings affect the output impedence, and hence the
maximum speed for SPI. Cranking these to suitable values allows SPI to
run at full speed.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/megadongle-v0.1/ao_pins.h
src/megametrum-v0.1/ao_pins.h
src/stm-demo/ao_pins.h
src/stm/ao_spi_stm.c
src/telelco-v0.1/ao_pins.h
src/telescience-v0.2/ao_pins.h

index c766a48c6d24b46d91fb698a6d4bb0d6a309042c..d460a49095b9a38fdd3fd93cb05cdbf122f91f37 100644 (file)
@@ -78,6 +78,7 @@
 #define HAS_SPI_2              1
 #define SPI_2_PB13_PB14_PB15   1       /* Flash, Companion */
 #define SPI_2_PD1_PD3_PD4      0
+#define SPI_2_OSPEEDR          STM_OSPEEDR_10MHz
 
 #define SPI_2_PORT             (&stm_gpiob)
 #define SPI_2_SCK_PIN          13
index 64da41a915304f618b6aa0547969701d0dcd2b55..4c645871fe758d6f6159da4aa49e38ef2823e936 100644 (file)
 #define SPI_1_PA5_PA6_PA7      1       /* Barometer */
 #define SPI_1_PB3_PB4_PB5      0
 #define SPI_1_PE13_PE14_PE15   1       /* Accelerometer */
+#define SPI_1_OSPEEDR          STM_OSPEEDR_10MHz
 
 #define HAS_SPI_2              1
 #define SPI_2_PB13_PB14_PB15   1       /* Flash, Companion */
 #define SPI_2_PD1_PD3_PD4      0
+#define SPI_2_OSPEEDR          STM_OSPEEDR_10MHz
 
 #define SPI_2_PORT             (&stm_gpiob)
 #define SPI_2_SCK_PIN          13
index c9c7446e4e21d489aa1ff80fe25a9c2e1fce3779..07b4a19d919a78c989bd2d48bc53307809cdd463 100644 (file)
@@ -60,6 +60,7 @@
 
 #define HAS_SPI_1              1
 #define SPI_1_PB3_PB4_PB5      1
+#define SPI_1_OSPEEDR          STM_OSPEEDR_10MHz
 
 #define HAS_SPI_2              0
 
index 599d7ee09981694ac4dabea3e695028ec30718be..7b4af96443f28af949669e2d1cf18c2a49d2db49 100644 (file)
@@ -425,12 +425,21 @@ ao_spi_init(void)
 #if HAS_SPI_1
 # if SPI_1_PA5_PA6_PA7
        stm_rcc.ahbenr |= (1 << STM_RCC_AHBENR_GPIOAEN);
+       stm_ospeedr_set(&stm_gpioa, 5, SPI_1_OSPEEDR);
+       stm_ospeedr_set(&stm_gpioa, 6, SPI_1_OSPEEDR);
+       stm_ospeedr_set(&stm_gpioa, 7, SPI_1_OSPEEDR);
 # endif
 # if SPI_1_PB3_PB4_PB5
        stm_rcc.ahbenr |= (1 << STM_RCC_AHBENR_GPIOBEN);
+       stm_ospeedr_set(&stm_gpiob, 3, SPI_1_OSPEEDR);
+       stm_ospeedr_set(&stm_gpiob, 4, SPI_1_OSPEEDR);
+       stm_ospeedr_set(&stm_gpiob, 5, SPI_1_OSPEEDR);
 # endif
 # if SPI_1_PE13_PE14_PE15
        stm_rcc.ahbenr |= (1 << STM_RCC_AHBENR_GPIOEEN);
+       stm_ospeedr_set(&stm_gpioe, 13, SPI_1_OSPEEDR);
+       stm_ospeedr_set(&stm_gpioe, 14, SPI_1_OSPEEDR);
+       stm_ospeedr_set(&stm_gpioe, 15, SPI_1_OSPEEDR);
 # endif
        stm_rcc.apb2enr |= (1 << STM_RCC_APB2ENR_SPI1EN);
        ao_spi_index[0] = AO_SPI_CONFIG_NONE;
@@ -440,9 +449,15 @@ ao_spi_init(void)
 #if HAS_SPI_2
 # if SPI_2_PB13_PB14_PB15
        stm_rcc.ahbenr |= (1 << STM_RCC_AHBENR_GPIOBEN);
+       stm_ospeedr_set(&stm_gpiob, 13, SPI_2_OSPEEDR);
+       stm_ospeedr_set(&stm_gpiob, 14, SPI_2_OSPEEDR);
+       stm_ospeedr_set(&stm_gpiob, 15, SPI_2_OSPEEDR);
 # endif
 # if SPI_2_PD1_PD3_PD4
        stm_rcc.ahbenr |= (1 << STM_RCC_AHBENR_GPIODEN);
+       stm_ospeedr_set(&stm_gpiod, 1, SPI_2_OSPEEDR);
+       stm_ospeedr_set(&stm_gpiod, 3, SPI_2_OSPEEDR);
+       stm_ospeedr_set(&stm_gpiod, 4, SPI_2_OSPEEDR);
 # endif
        stm_rcc.apb1enr |= (1 << STM_RCC_APB1ENR_SPI2EN);
        ao_spi_index[1] = AO_SPI_CONFIG_NONE;
index 60cf018f4f315e0efc1e06ce52e01ef8a91734e4..970f9bd1799d678060a79ff40ae347c262801b8f 100644 (file)
 #define HAS_TELEMETRY          0
 #define HAS_AES                        1
 
-#define HAS_SPI_1              1
-#define SPI_1_PA5_PA6_PA7      1
+#define HAS_SPI_1              0
+#define SPI_1_PA5_PA6_PA7      0
 #define SPI_1_PB3_PB4_PB5      0
 #define SPI_1_PE13_PE14_PE15   0
 
-#define HAS_SPI_2              1
+#define HAS_SPI_2              1       /* CC1111 */
 #define SPI_2_PB13_PB14_PB15   1
 #define SPI_2_PD1_PD3_PD4      0
 #define SPI_2_GPIO             (&stm_gpiob)
 #define SPI_2_SCK              13
 #define SPI_2_MISO             14
 #define SPI_2_MOSI             15
+#define SPI_2_OSPEEDR          STM_OSPEEDR_10MHz
 
 #define HAS_I2C_1              0
 
index cb86fcb6aad2d3c70412a61be379a1dbea9ed132..7b97450636e81f7cece8600e76c26c12eaa2ddc4 100644 (file)
 #define HAS_TELEMETRY          0
 #define PACKET_HAS_SLAVE       0
 
-#define HAS_SPI_1              1
-#define SPI_1_PA5_PA6_PA7      1
+#define HAS_SPI_1              0
+#define HAS_SPI_SLAVE_1                1
+#define SPI_1_PA5_PA6_PA7      1       
 #define SPI_1_PB3_PB4_PB5      0
 #define SPI_1_PE13_PE14_PE15   0
+#define SPI_1_OSPEEDR          STM_OSPEEDR_10MHz
 
 #define HAS_SPI_2              1
 #define SPI_2_PB13_PB14_PB15   1
 #define SPI_2_PD1_PD3_PD4      0
+#define SPI_2_OSPEEDR          STM_OSPEEDR_10MHz
 
 #define SPI_2_PORT             (&stm_gpiob)
 #define SPI_2_SCK_PIN          13