altos: Crank fast SPI on STM to 8MHz
[fw/altos] / src / stm / ao_spi_stm.c
index 5b823e3e63648a136da3145cb7628b4c0538cba8..7b4af96443f28af949669e2d1cf18c2a49d2db49 100644 (file)
@@ -276,19 +276,19 @@ ao_spi_disable_index(uint8_t spi_index)
        case STM_SPI_INDEX(1):
                switch (spi_index) {
                case AO_SPI_1_PA5_PA6_PA7:
-                       stm_gpio_set(&stm_gpioa, 5, 0);
+                       stm_gpio_set(&stm_gpioa, 5, 1);
                        stm_moder_set(&stm_gpioa, 5, STM_MODER_OUTPUT);
                        stm_moder_set(&stm_gpioa, 6, STM_MODER_INPUT);
                        stm_moder_set(&stm_gpioa, 7, STM_MODER_OUTPUT);
                        break;
                case AO_SPI_1_PB3_PB4_PB5:
-                       stm_gpio_set(&stm_gpiob, 3, 0);
+                       stm_gpio_set(&stm_gpiob, 3, 1);
                        stm_moder_set(&stm_gpiob, 3, STM_MODER_OUTPUT);
                        stm_moder_set(&stm_gpiob, 4, STM_MODER_INPUT);
                        stm_moder_set(&stm_gpiob, 5, STM_MODER_OUTPUT);
                        break;
                case AO_SPI_1_PE13_PE14_PE15:
-                       stm_gpio_set(&stm_gpioe, 13, 0);
+                       stm_gpio_set(&stm_gpioe, 13, 1);
                        stm_moder_set(&stm_gpioe, 13, STM_MODER_OUTPUT);
                        stm_moder_set(&stm_gpioe, 14, STM_MODER_INPUT);
                        stm_moder_set(&stm_gpioe, 15, STM_MODER_OUTPUT);
@@ -298,13 +298,13 @@ ao_spi_disable_index(uint8_t spi_index)
        case STM_SPI_INDEX(2):
                switch (spi_index) {
                case AO_SPI_2_PB13_PB14_PB15:
-                       stm_gpio_set(&stm_gpiob, 13, 0);
+                       stm_gpio_set(&stm_gpiob, 13, 1);
                        stm_moder_set(&stm_gpiob, 13, STM_MODER_OUTPUT);
                        stm_moder_set(&stm_gpiob, 14, STM_MODER_INPUT);
                        stm_moder_set(&stm_gpiob, 15, STM_MODER_OUTPUT);
                        break;
                case AO_SPI_2_PD1_PD3_PD4:
-                       stm_gpio_set(&stm_gpiod, 1, 0);
+                       stm_gpio_set(&stm_gpiod, 1, 1);
                        stm_moder_set(&stm_gpiod, 1, STM_MODER_OUTPUT);
                        stm_moder_set(&stm_gpiod, 3, STM_MODER_INPUT);
                        stm_moder_set(&stm_gpiod, 4, STM_MODER_OUTPUT);
@@ -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;