FLASH waiting cycles are configured based on HCLK.
This commit is contained in:
parent
32b49e6db8
commit
f538839720
@ -49,6 +49,24 @@
|
|||||||
|
|
||||||
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
||||||
|
|
||||||
|
/* The FLASH latency depends on the system clock.
|
||||||
|
*
|
||||||
|
* Calculate the wait cycles, based on STM32_SYSCLK_FREQUENCY:
|
||||||
|
* 0WS from 0-24MHz
|
||||||
|
* 1WS from 24-48MHz
|
||||||
|
* 2WS from 48-72MHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (STM32_SYSCLK_FREQUENCY <= 24000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 48000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 78000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
|
#else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -522,16 +540,11 @@ static void stm32_stdclockconfig(void)
|
|||||||
regval |= RCC_CR_HSEON; /* Enable HSE */
|
regval |= RCC_CR_HSEON; /* Enable HSE */
|
||||||
putreg32(regval, STM32_RCC_CR);
|
putreg32(regval, STM32_RCC_CR);
|
||||||
|
|
||||||
/* Set flash wait states
|
/* Enable prefetch buffer and set FLASH wait states */
|
||||||
* Sysclk runs with 72MHz -> 2 waitstates.
|
|
||||||
* 0WS from 0-24MHz
|
|
||||||
* 1WS from 24-48MHz
|
|
||||||
* 2WS from 48-72MHz
|
|
||||||
*/
|
|
||||||
|
|
||||||
regval = getreg32(STM32_FLASH_ACR);
|
regval = getreg32(STM32_FLASH_ACR);
|
||||||
regval &= ~FLASH_ACR_LATENCY_MASK;
|
regval &= ~FLASH_ACR_LATENCY_MASK;
|
||||||
regval |= (FLASH_ACR_LATENCY_2 | FLASH_ACR_PRTFBE);
|
regval |= (FLASH_ACR_LATENCY_SETTING | FLASH_ACR_PRTFBE);
|
||||||
putreg32(regval, STM32_FLASH_ACR);
|
putreg32(regval, STM32_FLASH_ACR);
|
||||||
|
|
||||||
/* Set up PLL input scaling (with source = PLL2) */
|
/* Set up PLL input scaling (with source = PLL2) */
|
||||||
@ -687,11 +700,11 @@ static void stm32_stdclockconfig(void)
|
|||||||
|
|
||||||
#ifndef CONFIG_STM32_VALUELINE
|
#ifndef CONFIG_STM32_VALUELINE
|
||||||
|
|
||||||
/* Enable FLASH prefetch buffer and 2 wait states */
|
/* Enable FLASH prefetch buffer and set FLASH wait states */
|
||||||
|
|
||||||
regval = getreg32(STM32_FLASH_ACR);
|
regval = getreg32(STM32_FLASH_ACR);
|
||||||
regval &= ~FLASH_ACR_LATENCY_MASK;
|
regval &= ~FLASH_ACR_LATENCY_MASK;
|
||||||
regval |= (FLASH_ACR_LATENCY_2 | FLASH_ACR_PRTFBE);
|
regval |= (FLASH_ACR_LATENCY_SETTING | FLASH_ACR_PRTFBE);
|
||||||
putreg32(regval, STM32_FLASH_ACR);
|
putreg32(regval, STM32_FLASH_ACR);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -55,6 +55,27 @@
|
|||||||
|
|
||||||
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
||||||
|
|
||||||
|
/* The FLASH latency depends on the system clock.
|
||||||
|
*
|
||||||
|
* Calculate the wait cycles, based on STM32_SYSCLK_FREQUENCY:
|
||||||
|
* 0WS from 0-30MHz
|
||||||
|
* 1WS from 30-60MHz
|
||||||
|
* 2WS from 60-90MHz
|
||||||
|
* 3WS from 90-120MHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (STM32_SYSCLK_FREQUENCY <= 30000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 60000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 90000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 120000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
||||||
|
#else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -646,10 +667,10 @@ static void stm32_stdclockconfig(void)
|
|||||||
while ((getreg32(STM32_RCC_CR) & RCC_CR_PLLRDY) == 0);
|
while ((getreg32(STM32_RCC_CR) & RCC_CR_PLLRDY) == 0);
|
||||||
|
|
||||||
/* Enable FLASH prefetch, instruction cache, data cache,
|
/* Enable FLASH prefetch, instruction cache, data cache,
|
||||||
* and 5 wait states.
|
* and set FLASH wait states.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
regval = (FLASH_ACR_LATENCY_5
|
regval = (FLASH_ACR_LATENCY_SETTING
|
||||||
#ifdef CONFIG_STM32_FLASH_ICACHE
|
#ifdef CONFIG_STM32_FLASH_ICACHE
|
||||||
| FLASH_ACR_ICEN
|
| FLASH_ACR_ICEN
|
||||||
#endif
|
#endif
|
||||||
|
@ -49,6 +49,24 @@
|
|||||||
|
|
||||||
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
||||||
|
|
||||||
|
/* The FLASH latency depends on the system clock.
|
||||||
|
*
|
||||||
|
* Calculate the wait cycles, based on STM32_SYSCLK_FREQUENCY:
|
||||||
|
* 0WS from 0-24MHz
|
||||||
|
* 1WS from 24-48MHz
|
||||||
|
* 2WS from 48-72MHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (STM32_SYSCLK_FREQUENCY <= 24000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 48000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 72000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
|
#else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -431,16 +449,11 @@ static void stm32_stdclockconfig(void)
|
|||||||
regval |= RCC_CR_HSEON; /* Enable HSE */
|
regval |= RCC_CR_HSEON; /* Enable HSE */
|
||||||
putreg32(regval, STM32_RCC_CR);
|
putreg32(regval, STM32_RCC_CR);
|
||||||
|
|
||||||
/* Set flash wait states
|
/* Enable FLASH prefetch buffer and set FLASH wait states */
|
||||||
* Sysclk runs with 72MHz -> 2 waitstates.
|
|
||||||
* 0WS from 0-24MHz
|
|
||||||
* 1WS from 24-48MHz
|
|
||||||
* 2WS from 48-72MHz
|
|
||||||
*/
|
|
||||||
|
|
||||||
regval = getreg32(STM32_FLASH_ACR);
|
regval = getreg32(STM32_FLASH_ACR);
|
||||||
regval &= ~FLASH_ACR_LATENCY_MASK;
|
regval &= ~FLASH_ACR_LATENCY_MASK;
|
||||||
regval |= (FLASH_ACR_LATENCY_2 | FLASH_ACR_PRTFBE);
|
regval |= (FLASH_ACR_LATENCY_SETTING | FLASH_ACR_PRTFBE);
|
||||||
putreg32(regval, STM32_FLASH_ACR);
|
putreg32(regval, STM32_FLASH_ACR);
|
||||||
|
|
||||||
/* Set up PLL input scaling (with source = PLL2) */
|
/* Set up PLL input scaling (with source = PLL2) */
|
||||||
@ -594,11 +607,11 @@ static void stm32_stdclockconfig(void)
|
|||||||
|
|
||||||
#ifndef CONFIG_STM32_VALUELINE
|
#ifndef CONFIG_STM32_VALUELINE
|
||||||
/* Value-line devices don't implement flash prefetch/waitstates */
|
/* Value-line devices don't implement flash prefetch/waitstates */
|
||||||
/* Enable FLASH prefetch buffer and 2 wait states */
|
/* Enable FLASH prefetch buffer and set FLASH wait states */
|
||||||
|
|
||||||
regval = getreg32(STM32_FLASH_ACR);
|
regval = getreg32(STM32_FLASH_ACR);
|
||||||
regval &= ~FLASH_ACR_LATENCY_MASK;
|
regval &= ~FLASH_ACR_LATENCY_MASK;
|
||||||
regval |= (FLASH_ACR_LATENCY_2 | FLASH_ACR_PRTFBE);
|
regval |= (FLASH_ACR_LATENCY_SETTING | FLASH_ACR_PRTFBE);
|
||||||
putreg32(regval, STM32_FLASH_ACR);
|
putreg32(regval, STM32_FLASH_ACR);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -50,6 +50,24 @@
|
|||||||
|
|
||||||
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
||||||
|
|
||||||
|
/* The FLASH latency depends on the system clock.
|
||||||
|
*
|
||||||
|
* Calculate the wait cycles, based on STM32_SYSCLK_FREQUENCY:
|
||||||
|
* 0WS from 0-24MHz
|
||||||
|
* 1WS from 24-48MHz
|
||||||
|
* 2WS from 48-72MHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (STM32_SYSCLK_FREQUENCY <= 24000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 48000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 72000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
|
#else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -435,25 +453,11 @@ static void stm32_stdclockconfig(void)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Set flash wait states according to sysclk:
|
/* Enable FLASH prefetch and wait states */
|
||||||
*
|
|
||||||
* 0WS from 0-24MHz
|
|
||||||
* 1WS from 24-48MHz
|
|
||||||
* 2WS from 48-72MHz
|
|
||||||
*/
|
|
||||||
|
|
||||||
regval = getreg32(STM32_FLASH_ACR);
|
regval = getreg32(STM32_FLASH_ACR);
|
||||||
regval &= ~(FLASH_ACR_LATENCY_MASK);
|
regval &= ~(FLASH_ACR_LATENCY_MASK);
|
||||||
|
regval |= (FLASH_ACR_LATENCY_SETTING | FLASH_ACR_PRTFBE);
|
||||||
#if STM32_SYSCLK_FREQUENCY <= 24000000
|
|
||||||
regval |= FLASH_ACR_LATENCY_0;
|
|
||||||
#elif STM32_SYSCLK_FREQUENCY <= 48000000
|
|
||||||
regval |= FLASH_ACR_LATENCY_1;
|
|
||||||
#else
|
|
||||||
regval |= FLASH_ACR_LATENCY_2;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
regval |= FLASH_ACR_PRTFBE;
|
|
||||||
putreg32(regval, STM32_FLASH_ACR);
|
putreg32(regval, STM32_FLASH_ACR);
|
||||||
|
|
||||||
/* Select the system clock source (probably the PLL) */
|
/* Select the system clock source (probably the PLL) */
|
||||||
|
@ -50,6 +50,24 @@
|
|||||||
|
|
||||||
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
||||||
|
|
||||||
|
/* The FLASH latency depends on the system clock.
|
||||||
|
*
|
||||||
|
* Calculate the wait cycles, based on STM32_SYSCLK_FREQUENCY:
|
||||||
|
* 0WS from 0-24MHz
|
||||||
|
* 1WS from 24-48MHz
|
||||||
|
* 2WS from 48-72MHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (STM32_SYSCLK_FREQUENCY <= 24000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 48000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 72000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
|
#else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -527,11 +545,11 @@ static void stm32_stdclockconfig(void)
|
|||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Enable FLASH prefetch buffer and 2 wait states */
|
/* Enable FLASH prefetch buffer and set FLASH wait states */
|
||||||
|
|
||||||
regval = getreg32(STM32_FLASH_ACR);
|
regval = getreg32(STM32_FLASH_ACR);
|
||||||
regval &= ~FLASH_ACR_LATENCY_MASK;
|
regval &= ~FLASH_ACR_LATENCY_MASK;
|
||||||
regval |= (FLASH_ACR_LATENCY_2 | FLASH_ACR_PRTFBE);
|
regval |= (FLASH_ACR_LATENCY_SETTING | FLASH_ACR_PRTFBE);
|
||||||
putreg32(regval, STM32_FLASH_ACR);
|
putreg32(regval, STM32_FLASH_ACR);
|
||||||
|
|
||||||
/* Set the HCLK source/divider */
|
/* Set the HCLK source/divider */
|
||||||
|
@ -68,6 +68,33 @@
|
|||||||
|
|
||||||
#define HSE_DIVISOR (STM32_HSE_FREQUENCY + 500000) / 1000000
|
#define HSE_DIVISOR (STM32_HSE_FREQUENCY + 500000) / 1000000
|
||||||
|
|
||||||
|
/* The FLASH latency depends on the system clock.
|
||||||
|
*
|
||||||
|
* Calculate the wait cycles, based on STM32_SYSCLK_FREQUENCY:
|
||||||
|
* 0WS from 0-30MHz
|
||||||
|
* 1WS from 30-60MHz
|
||||||
|
* 2WS from 60-90MHz
|
||||||
|
* 3WS from 90-120MHz
|
||||||
|
* 4WS from 120-150MHz
|
||||||
|
* 5WS from 150-180MHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (STM32_SYSCLK_FREQUENCY <= 30000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 60000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 90000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 120000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 150000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_4
|
||||||
|
#elif (STM32_SYSCLK_FREQUENCY <= 180000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5
|
||||||
|
#else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -778,10 +805,10 @@ static void stm32_stdclockconfig(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Enable FLASH prefetch, instruction cache, data cache,
|
/* Enable FLASH prefetch, instruction cache, data cache,
|
||||||
* and 5 wait states.
|
* and set FLASH wait states.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
regval = (FLASH_ACR_LATENCY_5
|
regval = (FLASH_ACR_LATENCY_SETTING
|
||||||
#ifdef CONFIG_STM32_FLASH_ICACHE
|
#ifdef CONFIG_STM32_FLASH_ICACHE
|
||||||
| FLASH_ACR_ICEN
|
| FLASH_ACR_ICEN
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user