f4-pll: Add max values per chip

This commit is contained in:
Thales Fragoso 2021-07-28 17:32:36 -03:00
parent e7714983b3
commit 5cfb9adad8
3 changed files with 273 additions and 13 deletions

View File

@ -0,0 +1,268 @@
#[cfg(any(
feature = "stm32f401cb",
feature = "stm32f401cc",
feature = "stm32f401cd",
feature = "stm32f401ce",
feature = "stm32f401rb",
feature = "stm32f401rc",
feature = "stm32f401rd",
feature = "stm32f401re",
feature = "stm32f401vb",
feature = "stm32f401vc",
feature = "stm32f401vd",
feature = "stm32f401ve",
))]
pub(crate) const SYSCLK_MAX: u32 = 84_000_000;
#[cfg(any(
feature = "stm32f405oe",
feature = "stm32f405og",
feature = "stm32f405rg",
feature = "stm32f405vg",
feature = "stm32f405zg",
feature = "stm32f407ie",
feature = "stm32f407ig",
feature = "stm32f407ve",
feature = "stm32f407vg",
feature = "stm32f407ze",
feature = "stm32f407zg",
feature = "stm32f415og",
feature = "stm32f415rg",
feature = "stm32f415vg",
feature = "stm32f415zg",
feature = "stm32f417ie",
feature = "stm32f417ig",
feature = "stm32f417ve",
feature = "stm32f417vg",
feature = "stm32f417ze",
feature = "stm32f417zg",
))]
pub(crate) const SYSCLK_MAX: u32 = 168_000_000;
#[cfg(any(
feature = "stm32f410c8",
feature = "stm32f410cb",
feature = "stm32f410r8",
feature = "stm32f410rb",
feature = "stm32f410t8",
feature = "stm32f410tb",
feature = "stm32f411cc",
feature = "stm32f411ce",
feature = "stm32f411rc",
feature = "stm32f411re",
feature = "stm32f411vc",
feature = "stm32f411ve",
feature = "stm32f412ce",
feature = "stm32f412cg",
feature = "stm32f412re",
feature = "stm32f412rg",
feature = "stm32f412ve",
feature = "stm32f412vg",
feature = "stm32f412ze",
feature = "stm32f412zg",
feature = "stm32f413cg",
feature = "stm32f413ch",
feature = "stm32f413mg",
feature = "stm32f413mh",
feature = "stm32f413rg",
feature = "stm32f413rh",
feature = "stm32f413vg",
feature = "stm32f413vh",
feature = "stm32f413zg",
feature = "stm32f413zh",
feature = "stm32f423ch",
feature = "stm32f423mh",
feature = "stm32f423rh",
feature = "stm32f423vh",
feature = "stm32f423zh",
))]
pub(crate) const SYSCLK_MAX: u32 = 100_000_000;
#[cfg(any(
feature = "stm32f427ag",
feature = "stm32f427ai",
feature = "stm32f427ig",
feature = "stm32f427ii",
feature = "stm32f427vg",
feature = "stm32f427vi",
feature = "stm32f427zg",
feature = "stm32f427zi",
feature = "stm32f429ag",
feature = "stm32f429ai",
feature = "stm32f429be",
feature = "stm32f429bg",
feature = "stm32f429bi",
feature = "stm32f429ie",
feature = "stm32f429ig",
feature = "stm32f429ii",
feature = "stm32f429ne",
feature = "stm32f429ng",
feature = "stm32f429ni",
feature = "stm32f429ve",
feature = "stm32f429vg",
feature = "stm32f429vi",
feature = "stm32f429ze",
feature = "stm32f429zg",
feature = "stm32f429zi",
feature = "stm32f437ai",
feature = "stm32f437ig",
feature = "stm32f437ii",
feature = "stm32f437vg",
feature = "stm32f437vi",
feature = "stm32f437zg",
feature = "stm32f437zi",
feature = "stm32f439ai",
feature = "stm32f439bg",
feature = "stm32f439bi",
feature = "stm32f439ig",
feature = "stm32f439ii",
feature = "stm32f439ng",
feature = "stm32f439ni",
feature = "stm32f439vg",
feature = "stm32f439vi",
feature = "stm32f439zg",
feature = "stm32f439zi",
feature = "stm32f446mc",
feature = "stm32f446me",
feature = "stm32f446rc",
feature = "stm32f446re",
feature = "stm32f446vc",
feature = "stm32f446ve",
feature = "stm32f446zc",
feature = "stm32f446ze",
feature = "stm32f469ae",
feature = "stm32f469ag",
feature = "stm32f469ai",
feature = "stm32f469be",
feature = "stm32f469bg",
feature = "stm32f469bi",
feature = "stm32f469ie",
feature = "stm32f469ig",
feature = "stm32f469ii",
feature = "stm32f469ne",
feature = "stm32f469ng",
feature = "stm32f469ni",
feature = "stm32f469ve",
feature = "stm32f469vg",
feature = "stm32f469vi",
feature = "stm32f469ze",
feature = "stm32f469zg",
feature = "stm32f469zi",
feature = "stm32f479ag",
feature = "stm32f479ai",
feature = "stm32f479bg",
feature = "stm32f479bi",
feature = "stm32f479ig",
feature = "stm32f479ii",
feature = "stm32f479ng",
feature = "stm32f479ni",
feature = "stm32f479vg",
feature = "stm32f479vi",
feature = "stm32f479zg",
feature = "stm32f479zi",
))]
pub(crate) const SYSCLK_MAX: u32 = 180_000_000;
#[cfg(any(
feature = "stm32f401cb",
feature = "stm32f401cc",
feature = "stm32f401cd",
feature = "stm32f401ce",
feature = "stm32f401rb",
feature = "stm32f401rc",
feature = "stm32f401rd",
feature = "stm32f401re",
feature = "stm32f401vb",
feature = "stm32f401vc",
feature = "stm32f401vd",
feature = "stm32f401ve",
feature = "stm32f410c8",
feature = "stm32f410cb",
feature = "stm32f410r8",
feature = "stm32f410rb",
feature = "stm32f410t8",
feature = "stm32f410tb",
feature = "stm32f411cc",
feature = "stm32f411ce",
feature = "stm32f411rc",
feature = "stm32f411re",
feature = "stm32f411vc",
feature = "stm32f411ve",
feature = "stm32f412ce",
feature = "stm32f412cg",
feature = "stm32f412re",
feature = "stm32f412rg",
feature = "stm32f412ve",
feature = "stm32f412vg",
feature = "stm32f412ze",
feature = "stm32f412zg",
feature = "stm32f413cg",
feature = "stm32f413ch",
feature = "stm32f413mg",
feature = "stm32f413mh",
feature = "stm32f413rg",
feature = "stm32f413rh",
feature = "stm32f413vg",
feature = "stm32f413vh",
feature = "stm32f413zg",
feature = "stm32f413zh",
feature = "stm32f423ch",
feature = "stm32f423mh",
feature = "stm32f423rh",
feature = "stm32f423vh",
feature = "stm32f423zh",
))]
pub(crate) const PCLK2_MAX: u32 = SYSCLK_MAX;
#[cfg(not(any(
feature = "stm32f401cb",
feature = "stm32f401cc",
feature = "stm32f401cd",
feature = "stm32f401ce",
feature = "stm32f401rb",
feature = "stm32f401rc",
feature = "stm32f401rd",
feature = "stm32f401re",
feature = "stm32f401vb",
feature = "stm32f401vc",
feature = "stm32f401vd",
feature = "stm32f401ve",
feature = "stm32f410c8",
feature = "stm32f410cb",
feature = "stm32f410r8",
feature = "stm32f410rb",
feature = "stm32f410t8",
feature = "stm32f410tb",
feature = "stm32f411cc",
feature = "stm32f411ce",
feature = "stm32f411rc",
feature = "stm32f411re",
feature = "stm32f411vc",
feature = "stm32f411ve",
feature = "stm32f412ce",
feature = "stm32f412cg",
feature = "stm32f412re",
feature = "stm32f412rg",
feature = "stm32f412ve",
feature = "stm32f412vg",
feature = "stm32f412ze",
feature = "stm32f412zg",
feature = "stm32f413cg",
feature = "stm32f413ch",
feature = "stm32f413mg",
feature = "stm32f413mh",
feature = "stm32f413rg",
feature = "stm32f413rh",
feature = "stm32f413vg",
feature = "stm32f413vh",
feature = "stm32f413zg",
feature = "stm32f413zh",
feature = "stm32f423ch",
feature = "stm32f423mh",
feature = "stm32f423rh",
feature = "stm32f423vh",
feature = "stm32f423zh",
)))]
pub(crate) const PCLK2_MAX: u32 = SYSCLK_MAX / 2;
pub(crate) const PCLK1_MAX: u32 = PCLK2_MAX / 2;

View File

@ -5,13 +5,10 @@ use crate::time::Hertz;
use core::marker::PhantomData;
use embassy::util::Unborrow;
const HSI: u32 = 16_000_000;
mod max;
use max::{PCLK1_MAX, PCLK2_MAX};
// TODO: This is for the F401, find a way to make it compile time configurable
const SYSCLK_MIN: u32 = 24_000_000;
const SYSCLK_MAX: u32 = 84_000_000;
const PCLK2_MAX: u32 = SYSCLK_MAX;
const PCLK1_MAX: u32 = PCLK2_MAX / 2;
const HSI: u32 = 16_000_000;
/// Clocks configutation
#[non_exhaustive]
@ -69,7 +66,6 @@ impl<'d> Rcc<'d> {
} else {
sysclk
};
assert!((SYSCLK_MIN..=SYSCLK_MAX).contains(&sysclk), "sysclk");
let hclk = self.config.hclk.map(|h| h.0).unwrap_or(sysclk);
let (hpre_bits, hpre_div) = match (sysclk + hclk - 1) / hclk {
@ -247,7 +243,7 @@ impl<'d> Rcc<'d> {
.unwrap();
let vco_in = pllsrcclk / pllm;
assert!((1_000_000..=2_000_000).contains(&vco_in), "vco_in");
assert!((1_000_000..=2_000_000).contains(&vco_in));
// Main scaler, must result in >= 100MHz (>= 192MHz for F401)
// and <= 432MHz, min 50, max 432
@ -266,10 +262,6 @@ impl<'d> Rcc<'d> {
} else {
sysclk * sysclk_div / vco_in
};
assert!(
(192_000_000..=432_000_000).contains(&(vco_in * plln)),
"plln"
);
let pllp = (sysclk_div / 2) - 1;

View File

@ -19,7 +19,7 @@ mod example_common;
fn config() -> Config {
let mut rcc_config = RccConfig::default();
rcc_config.sys_ck = Some(Hertz(32_000_000));
rcc_config.sys_ck = Some(Hertz(84_000_000));
rcc_config.enable_debug_wfe = true;
Config::default().rcc(rcc_config)