X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstmf0%2Fao_spi_stm.c;h=d83f06580380014fb0a09583ee276e9b19dc5b49;hb=7b1f4177d42e5e951a7db4289c847d355a785c2a;hp=0448ad8c375407167b1eeff93e04597a6dd07f75;hpb=1667cb8e8b702b05fc3ec39ee49029885df64a4a;p=fw%2Faltos diff --git a/src/stmf0/ao_spi_stm.c b/src/stmf0/ao_spi_stm.c index 0448ad8c..d83f0658 100644 --- a/src/stmf0/ao_spi_stm.c +++ b/src/stmf0/ao_spi_stm.c @@ -412,6 +412,18 @@ ao_spi_config(uint8_t spi_index, uint32_t speed) uint8_t id = AO_SPI_INDEX(spi_index); struct stm_spi *stm_spi = ao_spi_stm_info[id].stm_spi; + switch (id) { +#if SPI_1_POWER_MANAGE + case 0: + stm_rcc.apb2enr |= (1 << STM_RCC_APB2ENR_SPI1EN); + break; +#endif +#if SPI_2_POWER_MANAGE + case 1: + stm_rcc.apb1enr |= (1 << STM_RCC_APB1ENR_SPI2EN); + break; +#endif + } if (spi_index != ao_spi_index[id]) { /* Disable old config @@ -469,6 +481,18 @@ ao_spi_put(uint8_t spi_index) struct stm_spi *stm_spi = ao_spi_stm_info[id].stm_spi; stm_spi->cr1 = 0; + switch (id) { +#if SPI_1_POWER_MANAGE + case 0: + stm_rcc.apb2enr &= ~(1 << STM_RCC_APB2ENR_SPI1EN); + break; +#endif +#if SPI_2_POWER_MANAGE + case 1: + stm_rcc.apb1enr &= ~(1 << STM_RCC_APB1ENR_SPI2EN); + break; +#endif + } ao_mutex_put(&ao_spi_mutex[id]); } @@ -536,12 +560,18 @@ void ao_spi_init(void) { #if HAS_SPI_1 +#ifndef SPI_1_PA5_PA6_PA7 +#error SPI_1_PA5_PA6_PA7 undefined +#endif # if SPI_1_PA5_PA6_PA7 stm_rcc.ahbenr |= (1 << STM_RCC_AHBENR_IOPAEN); 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 +# ifndef SPI_1_PB3_PB4_PB5 +# error SPI_1_PB3_PB4_PB5 undefined +# endif # if SPI_1_PB3_PB4_PB5 stm_rcc.ahbenr |= (1 << STM_RCC_AHBENR_IOPBEN); stm_ospeedr_set(&stm_gpiob, 3, SPI_1_OSPEEDR);