STM32 FLASH latency is calculated based on Vin.
This commit is contained in:
parent
52416888f7
commit
e26daf9357
@ -55,25 +55,82 @@
|
|||||||
|
|
||||||
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
#define HSERDY_TIMEOUT (100 * CONFIG_BOARD_LOOPSPERMSEC)
|
||||||
|
|
||||||
/* The FLASH latency depends on the system clock.
|
/* The FLASH latency depends on the system clock, and voltage input
|
||||||
*
|
* of the microcontroller. The following macros calculate the correct
|
||||||
* Calculate the wait cycles, based on STM32_SYSCLK_FREQUENCY:
|
* wait cycles for every STM32_SYSCLK_FREQUENCY & BOARD_STM32F2_VDD
|
||||||
* 0WS from 0-30MHz
|
* combination. BOARD_STM32F2_VDD is defined in mV.
|
||||||
* 1WS from 30-60MHz
|
|
||||||
* 2WS from 60-90MHz
|
|
||||||
* 3WS from 90-120MHz
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (STM32_SYSCLK_FREQUENCY <= 30000000)
|
#ifndef BOARD_STM32F2_VDD
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
# define BOARD_STM32F2_VDD 3300
|
||||||
#elif (STM32_SYSCLK_FREQUENCY <= 60000000)
|
#endif
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
|
||||||
#elif (STM32_SYSCLK_FREQUENCY <= 90000000)
|
#if (BOARD_STM32F2_VDD <= 2100)
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
# if (STM32_SYSCLK_FREQUENCY <= 16000000)
|
||||||
#elif (STM32_SYSCLK_FREQUENCY <= 120000000)
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
# elif (STM32_SYSCLK_FREQUENCY <= 32000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 48000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 64000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 80000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_4
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 96000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 112000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_6
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 120000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_7
|
||||||
|
# else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
# endif
|
||||||
|
#elif (BOARD_STM32F2_VDD <= 2400)
|
||||||
|
# if (STM32_SYSCLK_FREQUENCY <= 18000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 36000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 54000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 72000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 90000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_4
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 108000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 120000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_6
|
||||||
|
# else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
# endif
|
||||||
|
#elif (BOARD_STM32F2_VDD <= 2700)
|
||||||
|
# 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
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 96000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 120000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_4
|
||||||
|
# else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
# endif
|
||||||
|
#elif (BOARD_STM32F2_VDD <= 3600)
|
||||||
|
# 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
|
||||||
#else
|
#else
|
||||||
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
# error "BOARD_STM32F2_VDD is out of range!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -68,31 +68,112 @@
|
|||||||
|
|
||||||
#define HSE_DIVISOR (STM32_HSE_FREQUENCY + 500000) / 1000000
|
#define HSE_DIVISOR (STM32_HSE_FREQUENCY + 500000) / 1000000
|
||||||
|
|
||||||
/* The FLASH latency depends on the system clock.
|
/* The FLASH latency depends on the system clock, and voltage input
|
||||||
*
|
* of the microcontroller. The following macros calculate the correct
|
||||||
* Calculate the wait cycles, based on STM32_SYSCLK_FREQUENCY:
|
* wait cycles for every STM32_SYSCLK_FREQUENCY & BOARD_STM32F4_VDD
|
||||||
* 0WS from 0-30MHz
|
* combination. BOARD_STM32F4_VDD is defined in mV.
|
||||||
* 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)
|
#ifndef BOARD_STM32F4_VDD
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
# define BOARD_STM32F4_VDD 3300
|
||||||
#elif (STM32_SYSCLK_FREQUENCY <= 60000000)
|
#endif
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
|
||||||
#elif (STM32_SYSCLK_FREQUENCY <= 90000000)
|
#if (BOARD_STM32F4_VDD <= 2100)
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
# if (STM32_SYSCLK_FREQUENCY <= 20000000)
|
||||||
#elif (STM32_SYSCLK_FREQUENCY <= 120000000)
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
# elif (STM32_SYSCLK_FREQUENCY <= 40000000)
|
||||||
#elif (STM32_SYSCLK_FREQUENCY <= 150000000)
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_4
|
# elif (STM32_SYSCLK_FREQUENCY <= 60000000)
|
||||||
#elif (STM32_SYSCLK_FREQUENCY <= 180000000)
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5
|
# elif (STM32_SYSCLK_FREQUENCY <= 800000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 100000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_4
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 120000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 140000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_6
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 160000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_7
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 168000000) && \
|
||||||
|
(defined(CONFIG_STM32_STM32F427) || defined(CONFIG_STM32_STM32F429) || \
|
||||||
|
defined(CONFIG_STM32_STM32F446) || defined(CONFIG_STM32_STM32F469))
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_8
|
||||||
|
# else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
# endif
|
||||||
|
#elif (BOARD_STM32F4_VDD <= 2400)
|
||||||
|
# if (STM32_SYSCLK_FREQUENCY <= 22000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_0
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 44000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_1
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 66000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_2
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 880000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 110000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_4
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 132000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 154000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_6
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 168000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_7
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 176000000) && \
|
||||||
|
(defined(CONFIG_STM32_STM32F427) || defined(CONFIG_STM32_STM32F429) || \
|
||||||
|
defined(CONFIG_STM32_STM32F446) || defined(CONFIG_STM32_STM32F469))
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_7
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 180000000) && \
|
||||||
|
(defined(CONFIG_STM32_STM32F427) || defined(CONFIG_STM32_STM32F429) || \
|
||||||
|
defined(CONFIG_STM32_STM32F446) || defined(CONFIG_STM32_STM32F469))
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_8
|
||||||
|
# else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
# endif
|
||||||
|
#elif (BOARD_STM32F4_VDD <= 2700)
|
||||||
|
# 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
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 960000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_3
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 120000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_4
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 144000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 168000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_6
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 180000000) && \
|
||||||
|
(defined(CONFIG_STM32_STM32F427) || defined(CONFIG_STM32_STM32F429) || \
|
||||||
|
defined(CONFIG_STM32_STM32F446) || defined(CONFIG_STM32_STM32F469))
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_7
|
||||||
|
# else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
# endif
|
||||||
|
#elif (BOARD_STM32F4_VDD <= 3600)
|
||||||
|
# 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 <= 168000000)
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5
|
||||||
|
# elif (STM32_SYSCLK_FREQUENCY <= 180000000) && \
|
||||||
|
(defined(CONFIG_STM32_STM32F427) || defined(CONFIG_STM32_STM32F429) || \
|
||||||
|
defined(CONFIG_STM32_STM32F446) || defined(CONFIG_STM32_STM32F469))
|
||||||
|
# define FLASH_ACR_LATENCY_SETTING FLASH_ACR_LATENCY_5
|
||||||
|
# else
|
||||||
|
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# error "STM32_SYSCLK_FREQUENCY is out of range!"
|
# error "BOARD_STM32F4_VDD is out of range!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -815,7 +896,7 @@ static void stm32_stdclockconfig(void)
|
|||||||
#ifdef CONFIG_STM32_FLASH_DCACHE
|
#ifdef CONFIG_STM32_FLASH_DCACHE
|
||||||
| FLASH_ACR_DCEN
|
| FLASH_ACR_DCEN
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_STM32_FLASH_PREFETCH
|
#if defined(CONFIG_STM32_FLASH_PREFETCH) && (BOARD_STM32F4_VDD > 2100)
|
||||||
| FLASH_ACR_PRFTEN
|
| FLASH_ACR_PRFTEN
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user