summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHierophect <hierophect@gmail.com>2019-09-30 11:35:40 -0400
committerHierophect <hierophect@gmail.com>2019-09-30 11:35:40 -0400
commit56eb9666ead5a6d59e1bbc7a6850d9420cd8385b (patch)
tree06d74eed1c20ba7df1b120a30c01555265417df8
parenta475b667b58c6baf1f1b2f64e2691d97717690db (diff)
Implement never-reset, fix F412
-rw-r--r--ports/stm32f4/common-hal/busio/SPI.c26
-rw-r--r--ports/stm32f4/peripherals/stm32f4/stm32f412zx/periph.c1
2 files changed, 24 insertions, 3 deletions
diff --git a/ports/stm32f4/common-hal/busio/SPI.c b/ports/stm32f4/common-hal/busio/SPI.c
index 12550e663..a13b3dfdb 100644
--- a/ports/stm32f4/common-hal/busio/SPI.c
+++ b/ports/stm32f4/common-hal/busio/SPI.c
@@ -37,31 +37,44 @@
#include "common-hal/microcontroller/Pin.h"
STATIC bool reserved_spi[6];
+STATIC bool never_reset_spi[6];
void spi_reset(void) {
#ifdef SPI1
+ if(!never_reset_spi[0]) {
reserved_spi[0] = false;
__HAL_RCC_SPI1_CLK_DISABLE();
+ }
#endif
#ifdef SPI2
+ if(!never_reset_spi[1]) {
reserved_spi[1] = false;
__HAL_RCC_SPI2_CLK_DISABLE();
+ }
#endif
#ifdef SPI3
+ if(!never_reset_spi[2]) {
reserved_spi[2] = false;
__HAL_RCC_SPI3_CLK_DISABLE();
+ }
#endif
#ifdef SPI4
+ if(!never_reset_spi[3]) {
reserved_spi[3] = false;
- __HAL_RCC_SPI4_CLK_DISABLE();
+ __HAL_RCC_SPI4_CLK_DISABLE();
+ }
#endif
#ifdef SPI5
+ if(!never_reset_spi[4]) {
reserved_spi[4] = false;
- __HAL_RCC_SPI5_CLK_DISABLE();
+ __HAL_RCC_SPI5_CLK_DISABLE();
+ }
#endif
#ifdef SPI6
+ if(!never_reset_spi[5]) {
reserved_spi[5] = false;
__HAL_RCC_SPI6_CLK_DISABLE();
+ }
#endif
}
@@ -198,6 +211,15 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
}
void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) {
+ for(size_t i = 0 ; i < MP_ARRAY_SIZE(mcu_spi_banks); i++) {
+ if (mcu_spi_banks[i] == self->handle.Instance) {
+ never_reset_spi[i] = true;
+ never_reset_pin_number(self->sck->pin->port, self->sck->pin->number);
+ never_reset_pin_number(self->mosi->pin->port, self->mosi->pin->number);
+ never_reset_pin_number(self->miso->pin->port, self->miso->pin->number);
+ break;
+ }
+ }
}
bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) {
diff --git a/ports/stm32f4/peripherals/stm32f4/stm32f412zx/periph.c b/ports/stm32f4/peripherals/stm32f4/stm32f412zx/periph.c
index 1f51b5b8d..ea94719ec 100644
--- a/ports/stm32f4/peripherals/stm32f4/stm32f412zx/periph.c
+++ b/ports/stm32f4/peripherals/stm32f4/stm32f412zx/periph.c
@@ -69,7 +69,6 @@ const mcu_spi_sck_obj_t mcu_spi_sck_list[15] = {
SPI(4, 5, &pin_PE02),
SPI(4, 5, &pin_PE12),
SPI(5, 6, &pin_PB00),
- SPI(5, 6, &pin_PB00),
SPI(5, 6, &pin_PE02),
SPI(5, 6, &pin_PE12)
};