Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/thirdpin/libopencm3.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Anderson <mda2376@gmail.com>2018-03-17 22:31:27 +0300
committerKarl Palsson <karlp@tweak.net.au>2018-07-04 01:30:24 +0300
commit0d5e51a8a7b24c8bc93ca849eb670bc55b02e091 (patch)
tree58eae8d9e0ba0bcf79081751ab20b023020a5bb9
parent68fce5a0ab650fcd6a9062127845b9d69042570e (diff)
STM32F0: Add RCC API for I2C1 clock source
* Providing API to set/clear RCC_CFGR3_I2C1SW on STM32F0, duplicated from STM32F3 applies only to I2C1.
-rw-r--r--include/libopencm3/stm32/f0/rcc.h3
-rw-r--r--lib/stm32/f0/rcc.c20
2 files changed, 23 insertions, 0 deletions
diff --git a/include/libopencm3/stm32/f0/rcc.h b/include/libopencm3/stm32/f0/rcc.h
index 5872c7a2..ab066ea7 100644
--- a/include/libopencm3/stm32/f0/rcc.h
+++ b/include/libopencm3/stm32/f0/rcc.h
@@ -533,6 +533,9 @@ void rcc_set_ppre(uint32_t ppre);
void rcc_set_hpre(uint32_t hpre);
void rcc_set_prediv(uint32_t prediv);
enum rcc_osc rcc_system_clock_source(void);
+void rcc_set_i2c_clock_hsi(uint32_t i2c);
+void rcc_set_i2c_clock_sysclk(uint32_t i2c);
+uint32_t rcc_get_i2c_clocks(void);
enum rcc_osc rcc_usb_clock_source(void);
void rcc_clock_setup_in_hse_8mhz_out_48mhz(void);
void rcc_clock_setup_in_hsi_out_48mhz(void);
diff --git a/lib/stm32/f0/rcc.c b/lib/stm32/f0/rcc.c
index fa85aeaf..d4b79e5d 100644
--- a/lib/stm32/f0/rcc.c
+++ b/lib/stm32/f0/rcc.c
@@ -39,6 +39,7 @@
#include <libopencm3/cm3/assert.h>
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/flash.h>
+#include <libopencm3/stm32/i2c.h>
/* Set the default clock frequencies */
uint32_t rcc_ahb_frequency = 8000000; /* 8MHz after reset */
@@ -520,6 +521,25 @@ enum rcc_osc rcc_system_clock_source(void)
cm3_assert_not_reached();
}
+void rcc_set_i2c_clock_hsi(uint32_t i2c)
+{
+ if (i2c == I2C1) {
+ RCC_CFGR3 &= ~RCC_CFGR3_I2C1SW;
+ }
+}
+
+void rcc_set_i2c_clock_sysclk(uint32_t i2c)
+{
+ if (i2c == I2C1) {
+ RCC_CFGR3 |= RCC_CFGR3_I2C1SW;
+ }
+}
+
+uint32_t rcc_get_i2c_clocks(void)
+{
+ return RCC_CFGR3 & RCC_CFGR3_I2C1SW;
+}
+
/*---------------------------------------------------------------------------*/
/** @brief RCC Get the USB Clock Source.
*