Adding hal_ldd files from master
This commit is contained in:
parent
5114f073b6
commit
0f416078cc
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -114,9 +114,12 @@ static void hal_lld_backup_domain_init(void) {
|
|||
void hal_lld_init(void) {
|
||||
|
||||
/* Reset of all peripherals. AHB3 is not reseted because it could have
|
||||
been initialized in the board initialization file (board.c).*/
|
||||
been initialized in the board initialization file (board.c) and AHB2 is not
|
||||
present in STM32F410. */
|
||||
rccResetAHB1(~0);
|
||||
#if !defined(STM32F410xx)
|
||||
rccResetAHB2(~0);
|
||||
#endif
|
||||
rccResetAPB1(~RCC_APB1RSTR_PWRRST);
|
||||
rccResetAPB2(~0);
|
||||
|
||||
|
@ -147,7 +150,11 @@ void stm32_clock_init(void) {
|
|||
|
||||
#if !STM32_NO_INIT
|
||||
/* PWR clock enable.*/
|
||||
#if defined(HAL_USE_RTC) && defined(RCC_APB1ENR_RTCAPBEN)
|
||||
RCC->APB1ENR = RCC_APB1ENR_PWREN | RCC_APB1ENR_RTCAPBEN;
|
||||
#else
|
||||
RCC->APB1ENR = RCC_APB1ENR_PWREN;
|
||||
#endif
|
||||
|
||||
/* PWR initialization.*/
|
||||
#if defined(STM32F4XX) || defined(__DOXYGEN__)
|
||||
|
@ -173,7 +180,7 @@ void stm32_clock_init(void) {
|
|||
/* Registers finally cleared to reset values.*/
|
||||
RCC->CR &= RCC_CR_HSITRIM | RCC_CR_HSION; /* CR Reset value. */
|
||||
RCC->CFGR = 0; /* CFGR reset value. */
|
||||
|
||||
|
||||
#if STM32_HSE_ENABLED
|
||||
/* HSE activation.*/
|
||||
#if defined(STM32_HSE_BYPASS)
|
||||
|
@ -220,35 +227,73 @@ void stm32_clock_init(void) {
|
|||
/* Waiting for PLL lock.*/
|
||||
while (!(RCC->CR & RCC_CR_PLLRDY))
|
||||
;
|
||||
#endif /* STM32_OVERDRIVE_REQUIRED */
|
||||
#endif /* STM32_ACTIVATE_PLL */
|
||||
|
||||
#if STM32_ACTIVATE_PLLI2S
|
||||
/* PLLI2S activation.*/
|
||||
RCC->PLLI2SCFGR = STM32_PLLI2SR | STM32_PLLI2SN;
|
||||
RCC->PLLI2SCFGR = STM32_PLLI2SR | STM32_PLLI2SN | STM32_PLLI2SP |
|
||||
STM32_PLLI2SQ | STM32_PLLI2SM;
|
||||
RCC->CR |= RCC_CR_PLLI2SON;
|
||||
|
||||
/* Waiting for PLL lock.*/
|
||||
while (!(RCC->CR & RCC_CR_PLLI2SRDY))
|
||||
;
|
||||
#endif
|
||||
#endif /* STM32_ACTIVATE_PLLI2S */
|
||||
|
||||
#if STM32_ACTIVATE_PLLSAI
|
||||
/* PLLSAI activation.*/
|
||||
RCC->PLLSAICFGR = STM32_PLLSAIN | STM32_PLLSAIR | STM32_PLLSAIQ;
|
||||
RCC->PLLSAICFGR = STM32_PLLSAIR | STM32_PLLSAIN | STM32_PLLSAIP |
|
||||
STM32_PLLSAIQ | STM32_PLLSAIM;
|
||||
RCC->CR |= RCC_CR_PLLSAION;
|
||||
|
||||
/* Waiting for PLL lock.*/
|
||||
while (!(RCC->CR & RCC_CR_PLLSAIRDY))
|
||||
;
|
||||
#endif
|
||||
#endif /* STM32_ACTIVATE_PLLSAI */
|
||||
|
||||
/* Other clock-related settings (dividers, MCO etc).*/
|
||||
RCC->CFGR = STM32_MCO2PRE | STM32_MCO2SEL | STM32_MCO1PRE | STM32_MCO1SEL |
|
||||
STM32_I2SSRC | STM32_RTCPRE | STM32_PPRE2 | STM32_PPRE1 |
|
||||
STM32_HPRE;
|
||||
|
||||
#if defined(STM32F446xx)
|
||||
/* DCKCFGR register initialization, note, must take care of the _OFF
|
||||
pseudo settings.*/
|
||||
{
|
||||
uint32_t dckcfgr = 0;
|
||||
#if STM32_SAI2SEL != STM32_SAI2SEL_OFF
|
||||
dckcfgr |= STM32_SAI2SEL;
|
||||
#endif
|
||||
#if STM32_SAI1SEL != STM32_SAI1SEL_OFF
|
||||
dckcfgr |= STM32_SAI1SEL;
|
||||
#endif
|
||||
#if STM32_PLLSAIDIVR != STM32_PLLSAIDIVR_OFF
|
||||
dckcfgr |= STM32_PLLSAIDIVR;
|
||||
#endif
|
||||
RCC->DCKCFGR = dckcfgr | STM32_PLLI2SDIVQ | STM32_PLLSAIDIVQ;
|
||||
}
|
||||
RCC->DCKCFGR2 = STM32_CK48MSEL;
|
||||
#elif defined(STM32F469xx) || defined(STM32F479xx)
|
||||
/* DCKCFGR register initialization, note, must take care of the _OFF
|
||||
pseudo settings.*/
|
||||
{
|
||||
uint32_t dckcfgr = 0;
|
||||
#if STM32_SAI2SEL != STM32_SAI2SEL_OFF
|
||||
dckcfgr |= STM32_SAI2SEL;
|
||||
#endif
|
||||
#if STM32_SAI1SEL != STM32_SAI1SEL_OFF
|
||||
dckcfgr |= STM32_SAI1SEL;
|
||||
#endif
|
||||
#if STM32_PLLSAIDIVR != STM32_PLLSAIDIVR_OFF
|
||||
dckcfgr |= STM32_PLLSAIDIVR;
|
||||
#endif
|
||||
RCC->DCKCFGR = dckcfgr | STM32_PLLI2SDIVQ | STM32_PLLSAIDIVQ |
|
||||
STM32_CK48MSEL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Flash setup.*/
|
||||
#if defined(STM32_USE_REVISION_A_FIX)
|
||||
#if !defined(STM32_REMOVE_REVISION_A_FIX)
|
||||
/* Some old revisions of F4x MCUs randomly crashes with compiler
|
||||
optimizations enabled AND flash caches enabled. */
|
||||
if ((DBGMCU->IDCODE == 0x20006411) && (SCB->CPUID == 0x410FC241))
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||
ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -26,22 +26,22 @@
|
|||
* - STM32_VDD (as hundredths of Volt).
|
||||
* .
|
||||
* One of the following macros must also be defined:
|
||||
* - STM32F2XX for High-performance STM32 F-2 devices.
|
||||
* - STM32F405xx, STM32F415xx, STM32F407xx, STM32F417xx for
|
||||
* High-performance STM32 F-4 devices.
|
||||
* - STM32F427xx, STM32F437xx, STM32F429xx, STM32F439xx for
|
||||
* High-performance STM32 F-4 devices.
|
||||
* - STM32F401xC, STM32F401xE for High-performance STM32 F-4 devices.
|
||||
* - STM32F411xE for High-performance STM32 F-4 devices.
|
||||
* - STM32F446xx for High-performance STM32 F-4 devices.
|
||||
* - STM32F2XX for High-performance STM32F2 devices.
|
||||
* - STM32F405xx, STM32F415xx, STM32F407xx, STM32F417xx,
|
||||
* STM32F446xx for High-performance STM32F4 devices of
|
||||
* Foundation line.
|
||||
* - STM32F401xC, STM32F401xE, STM32F410Cx, STM32F410Rx, STM32F411xE
|
||||
* for High-performance STM32F4 devices of Access line.
|
||||
* - STM32F427xx, STM32F437xx, STM32F429xx, STM32F439xx, STM32F469xx,
|
||||
* STM32F479xx for High-performance STM32F4 devices of Advanced line.
|
||||
* .
|
||||
*
|
||||
* @addtogroup HAL
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _HAL_LLD_H_
|
||||
#define _HAL_LLD_H_
|
||||
#ifndef HAL_LLD_H
|
||||
#define HAL_LLD_H
|
||||
|
||||
#include "stm32_registry.h"
|
||||
|
||||
|
@ -52,17 +52,50 @@
|
|||
/**
|
||||
* @brief Defines the support for realtime counters in the HAL.
|
||||
*/
|
||||
#define HAL_IMPLEMENTS_COUNTERS TRUE
|
||||
#define HAL_IMPLEMENTS_COUNTERS TRUE
|
||||
|
||||
/**
|
||||
* @name Platform identification macros
|
||||
* @{
|
||||
*/
|
||||
#if defined(STM32F439xx) || defined(__DOXYGEN__)
|
||||
#define PLATFORM_NAME "STM32F439 High Performance with DSP and FPU"
|
||||
#if defined(STM32F205xx) || defined(__DOXYGEN__)
|
||||
#define PLATFORM_NAME "STM32F205 High Performance"
|
||||
|
||||
#elif defined(STM32F446xx)
|
||||
#define PLATFORM_NAME "STM32F446 High Performance with DSP and FPU"
|
||||
#elif defined(STM32F207xx)
|
||||
#define PLATFORM_NAME "STM32F207 High Performance"
|
||||
|
||||
#elif defined(STM32F215xx)
|
||||
#define PLATFORM_NAME "STM32F215 High Performance"
|
||||
|
||||
#elif defined(STM32F217xx)
|
||||
#define PLATFORM_NAME "STM32F217 High Performance"
|
||||
|
||||
#elif defined(STM32F401xx)
|
||||
#define PLATFORM_NAME "STM32F401 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F405xx)
|
||||
#define PLATFORM_NAME "STM32F405 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F407xx)
|
||||
#define PLATFORM_NAME "STM32F407 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F410xx)
|
||||
#define PLATFORM_NAME "STM32F410 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F411xx)
|
||||
#define PLATFORM_NAME "STM32F411 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F412xx)
|
||||
#define PLATFORM_NAME "STM32F412 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F415xx)
|
||||
#define PLATFORM_NAME "STM32F415 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F417xx)
|
||||
#define PLATFORM_NAME "STM32F417 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F427xx)
|
||||
#define PLATFORM_NAME "STM32F427 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F429xx)
|
||||
#define PLATFORM_NAME "STM32F429 High Performance with DSP and FPU"
|
||||
|
@ -70,41 +103,17 @@
|
|||
#elif defined(STM32F437xx)
|
||||
#define PLATFORM_NAME "STM32F437 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F427xx)
|
||||
#define PLATFORM_NAME "STM32F427 High Performance with DSP and FPU"
|
||||
#elif defined(STM32F439xx)
|
||||
#define PLATFORM_NAME "STM32F439 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F405xx)
|
||||
#define PLATFORM_NAME "STM32F405 High Performance with DSP and FPU"
|
||||
#elif defined(STM32F446xx)
|
||||
#define PLATFORM_NAME "STM32F446 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F415xx)
|
||||
#define PLATFORM_NAME "STM32F415 High Performance with DSP and FPU"
|
||||
#elif defined(STM32F469xx)
|
||||
#define PLATFORM_NAME "STM32F469 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F407xx)
|
||||
#define PLATFORM_NAME "STM32F407 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F417xx)
|
||||
#define PLATFORM_NAME "STM32F417 High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F401xC)
|
||||
#define PLATFORM_NAME "STM32F401xC High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F401xE)
|
||||
#define PLATFORM_NAME "STM32F401xE High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F411xE)
|
||||
#define PLATFORM_NAME "STM32F411xE High Performance with DSP and FPU"
|
||||
|
||||
#elif defined(STM32F205xx)
|
||||
#define PLATFORM_NAME "STM32F205 High Performance"
|
||||
|
||||
#elif defined(STM32F215xx)
|
||||
#define PLATFORM_NAME "STM32F215 High Performance"
|
||||
|
||||
#elif defined(STM32F207xx)
|
||||
#define PLATFORM_NAME "STM32F207 High Performance"
|
||||
|
||||
#elif defined(STM32F217xx)
|
||||
#define PLATFORM_NAME "STM32F217 High Performance"
|
||||
#elif defined(STM32F479xx)
|
||||
#define PLATFORM_NAME "STM32F479 High Performance with DSP and FPU"
|
||||
|
||||
#else
|
||||
#error "STM32F2xx/F4xx device not specified"
|
||||
|
@ -117,7 +126,7 @@
|
|||
*/
|
||||
#if defined(STM32F427xx) || defined(STM32F437xx) || \
|
||||
defined(STM32F429xx) || defined(STM32F439xx) || \
|
||||
defined(STM32F446xx) || defined(__DOXYGEN__)
|
||||
defined(STM32F469xx) || defined(STM32F479xx) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Absolute maximum system clock.
|
||||
*/
|
||||
|
@ -188,10 +197,20 @@
|
|||
*/
|
||||
#define STM32_PLLOUT_MIN 24000000
|
||||
|
||||
/**
|
||||
* @brief Maximum PLLI2S output clock frequency.
|
||||
*/
|
||||
#define STM32_PLLI2SOUT_MAX 216000000
|
||||
|
||||
/**
|
||||
* @brief Maximum PLLSAI output clock frequency.
|
||||
*/
|
||||
#define STM32_PLLSAIOUT_MAX 216000000
|
||||
|
||||
/**
|
||||
* @brief Maximum APB1 clock frequency.
|
||||
*/
|
||||
#define STM32_PCLK1_MAX (STM32_PLLOUT_MAX /4)
|
||||
#define STM32_PCLK1_MAX (STM32_PLLOUT_MAX / 4)
|
||||
|
||||
/**
|
||||
* @brief Maximum APB2 clock frequency.
|
||||
|
@ -204,7 +223,7 @@
|
|||
#define STM32_SPII2S_MAX 45000000
|
||||
#endif
|
||||
|
||||
#if defined(STM32F40_41xxx) || defined(__DOXYGEN__)
|
||||
#if defined(STM32F40_41xxx)
|
||||
#define STM32_SYSCLK_MAX 168000000
|
||||
#define STM32_HSECLK_MAX 26000000
|
||||
#define STM32_HSECLK_BYP_MAX 50000000
|
||||
|
@ -224,7 +243,7 @@
|
|||
#define STM32_SPII2S_MAX 42000000
|
||||
#endif
|
||||
|
||||
#if defined(STM32F401xx) || defined(__DOXYGEN__)
|
||||
#if defined(STM32F401xx)
|
||||
#define STM32_SYSCLK_MAX 84000000
|
||||
#define STM32_HSECLK_MAX 26000000
|
||||
#define STM32_HSECLK_BYP_MAX 50000000
|
||||
|
@ -244,7 +263,8 @@
|
|||
#define STM32_SPII2S_MAX 42000000
|
||||
#endif
|
||||
|
||||
#if defined(STM32F411xx)
|
||||
#if defined(STM32F410xx) || defined(STM32F411xx) || \
|
||||
defined(STM32F412xx)
|
||||
#define STM32_SYSCLK_MAX 100000000
|
||||
#define STM32_HSECLK_MAX 26000000
|
||||
#define STM32_HSECLK_BYP_MAX 50000000
|
||||
|
@ -264,6 +284,28 @@
|
|||
#define STM32_SPII2S_MAX 50000000
|
||||
#endif
|
||||
|
||||
#if defined(STM32F446xx)
|
||||
#define STM32_SYSCLK_MAX 180000000
|
||||
#define STM32_HSECLK_MAX 26000000
|
||||
#define STM32_HSECLK_BYP_MAX 50000000
|
||||
#define STM32_HSECLK_MIN 4000000
|
||||
#define STM32_HSECLK_BYP_MIN 1000000
|
||||
#define STM32_LSECLK_MAX 32768
|
||||
#define STM32_LSECLK_BYP_MAX 1000000
|
||||
#define STM32_LSECLK_MIN 32768
|
||||
#define STM32_PLLIN_MAX 2100000
|
||||
#define STM32_PLLIN_MIN 950000
|
||||
#define STM32_PLLVCO_MAX 432000000
|
||||
#define STM32_PLLVCO_MIN 100000000
|
||||
#define STM32_PLLOUT_MAX 180000000
|
||||
#define STM32_PLLOUT_MIN 12500000
|
||||
#define STM32_PLLI2SOUT_MAX 216000000
|
||||
#define STM32_PLLSAIOUT_MAX 216000000
|
||||
#define STM32_PCLK1_MAX (STM32_PLLOUT_MAX / 4)
|
||||
#define STM32_PCLK2_MAX (STM32_PLLOUT_MAX / 2)
|
||||
#define STM32_SPII2S_MAX 45000000
|
||||
#endif
|
||||
|
||||
#if defined(STM32F2XX)
|
||||
#define STM32_SYSCLK_MAX 120000000
|
||||
#define STM32_HSECLK_MAX 26000000
|
||||
|
@ -395,10 +437,32 @@
|
|||
* @name RCC_PLLI2SCFGR register bits definitions
|
||||
* @{
|
||||
*/
|
||||
#define STM32_PLLI2SM_MASK (31 << 0) /**< PLLI2SM mask. */
|
||||
#define STM32_PLLI2SN_MASK (511 << 6) /**< PLLI2SN mask. */
|
||||
#define STM32_PLLI2SP_MASK (3 << 16) /**< PLLI2SP mask. */
|
||||
#define STM32_PLLI2SP_DIV2 (0 << 16) /**< PLLI2S clock divided by 2. */
|
||||
#define STM32_PLLI2SP_DIV4 (1 << 16) /**< PLLI2S clock divided by 4. */
|
||||
#define STM32_PLLI2SP_DIV6 (2 << 16) /**< PLLI2S clock divided by 6. */
|
||||
#define STM32_PLLI2SP_DIV8 (3 << 16) /**< PLLI2S clock divided by 8. */
|
||||
#define STM32_PLLI2SQ_MASK (15 << 24) /**< PLLI2SQ mask. */
|
||||
#define STM32_PLLI2SR_MASK (7 << 28) /**< PLLI2SR mask. */
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name RCC_PLLSAICFGR register bits definitions
|
||||
* @{
|
||||
*/
|
||||
#define STM32_PLLSAIM_MASK (31 << 0) /**< PLLSAIM mask. */
|
||||
#define STM32_PLLSAIN_MASK (511 << 6) /**< PLLSAIN mask. */
|
||||
#define STM32_PLLSAIP_MASK (3 << 16) /**< PLLSAIP mask. */
|
||||
#define STM32_PLLSAIP_DIV2 (0 << 16) /**< PLLSAI clock divided by 2. */
|
||||
#define STM32_PLLSAIP_DIV4 (1 << 16) /**< PLLSAI clock divided by 4. */
|
||||
#define STM32_PLLSAIP_DIV6 (2 << 16) /**< PLLSAI clock divided by 6. */
|
||||
#define STM32_PLLSAIP_DIV8 (3 << 16) /**< PLLSAI clock divided by 8. */
|
||||
#define STM32_PLLSAIQ_MASK (15 << 24) /**< PLLSAIQ mask. */
|
||||
#define STM32_PLLSAIR_MASK (7 << 28) /**< PLLSAIR mask. */
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name RCC_BDCR register bits definitions
|
||||
* @{
|
||||
|
@ -410,6 +474,80 @@
|
|||
#define STM32_RTCSEL_HSEDIV (3 << 8) /**< RTC source is HSE divided. */
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name RCC_DCKCFGR register bits definitions
|
||||
* @{
|
||||
*/
|
||||
#define STM32_PLLI2SDIVQ_MASK (31 << 0) /**< PLLI2SDIVQ mask. */
|
||||
|
||||
#define STM32_PLLSAIDIVQ_MASK (31 << 8) /**< PLLSAIDIVQ mask. */
|
||||
|
||||
#define STM32_PLLSAIDIVR_MASK (3 << 16) /**< PLLSAIDIVR mask. */
|
||||
#define STM32_PLLSAIDIVR_DIV2 (0 << 16) /**< LCD_CLK is R divided by 2. */
|
||||
#define STM32_PLLSAIDIVR_DIV4 (1 << 16) /**< LCD_CLK is R divided by 4. */
|
||||
#define STM32_PLLSAIDIVR_DIV8 (2 << 16) /**< LCD_CLK is R divided by 8. */
|
||||
#define STM32_PLLSAIDIVR_DIV16 (3 << 16) /**< LCD_CLK is R divided by 16.*/
|
||||
#define STM32_PLLSAIDIVR_OFF 0xFFFFFFFFU /**< LCD CLK is not required. */
|
||||
|
||||
#define STM32_SAI1SEL_MASK (3 << 20) /**< SAI1SEL mask. */
|
||||
#define STM32_SAI1SEL_PLLSAI (0 << 20) /**< SAI1 source is PLLSAI. */
|
||||
#define STM32_SAI1SEL_PLLI2S (1 << 20) /**< SAI1 source is PLLI2S. */
|
||||
#define STM32_SAI1SEL_PLLR (2 << 20) /**< SAI1 source is PLLR. */
|
||||
#define STM32_SAI1SEL_OFF 0xFFFFFFFFU /**< SAI1 clock is not required.*/
|
||||
|
||||
#define STM32_SAI2SEL_MASK (3 << 22) /**< SAI2SEL mask. */
|
||||
#define STM32_SAI2SEL_PLLSAI (0 << 22) /**< SAI2 source is PLLSAI. */
|
||||
#define STM32_SAI2SEL_PLLI2S (1 << 22) /**< SAI2 source is PLLI2S. */
|
||||
#define STM32_SAI2SEL_PLLR (2 << 22) /**< SAI2 source is PLLR. */
|
||||
#define STM32_SAI2SEL_OFF 0xFFFFFFFFU /**< SAI2 clock is not required.*/
|
||||
|
||||
#define STM32_TIMPRE_MASK (1 << 24) /**< TIMPRE mask. */
|
||||
#define STM32_TIMPRE_PCLK (0 << 24) /**< TIM clocks from PCLKx. */
|
||||
#define STM32_TIMPRE_HCLK (1 << 24) /**< TIM clocks from HCLK. */
|
||||
|
||||
#define STM32_I2S1SEL_MASK (3 << 25) /**< I2S1SEL mask. */
|
||||
#define STM32_I2S1SEL_PLLR (0 << 25) /**< I2S1 source is PLLR. */
|
||||
#define STM32_I2S1SEL_AFIN (1 << 25) /**< I2S1 source is AF Input. */
|
||||
#define STM32_I2S1SEL_MCO1 (2 << 25) /**< I2S1 source is MCO1. */
|
||||
#define STM32_I2S1SEL_OFF 0xFFFFFFFFU /**< I2S1 clock is not required.*/
|
||||
|
||||
#define STM32_I2S2SEL_MASK (3 << 27) /**< I2S2SEL mask. */
|
||||
#define STM32_I2S2SEL_PLLR (0 << 27) /**< I2S2 source is PLLR. */
|
||||
#define STM32_I2S2SEL_AFIN (1 << 27) /**< I2S2 source is AF Input. */
|
||||
#define STM32_I2S2SEL_MCO1 (2 << 27) /**< I2S2 source is MCO1. */
|
||||
#define STM32_I2S2SEL_OFF 0xFFFFFFFFU /**< I2S2 clock is not required.*/
|
||||
|
||||
#define STM32_DSISEL_MASK (1 << 28) /**< DSISEL mask. */
|
||||
#define STM32_DSISEL_PHY (0 << 28) /**< DSI source is DSI-PSY. */
|
||||
#define STM32_DSISEL_PLLR (1 << 28) /**< DSI source is PLLR. */
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name RCC_DCKCFGR2 register bits definitions
|
||||
* @{
|
||||
*/
|
||||
#define STM32_I2C1SEL_MASK (3 << 22) /**< I2C1SEL mask. */
|
||||
#define STM32_I2C1SEL_PCLK1 (0 << 22) /**< I2C1 source is PCLK1. */
|
||||
#define STM32_I2C1SEL_SYSCLK (1 << 22) /**< I2C1 source is SYSCLK. */
|
||||
#define STM32_I2C1SEL_HSI (2 << 22) /**< I2C1 source is HSI. */
|
||||
|
||||
#define STM32_CECSEL_MASK (1 << 26) /**< CECSEL mask. */
|
||||
#define STM32_CECSEL_LSE (0 << 26) /**< CEC source is LSE. */
|
||||
#define STM32_CECSEL_HSIDIV488 (1 << 26) /**< CEC source is HSI/488. */
|
||||
|
||||
#define STM32_CK48MSEL_MASK (1 << 27) /**< CK48MSEL mask. */
|
||||
#define STM32_CK48MSEL_PLL (0 << 27) /**< PLL48CLK source is PLL. */
|
||||
#define STM32_CK48MSEL_PLLSAI (1 << 27) /**< PLL48CLK source is PLLSAI. */
|
||||
|
||||
#define STM32_SDMMCSEL_MASK (1 << 28) /**< SDMMCSEL mask. */
|
||||
#define STM32_SDMMCSEL_PLL48CLK (0 << 28) /**< SDMMC source is PLL48CLK. */
|
||||
#define STM32_SDMMCSEL_SYSCLK (1 << 28) /**< SDMMC source is SYSCLK. */
|
||||
|
||||
#define STM32_SPDIFSEL_MASK (1 << 29) /**< SPDIFSEL mask. */
|
||||
#define STM32_SPDIFSEL_PLLI2S (0 << 29) /**< SPDIF source is PLLI2S. */
|
||||
#define STM32_SPDIFSEL_PLL (1 << 29) /**< SPDIF source is PLL. */
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
@ -597,6 +735,156 @@
|
|||
#endif
|
||||
#endif /* !defined(STM32F4XX) */
|
||||
|
||||
/**
|
||||
* @brief I2S clock source.
|
||||
*/
|
||||
#if !defined(STM32_I2SSRC) || defined(__DOXYGEN__)
|
||||
#define STM32_I2SSRC STM32_I2SSRC_CKIN
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2SN multiplier value.
|
||||
* @note The allowed values are 192..432, except for
|
||||
* STM32F446 where values are 50...432.
|
||||
* @note The default value is calculated for a 96MHz I2S clock
|
||||
* output from an external 8MHz HSE clock.
|
||||
*/
|
||||
#if !defined(STM32_PLLI2SN_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SN_VALUE 192
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2SM divider value.
|
||||
* @note The allowed values are 2..63.
|
||||
* @note The default value is calculated for a 96MHz I2S clock
|
||||
* output from an external 8MHz HSE clock.
|
||||
*/
|
||||
#if !defined(STM32_PLLI2SM_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SM_VALUE 4
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2SR divider value.
|
||||
* @note The allowed values are 2..7.
|
||||
* @note The default value is calculated for a 96MHz I2S clock
|
||||
* output from an external 8MHz HSE clock.
|
||||
*/
|
||||
#if !defined(STM32_PLLI2SR_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SR_VALUE 4
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2SP divider value.
|
||||
* @note The allowed values are 2, 4, 6 and 8.
|
||||
*/
|
||||
#if !defined(STM32_PLLI2SP_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SP_VALUE 4
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2SQ divider value.
|
||||
* @note The allowed values are 2..15.
|
||||
*/
|
||||
#if !defined(STM32_PLLI2SQ_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SQ_VALUE 4
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief STM32_PLLI2SDIVQ divider value (SAI clock divider).
|
||||
*/
|
||||
#if !defined(STM32_PLLI2SDIVQ) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SDIVQ 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIM value.
|
||||
* @note The allowed values are 2..63.
|
||||
* @note The default value is calculated for a 96MHz SAI clock
|
||||
* output from an external 8MHz HSE clock.
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIM_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIM_VALUE 4
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIN value.
|
||||
* @note The allowed values are 50..432.
|
||||
* @note The default value is calculated for a 96MHz SAI clock
|
||||
* output from an external 8MHz HSE clock.
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIN_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIN_VALUE 192
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIM value.
|
||||
* @note The allowed values are 2..63.
|
||||
* @note The default value is calculated for a 96MHz SAI clock
|
||||
* output from an external 8MHz HSE clock.
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIM_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIM_VALUE 4
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIR value.
|
||||
* @note The allowed values are 2..7.
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIR_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIR_VALUE 4
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIP divider value.
|
||||
* @note The allowed values are 2, 4, 6 and 8.
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIP_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIP_VALUE 8
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIQ value.
|
||||
* @note The allowed values are 2..15.
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIQ_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIQ_VALUE 4
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIDIVR divider value (SAI clock divider).
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIDIVR) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIDIVR STM32_PLLSAIDIVR_OFF
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIDIVR divider value (LCD clock divider).
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIDIVQ) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIDIVQ 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief SAI1SEL value (SAI1 clock source).
|
||||
*/
|
||||
#if !defined(STM32_SAI1SEL) || defined(__DOXYGEN__)
|
||||
#define STM32_SAI1SEL STM32_SAI1SEL_OFF
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief SAI2SEL value (SAI2 clock source).
|
||||
*/
|
||||
#if !defined(STM32_SAI2SEL) || defined(__DOXYGEN__)
|
||||
#define STM32_SAI2SEL STM32_SAI2SEL_OFF
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLL48CLK clock source.
|
||||
*/
|
||||
#if !defined(STM32_CK48MSEL) || defined(__DOXYGEN__)
|
||||
#define STM32_CK48MSEL STM32_CK48MSEL_PLL
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief AHB prescaler value.
|
||||
*/
|
||||
|
@ -663,53 +951,6 @@
|
|||
#if !defined(STM32_MCO2PRE) || defined(__DOXYGEN__)
|
||||
#define STM32_MCO2PRE STM32_MCO2PRE_DIV5
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief I2S clock source.
|
||||
*/
|
||||
#if !defined(STM32_I2SSRC) || defined(__DOXYGEN__)
|
||||
#define STM32_I2SSRC STM32_I2SSRC_CKIN
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2SN multiplier value.
|
||||
* @note The allowed values are 192..432.
|
||||
*/
|
||||
#if !defined(STM32_PLLI2SN_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SN_VALUE 192
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2SR multiplier value.
|
||||
* @note The allowed values are 2..7.
|
||||
*/
|
||||
#if !defined(STM32_PLLI2SR_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SR_VALUE 5
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIQ value.
|
||||
* @note The allowed values are 2..15.
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIQ_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIQ_VALUE 8
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIQ value.
|
||||
* @note The allowed values are 49..432.
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIN_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIN_VALUE 120
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAIQ value.
|
||||
* @note The allowed values are 2..7.
|
||||
*/
|
||||
#if !defined(STM32_PLLSAIR_VALUE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIR_VALUE 4
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
|
@ -739,7 +980,7 @@
|
|||
*/
|
||||
#if defined(STM32F429_439xx) || defined(STM32F427_437xx) || \
|
||||
defined(STM32F40_41xxx) || defined(STM32F446xx) || \
|
||||
defined(__DOXYGEN__)
|
||||
defined(STM32F469_479xx) || defined(__DOXYGEN__)
|
||||
#if ((STM32_VDD >= 270) && (STM32_VDD <= 360)) || defined(__DOXYGEN__)
|
||||
#define STM32_0WS_THRESHOLD 30000000
|
||||
#define STM32_1WS_THRESHOLD 60000000
|
||||
|
@ -829,7 +1070,7 @@
|
|||
#error "invalid VDD voltage specified"
|
||||
#endif
|
||||
|
||||
#elif defined(STM32F411xx)
|
||||
#elif defined(STM32F410xx) || defined(STM32F411xx)
|
||||
#if (STM32_VDD >= 270) && (STM32_VDD <= 360)
|
||||
#define STM32_0WS_THRESHOLD 30000000
|
||||
#define STM32_1WS_THRESHOLD 64000000
|
||||
|
@ -945,6 +1186,17 @@
|
|||
#error "HSI not enabled, required by STM32_I2SSRC"
|
||||
#endif
|
||||
|
||||
#if ((STM32_SAI1SEL == STM32_SAI1SEL_PLLSAI) || \
|
||||
(STM32_SAI1SEL == STM32_SAI1SEL_PLLI2S)) && \
|
||||
(STM32_PLLSRC == STM32_PLLSRC_HSI)
|
||||
#error "HSI not enabled, required by STM32_SAI1SEL"
|
||||
#endif
|
||||
|
||||
#if ((STM32_SAI2SEL == STM32_SAI2SEL_PLLSAI) || \
|
||||
(STM32_SAI2SEL == STM32_SAI2SEL_PLLI2S)) && \
|
||||
(STM32_PLLSRC == STM32_PLLSRC_HSI)
|
||||
#error "HSI not enabled, required by STM32_SAI2SEL"
|
||||
#endif
|
||||
#endif /* !STM32_HSI_ENABLED */
|
||||
|
||||
/*
|
||||
|
@ -954,10 +1206,17 @@
|
|||
|
||||
#if STM32_HSECLK == 0
|
||||
#error "HSE frequency not defined"
|
||||
#elif (STM32_HSECLK < STM32_HSECLK_MIN) || (STM32_HSECLK > STM32_HSECLK_MAX)
|
||||
#else /* STM32_HSECLK != 0 */
|
||||
#if defined(STM32_HSE_BYPASS)
|
||||
#if (STM32_HSECLK < STM32_HSECLK_MIN) || (STM32_HSECLK > STM32_HSECLK_BYP_MAX)
|
||||
#error "STM32_HSECLK outside acceptable range (STM32_HSECLK_MIN...STM32_HSECLK_BYP_MAX)"
|
||||
#endif
|
||||
#else /* !defined(STM32_HSE_BYPASS) */
|
||||
#if (STM32_HSECLK < STM32_HSECLK_MIN) || (STM32_HSECLK > STM32_HSECLK_MAX)
|
||||
#error "STM32_HSECLK outside acceptable range (STM32_HSECLK_MIN...STM32_HSECLK_MAX)"
|
||||
#endif
|
||||
|
||||
#endif /* !defined(STM32_HSE_BYPASS) */
|
||||
#endif /* STM32_HSECLK != 0 */
|
||||
#else /* !STM32_HSE_ENABLED */
|
||||
|
||||
#if STM32_SW == STM32_SW_HSE
|
||||
|
@ -1035,7 +1294,7 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLs input clock frequency.
|
||||
* @brief PLL input clock frequency.
|
||||
*/
|
||||
#if (STM32_PLLSRC == STM32_PLLSRC_HSE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLCLKIN (STM32_HSECLK / STM32_PLLM_VALUE)
|
||||
|
@ -1082,13 +1341,13 @@
|
|||
* @brief STM32_PLLP field.
|
||||
*/
|
||||
#if (STM32_PLLP_VALUE == 2) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLP (0 << 16)
|
||||
#define STM32_PLLP STM32_PLLP_DIV2
|
||||
#elif STM32_PLLP_VALUE == 4
|
||||
#define STM32_PLLP (1 << 16)
|
||||
#define STM32_PLLP STM32_PLLP_DIV4
|
||||
#elif STM32_PLLP_VALUE == 6
|
||||
#define STM32_PLLP (2 << 16)
|
||||
#define STM32_PLLP STM32_PLLP_DIV6
|
||||
#elif STM32_PLLP_VALUE == 8
|
||||
#define STM32_PLLP (3 << 16)
|
||||
#define STM32_PLLP STM32_PLLP_DIV8
|
||||
#else
|
||||
#error "invalid STM32_PLLP_VALUE value specified"
|
||||
#endif
|
||||
|
@ -1149,7 +1408,8 @@
|
|||
|
||||
/* Calculating VOS settings, it is different for each sub-platform.*/
|
||||
#if defined(STM32F429_439xx) || defined(STM32F427_437xx) || \
|
||||
defined(STM32F446xx) || defined(__DOXYGEN__)
|
||||
defined(STM32F446xx) || defined(STM32F469_479xx) || \
|
||||
defined(__DOXYGEN__)
|
||||
#if STM32_SYSCLK <= 120000000
|
||||
#define STM32_VOS STM32_VOS_SCALE3
|
||||
#define STM32_OVERDRIVE_REQUIRED FALSE
|
||||
|
@ -1180,7 +1440,7 @@
|
|||
#endif
|
||||
#define STM32_OVERDRIVE_REQUIRED FALSE
|
||||
|
||||
#elif defined(STM32F411xx)
|
||||
#elif defined(STM32F410xx) || defined(STM32F411xx) || defined(STM32F412xx)
|
||||
#if STM32_SYSCLK <= 64000000
|
||||
#define STM32_VOS STM32_VOS_SCALE3
|
||||
#elif STM32_SYSCLK <= 84000000
|
||||
|
@ -1277,7 +1537,10 @@
|
|||
/*
|
||||
* PLLI2S enable check.
|
||||
*/
|
||||
#if (STM32_I2SSRC == STM32_I2SSRC_PLLI2S) || defined(__DOXYGEN__)
|
||||
#if (STM32_I2SSRC == STM32_I2SSRC_PLLI2S) || \
|
||||
(STM32_SAI1SEL == STM32_SAI1SEL_PLLI2S) || \
|
||||
(STM32_SAI2SEL == STM32_SAI2SEL_PLLI2S) || \
|
||||
defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief PLLI2S activation flag.
|
||||
*/
|
||||
|
@ -1286,15 +1549,59 @@
|
|||
#define STM32_ACTIVATE_PLLI2S FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief STM32_PLLI2SM field.
|
||||
*/
|
||||
#if ((STM32_PLLI2SM_VALUE >= 2) && (STM32_PLLI2SM_VALUE <= 63)) || \
|
||||
defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SM (STM32_PLLI2SM_VALUE << 0)
|
||||
#else
|
||||
#error "invalid STM32_PLLI2SM_VALUE value specified"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief STM32_PLLI2SN field.
|
||||
*/
|
||||
#if defined (STM32F446xx) || defined(__DOXYGEN__)
|
||||
#if ((STM32_PLLI2SN_VALUE >= 50) && (STM32_PLLI2SN_VALUE <= 432)) || \
|
||||
defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SN (STM32_PLLI2SN_VALUE << 6)
|
||||
#else
|
||||
#error "invalid STM32_PLLI2SN_VALUE value specified"
|
||||
#endif
|
||||
#else /* !defined(STM32F446xx) */
|
||||
#if ((STM32_PLLI2SN_VALUE >= 192) && (STM32_PLLI2SN_VALUE <= 432)) || \
|
||||
defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SN (STM32_PLLI2SN_VALUE << 6)
|
||||
#else
|
||||
#error "invalid STM32_PLLI2SN_VALUE value specified"
|
||||
#endif
|
||||
#endif /* defined(STM32F446xx) */
|
||||
|
||||
/**
|
||||
* @brief STM32_PLLI2SP field.
|
||||
*/
|
||||
#if (STM32_PLLI2SP_VALUE == 2) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SP STM32_PLLI2SP_DIV2
|
||||
#elif STM32_PLLI2SP_VALUE == 4
|
||||
#define STM32_PLLI2SP STM32_PLLI2SP_DIV4
|
||||
#elif STM32_PLLI2SP_VALUE == 6
|
||||
#define STM32_PLLI2SP STM32_PLLI2SP_DIV6
|
||||
#elif STM32_PLLI2SP_VALUE == 8
|
||||
#define STM32_PLLI2SP STM32_PLLI2SP_DIV8
|
||||
#else
|
||||
#error "invalid STM32_PLLI2SP_VALUE value specified"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief STM32_PLLI2SQ field.
|
||||
*/
|
||||
#if ((STM32_PLLI2SQ_VALUE >= 2) && (STM32_PLLI2SQ_VALUE <= 15)) || \
|
||||
defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SQ (STM32_PLLI2SQ_VALUE << 24)
|
||||
#else
|
||||
#error "invalid STM32_PLLI2SQ_VALUE value specified"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief STM32_PLLI2SR field.
|
||||
|
@ -1306,10 +1613,80 @@
|
|||
#error "invalid STM32_PLLI2SR_VALUE value specified"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2S input clock frequency.
|
||||
*/
|
||||
#if defined(STM32F446xx)
|
||||
#if (STM32_PLLSRC == STM32_PLLSRC_HSE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SCLKIN (STM32_HSECLK / STM32_PLLI2SM_VALUE)
|
||||
#elif STM32_PLLSRC == STM32_PLLSRC_HSI
|
||||
#define STM32_PLLI2SCLKIN (STM32_HSICLK / STM32_PLLI2SM_VALUE)
|
||||
#else
|
||||
#error "invalid STM32_PLLSRC value specified"
|
||||
#endif
|
||||
#else /* !defined(STM32F446xx) */
|
||||
#if (STM32_PLLSRC == STM32_PLLSRC_HSE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLI2SCLKIN (STM32_HSECLK / STM32_PLLM_VALUE)
|
||||
#elif STM32_PLLSRC == STM32_PLLSRC_HSI
|
||||
#define STM32_PLLI2SCLKIN (STM32_HSICLK / STM32_PLLM_VALUE)
|
||||
#else
|
||||
#error "invalid STM32_PLLSRC value specified"
|
||||
#endif
|
||||
#endif /* defined(STM32F446xx) */
|
||||
|
||||
/**
|
||||
* @brief PLLI2S VCO frequency.
|
||||
*/
|
||||
#define STM32_PLLI2SVCO (STM32_PLLI2SCLKIN * STM32_PLLI2SN_VALUE)
|
||||
|
||||
/*
|
||||
* PLLI2S VCO frequency range check.
|
||||
*/
|
||||
#if (STM32_PLLI2SVCO < STM32_PLLVCO_MIN) || \
|
||||
(STM32_PLLI2SVCO > STM32_PLLVCO_MAX)
|
||||
#error "STM32_PLLI2SVCO outside acceptable range (STM32_PLLVCO_MIN...STM32_PLLVCO_MAX)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2S P output clock frequency.
|
||||
*/
|
||||
#define STM32_PLLI2S_P_CLKOUT (STM32_PLLI2SVCO / STM32_PLLI2SP_VALUE)
|
||||
|
||||
/**
|
||||
* @brief PLLI2S Q output clock frequency.
|
||||
*/
|
||||
#define STM32_PLLI2S_Q_CLKOUT (STM32_PLLI2SVCO / STM32_PLLI2SQ_VALUE)
|
||||
|
||||
/**
|
||||
* @brief PLLI2S R output clock frequency.
|
||||
*/
|
||||
#define STM32_PLLI2S_R_CLKOUT (STM32_PLLI2SVCO / STM32_PLLI2SR_VALUE)
|
||||
|
||||
/*
|
||||
* PLLSAI enable check.
|
||||
*/
|
||||
#if (STM32_CLOCK48_REQUIRED && (STM32_CK48MSEL == STM32_CK48MSEL_PLLSAI)) | \
|
||||
(STM32_PLLSAIDIVR != STM32_PLLSAIDIVR_OFF) || \
|
||||
(STM32_SAI1SEL == STM32_SAI1SEL_PLLSAI) || \
|
||||
(STM32_SAI2SEL == STM32_SAI2SEL_PLLSAI) || \
|
||||
defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief PLLSAI activation flag.
|
||||
*/
|
||||
#define STM32_ACTIVATE_PLLSAI TRUE
|
||||
#else
|
||||
#define STM32_ACTIVATE_PLLSAI FALSE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief STM32_PLLSAIM field.
|
||||
*/
|
||||
#if ((STM32_PLLSAIM_VALUE >= 2) && (STM32_PLLSAIM_VALUE <= 63)) || \
|
||||
defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIM (STM32_PLLSAIM_VALUE << 0)
|
||||
#else
|
||||
#error "invalid STM32_PLLSAIM_VALUE value specified"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief STM32_PLLSAIN field.
|
||||
|
@ -1328,7 +1705,7 @@
|
|||
defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIQ (STM32_PLLSAIQ_VALUE << 24)
|
||||
#else
|
||||
#error "invalid STM32_PLLSAIR_VALUE value specified"
|
||||
#error "invalid STM32_PLLSAIQ_VALUE value specified"
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -1342,34 +1719,89 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLL VCO frequency.
|
||||
* @brief STM32_PLLSAIP field.
|
||||
*/
|
||||
#define STM32_PLLI2SVCO (STM32_PLLCLKIN * STM32_PLLI2SN_VALUE)
|
||||
|
||||
/*
|
||||
* PLLI2S VCO frequency range check.
|
||||
*/
|
||||
#if (STM32_PLLI2SVCO < STM32_PLLVCO_MIN) || \
|
||||
(STM32_PLLI2SVCO > STM32_PLLVCO_MAX)
|
||||
#error "STM32_PLLI2SVCO outside acceptable range (STM32_PLLVCO_MIN...STM32_PLLVCO_MAX)"
|
||||
#if (STM32_PLLSAIP_VALUE == 2) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAIP STM32_PLLSAIP_DIV2
|
||||
|
||||
#elif STM32_PLLSAIP_VALUE == 4
|
||||
#define STM32_PLLSAIP STM32_PLLSAIP_DIV4
|
||||
|
||||
#elif STM32_PLLSAIP_VALUE == 6
|
||||
#define STM32_PLLSAIP STM32_PLLSAIP_DIV6
|
||||
|
||||
#elif STM32_PLLSAIP_VALUE == 8
|
||||
#define STM32_PLLSAIP STM32_PLLSAIP_DIV8
|
||||
|
||||
#else
|
||||
#error "invalid STM32_PLLSAIP_VALUE value specified"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLI2S output clock frequency.
|
||||
* @brief PLLSAI input clock frequency.
|
||||
*/
|
||||
#define STM32_PLLI2SCLKOUT (STM32_PLLI2SVCO / STM32_PLLI2SR_VALUE)
|
||||
#if defined(STM32F446xx)
|
||||
#if (STM32_PLLSRC == STM32_PLLSRC_HSE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAICLKIN (STM32_HSECLK / STM32_PLLSAIM_VALUE)
|
||||
#elif STM32_PLLSRC == STM32_PLLSRC_HSI
|
||||
#define STM32_PLLSAICLKIN (STM32_HSICLK / STM32_PLLSAIM_VALUE)
|
||||
#else
|
||||
#error "invalid STM32_PLLSRC value specified"
|
||||
#endif
|
||||
#else /* !defined(STM32F446xx) */
|
||||
#if (STM32_PLLSRC == STM32_PLLSRC_HSE) || defined(__DOXYGEN__)
|
||||
#define STM32_PLLSAICLKIN (STM32_HSECLK / STM32_PLLM_VALUE)
|
||||
#elif STM32_PLLSRC == STM32_PLLSRC_HSI
|
||||
#define STM32_PLLSAICLKIN (STM32_HSICLK / STM32_PLLM_VALUE)
|
||||
#else
|
||||
#error "invalid STM32_PLLSRC value specified"
|
||||
#endif
|
||||
#endif /* defined(STM32F446xx) */
|
||||
|
||||
/**
|
||||
* @brief PLLSAI VCO frequency.
|
||||
*/
|
||||
#define STM32_PLLSAIVCO (STM32_PLLSAICLKIN * STM32_PLLSAIN_VALUE)
|
||||
|
||||
/*
|
||||
* PLLSAI VCO frequency range check.
|
||||
*/
|
||||
#if (STM32_PLLSAIVCO < STM32_PLLVCO_MIN) || \
|
||||
(STM32_PLLSAIVCO > STM32_PLLVCO_MAX)
|
||||
#error "STM32_PLLSAIVCO outside acceptable range (STM32_PLLVCO_MIN...STM32_PLLVCO_MAX)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief PLLSAI P output clock frequency.
|
||||
*/
|
||||
#define STM32_PLLSAI_P_CLKOUT (STM32_PLLSAIVCO / STM32_PLLSAIP_VALUE)
|
||||
|
||||
/**
|
||||
* @brief PLLSAI Q output clock frequency.
|
||||
*/
|
||||
#define STM32_PLLSAI_Q_CLKOUT (STM32_PLLSAIVCO / STM32_PLLSAIQ_VALUE)
|
||||
|
||||
/**
|
||||
* @brief PLLSAI R output clock frequency.
|
||||
*/
|
||||
#define STM32_PLLSAI_R_CLKOUT (STM32_PLLSAIVCO / STM32_PLLSAIR_VALUE)
|
||||
|
||||
/**
|
||||
* @brief MCO1 divider clock.
|
||||
*/
|
||||
#if (STM32_MCO1SEL == STM32_MCO1SEL_HSI) || defined(__DOXYGEN__)
|
||||
#define STM32_MCO1DIVCLK STM32_HSICLK
|
||||
|
||||
#elif STM32_MCO1SEL == STM32_MCO1SEL_LSE
|
||||
#define STM32_MCO1DIVCLK STM32_LSECLK
|
||||
|
||||
#elif STM32_MCO1SEL == STM32_MCO1SEL_HSE
|
||||
#define STM32_MCO1DIVCLK STM32_HSECLK
|
||||
|
||||
#elif STM32_MCO1SEL == STM32_MCO1SEL_PLL
|
||||
#define STM32_MCO1DIVCLK STM32_PLLCLKOUT
|
||||
|
||||
#else
|
||||
#error "invalid STM32_MCO1SEL value specified"
|
||||
#endif
|
||||
|
@ -1379,14 +1811,19 @@
|
|||
*/
|
||||
#if (STM32_MCO1PRE == STM32_MCO1PRE_DIV1) || defined(__DOXYGEN__)
|
||||
#define STM32_MCO1CLK STM32_MCO1DIVCLK
|
||||
|
||||
#elif STM32_MCO1PRE == STM32_MCO1PRE_DIV2
|
||||
#define STM32_MCO1CLK (STM32_MCO1DIVCLK / 2)
|
||||
|
||||
#elif STM32_MCO1PRE == STM32_MCO1PRE_DIV3
|
||||
#define STM32_MCO1CLK (STM32_MCO1DIVCLK / 3)
|
||||
|
||||
#elif STM32_MCO1PRE == STM32_MCO1PRE_DIV4
|
||||
#define STM32_MCO1CLK (STM32_MCO1DIVCLK / 4)
|
||||
|
||||
#elif STM32_MCO1PRE == STM32_MCO1PRE_DIV5
|
||||
#define STM32_MCO1CLK (STM32_MCO1DIVCLK / 5)
|
||||
|
||||
#else
|
||||
#error "invalid STM32_MCO1PRE value specified"
|
||||
#endif
|
||||
|
@ -1396,12 +1833,16 @@
|
|||
*/
|
||||
#if (STM32_MCO2SEL == STM32_MCO2SEL_HSE) || defined(__DOXYGEN__)
|
||||
#define STM32_MCO2DIVCLK STM32_HSECLK
|
||||
|
||||
#elif STM32_MCO2SEL == STM32_MCO2SEL_PLL
|
||||
#define STM32_MCO2DIVCLK STM32_PLLCLKOUT
|
||||
|
||||
#elif STM32_MCO2SEL == STM32_MCO2SEL_SYSCLK
|
||||
#define STM32_MCO2DIVCLK STM32_SYSCLK
|
||||
|
||||
#elif STM32_MCO2SEL == STM32_MCO2SEL_PLLI2S
|
||||
#define STM32_MCO2DIVCLK STM32_PLLI2S
|
||||
|
||||
#else
|
||||
#error "invalid STM32_MCO2SEL value specified"
|
||||
#endif
|
||||
|
@ -1411,14 +1852,19 @@
|
|||
*/
|
||||
#if (STM32_MCO2PRE == STM32_MCO2PRE_DIV1) || defined(__DOXYGEN__)
|
||||
#define STM32_MCO2CLK STM32_MCO2DIVCLK
|
||||
|
||||
#elif STM32_MCO2PRE == STM32_MCO2PRE_DIV2
|
||||
#define STM32_MCO2CLK (STM32_MCO2DIVCLK / 2)
|
||||
|
||||
#elif STM32_MCO2PRE == STM32_MCO2PRE_DIV3
|
||||
#define STM32_MCO2CLK (STM32_MCO2DIVCLK / 3)
|
||||
|
||||
#elif STM32_MCO2PRE == STM32_MCO2PRE_DIV4
|
||||
#define STM32_MCO2CLK (STM32_MCO2DIVCLK / 4)
|
||||
|
||||
#elif STM32_MCO2PRE == STM32_MCO2PRE_DIV5
|
||||
#define STM32_MCO2CLK (STM32_MCO2DIVCLK / 5)
|
||||
|
||||
#else
|
||||
#error "invalid STM32_MCO2PRE value specified"
|
||||
#endif
|
||||
|
@ -1448,12 +1894,16 @@
|
|||
*/
|
||||
#if (STM32_RTCSEL == STM32_RTCSEL_NOCLOCK) || defined(__DOXYGEN__)
|
||||
#define STM32_RTCCLK 0
|
||||
|
||||
#elif STM32_RTCSEL == STM32_RTCSEL_LSE
|
||||
#define STM32_RTCCLK STM32_LSECLK
|
||||
|
||||
#elif STM32_RTCSEL == STM32_RTCSEL_LSI
|
||||
#define STM32_RTCCLK STM32_LSICLK
|
||||
|
||||
#elif STM32_RTCSEL == STM32_RTCSEL_HSEDIV
|
||||
#define STM32_RTCCLK STM32_HSEDIVCLK
|
||||
|
||||
#else
|
||||
#error "invalid STM32_RTCSEL value specified"
|
||||
#endif
|
||||
|
@ -1462,10 +1912,16 @@
|
|||
* @brief 48MHz frequency.
|
||||
*/
|
||||
#if STM32_CLOCK48_REQUIRED || defined(__DOXYGEN__)
|
||||
#if (STM32_CK48MSEL == STM32_CK48MSEL_PLL) || defined(__DOXYGEN__)
|
||||
#define STM32_PLL48CLK (STM32_PLLVCO / STM32_PLLQ_VALUE)
|
||||
#elif STM32_CK48MSEL == STM32_CK48MSEL_PLLSAI
|
||||
#define STM32_PLL48CLK (STM32_PLLSAIVCO / STM32_PLLSAIP_VALUE)
|
||||
#else
|
||||
#define STM32_PLL48CLK 0
|
||||
#error "invalid source selected for PLL48CLK clock"
|
||||
#endif
|
||||
#else /* !STM32_CLOCK48_REQUIRED */
|
||||
#define STM32_PLL48CLK 0
|
||||
#endif /* !STM32_CLOCK48_REQUIRED */
|
||||
|
||||
/**
|
||||
* @brief Clock of timers connected to APB1
|
||||
|
@ -1547,6 +2003,6 @@ extern "C" {
|
|||
}
|
||||
#endif
|
||||
|
||||
#endif /* _HAL_LLD_H_ */
|
||||
#endif /* HAL_LLD_H */
|
||||
|
||||
/** @} */
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue