aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-12-30 22:38:31 -0500
committerKevin O'Connor <kevin@koconnor.net>2019-01-07 19:22:14 -0500
commit6e18af70574064ca52b238c0dd5bfd551133f06b (patch)
tree8151a62e52f6a0077326af9ac62e779e98f90380 /src
parentc8e04274adf55a00397c60d926601dc15bc07ae8 (diff)
downloadkutter-6e18af70574064ca52b238c0dd5bfd551133f06b.tar.gz
kutter-6e18af70574064ca52b238c0dd5bfd551133f06b.tar.xz
kutter-6e18af70574064ca52b238c0dd5bfd551133f06b.zip
stm32f1: It's only necessary to program the CR1 register during SPI init
Only set the CR1 register during spi_prepare(). Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src')
-rw-r--r--src/stm32f1/gpio.h2
-rw-r--r--src/stm32f1/main.c2
-rw-r--r--src/stm32f1/spi.c16
3 files changed, 9 insertions, 11 deletions
diff --git a/src/stm32f1/gpio.h b/src/stm32f1/gpio.h
index a4a3c121..8aba2f85 100644
--- a/src/stm32f1/gpio.h
+++ b/src/stm32f1/gpio.h
@@ -33,7 +33,7 @@ uint16_t gpio_adc_read(struct gpio_adc g);
void gpio_adc_cancel_sample(struct gpio_adc g);
struct spi_config {
- SPI_TypeDef config;
+ uint32_t spi_cr1;
};
struct spi_config spi_setup(uint32_t bus, uint8_t mode, uint32_t rate);
void spi_prepare(struct spi_config config);
diff --git a/src/stm32f1/main.c b/src/stm32f1/main.c
index b91d4dd0..e7a0cd91 100644
--- a/src/stm32f1/main.c
+++ b/src/stm32f1/main.c
@@ -112,8 +112,6 @@ void adc_config(void)
void spi_config(void)
{
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2);
- LL_SPI_SetNSSMode(SPI2, LL_SPI_NSS_SOFT);
- LL_SPI_SetMode(SPI2, LL_SPI_MODE_MASTER);
}
void io_config(void)
diff --git a/src/stm32f1/spi.c b/src/stm32f1/spi.c
index a90a030a..5ce81fb9 100644
--- a/src/stm32f1/spi.c
+++ b/src/stm32f1/spi.c
@@ -70,24 +70,24 @@ static void spi_init_pins(void)
struct spi_config
spi_setup(uint32_t bus, uint8_t mode, uint32_t rate)
{
- struct spi_config config;
- config.config = *SPI2;
-
if (bus > 0 || !rate)
shutdown("Invalid spi_setup parameters");
spi_init_pins();
- spi_set_mode(&config.config, mode);
- spi_set_baudrate(&config.config, rate);
+ SPI_TypeDef spi_hw = { };
+ LL_SPI_SetNSSMode(&spi_hw, LL_SPI_NSS_SOFT);
+ LL_SPI_SetMode(&spi_hw, LL_SPI_MODE_MASTER);
+ spi_set_mode(&spi_hw, mode);
+ spi_set_baudrate(&spi_hw, rate);
+ LL_SPI_Enable(&spi_hw);
- return config;
+ return (struct spi_config){ .spi_cr1 = spi_hw.CR1 };
}
void
spi_prepare(struct spi_config config)
{
- *SPI2 = config.config;
- LL_SPI_Enable(SPI2);
+ SPI2->CR1 = config.spi_cr1;
}
void