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

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rcc.c')
-rw-r--r--Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rcc.c85
1 files changed, 83 insertions, 2 deletions
diff --git a/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rcc.c b/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rcc.c
index 1a964c467..23aa838de 100644
--- a/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rcc.c
+++ b/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rcc.c
@@ -72,6 +72,9 @@
#define IS_LL_RCC_ADC_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_ADC_CLKSOURCE))
+#if defined(SPI_I2S_SUPPORT)
+#define IS_LL_RCC_I2S_CLKSOURCE(__VALUE__) ((__VALUE__) == LL_RCC_I2S_CLKSOURCE)
+#endif
/**
* @}
*/
@@ -81,7 +84,9 @@
* @{
*/
uint32_t RCC_PLL_GetFreqDomain_SYS(void);
+#if defined(SAI1)
uint32_t RCC_PLL_GetFreqDomain_SAI(void);
+#endif
uint32_t RCC_PLL_GetFreqDomain_ADC(void);
uint32_t RCC_PLL_GetFreqDomain_48M(void);
@@ -91,6 +96,10 @@ uint32_t RCC_PLLSAI1_GetFreqDomain_48M(void);
uint32_t RCC_PLLSAI1_GetFreqDomain_ADC(void);
#endif
+#if defined(SPI_I2S_SUPPORT)
+uint32_t RCC_PLL_GetFreqDomain_I2S(void);
+#endif
+
uint32_t RCC_GetSystemClockFreq(void);
@@ -349,7 +358,6 @@ uint32_t LL_RCC_GetSMPSClockFreq(void)
return smps_frequency;
}
-
#endif
/**
@@ -616,12 +624,15 @@ uint32_t LL_RCC_GetSAIClockFreq(uint32_t SAIxSource)
}
break;
+#if defined(SAI1)
case LL_RCC_SAI1_CLKSOURCE_PLLSAI1: /* PLLSAI1 clock used as SAI1 clock source */
if (LL_RCC_PLLSAI1_IsReady() == 1U)
{
sai_frequency = RCC_PLLSAI1_GetFreqDomain_SAI();
}
break;
+#endif
+
case LL_RCC_SAI1_CLKSOURCE_PLL: /* PLL clock used as SAI1 clock source */
if (LL_RCC_PLL_IsReady() == 1U)
{
@@ -775,7 +786,7 @@ uint32_t LL_RCC_GetADCClockFreq(uint32_t ADCxSource)
adc_frequency = RCC_GetSystemClockFreq();
break;
- case LL_RCC_ADC_CLKSOURCE_PLL: /* PLL clock used as USB clock source */
+ case LL_RCC_ADC_CLKSOURCE_PLL: /* PLL clock used as ADC clock source */
if (LL_RCC_PLL_IsReady() == 1U)
{
adc_frequency = RCC_PLL_GetFreqDomain_ADC();
@@ -874,6 +885,46 @@ uint32_t LL_RCC_GetRFWKPClockFreq(void)
return rfwkp_frequency;
}
+#if defined(SPI_I2S_SUPPORT)
+/**
+ * @brief Return I2Sx clock frequency
+ * @param I2SxSource This parameter can be one of the following values:
+ * @arg @ref LL_RCC_I2S_CLKSOURCE
+ * @retval I2S clock frequency (in Hz)
+ * - @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that oscillator (HSI) or PLLs (PLL) is not ready
+ */
+uint32_t LL_RCC_GetI2SClockFreq(uint32_t I2SxSource)
+{
+ uint32_t i2s_frequency = LL_RCC_PERIPH_FREQUENCY_NO;
+
+ /* Check parameter */
+ assert_param(IS_LL_RCC_I2S_CLKSOURCE(I2SxSource));
+
+ /* I2SCLK clock frequency */
+ switch (LL_RCC_GetI2SClockSource(I2SxSource))
+ {
+ case LL_RCC_I2S_CLKSOURCE_PLL: /* I2S2 Clock is PLL"P" */
+ if (LL_RCC_PLL_IsReady() == 1U)
+ {
+ i2s_frequency = RCC_PLL_GetFreqDomain_I2S();
+ }
+ break;
+
+ case LL_RCC_I2S_CLKSOURCE_PIN: /* I2S2 Clock is External clock */
+ i2s_frequency = EXTERNAL_CLOCK_VALUE;
+ break;
+
+ case LL_RCC_I2S_CLKSOURCE_HSI: /* HSI clock used as I2S clock source */
+ default:
+ if (LL_RCC_HSI_IsReady() == 1U)
+ {
+ i2s_frequency = HSI_VALUE;
+ }
+ break;
+ }
+ return i2s_frequency;
+}
+#endif
/**
* @}
@@ -1312,6 +1363,36 @@ uint32_t RCC_PLLSAI1_GetFreqDomain_ADC(void)
}
#endif
+#if defined(SPI_I2S_SUPPORT)
+/**
+ * @brief Return PLL clock frequency used for I2S domain
+ * @retval PLL clock frequency (in Hz)
+ */
+uint32_t RCC_PLL_GetFreqDomain_I2S(void)
+{
+ uint32_t pllinputfreq, pllsource;
+
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN
+ I2S Domain clock = PLL_VCO / PLLP
+ */
+ pllsource = LL_RCC_PLL_GetMainSource();
+
+ switch (pllsource)
+ {
+ case LL_RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
+ pllinputfreq = HSE_VALUE;
+ break;
+
+ case LL_RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
+ default:
+ pllinputfreq = HSI_VALUE;
+ break;
+ }
+ return __LL_RCC_CALC_PLLCLK_I2S_FREQ(pllinputfreq, LL_RCC_PLL_GetDivider(),
+ LL_RCC_PLL_GetN(), LL_RCC_PLL_GetP());
+}
+#endif
+
/**
* @}
*/