mirror of
https://github.com/embassy-rs/embassy.git
synced 2025-10-02 06:40:32 +00:00
sdmmc: use div_ceil.
This commit is contained in:
parent
84cc949df6
commit
3127e1c50b
@ -225,8 +225,7 @@ fn clk_div(ker_ck: Hertz, sdmmc_ck: u32) -> Result<(bool, u8, Hertz), Error> {
|
|||||||
return Ok((true, 0, ker_ck));
|
return Ok((true, 0, ker_ck));
|
||||||
}
|
}
|
||||||
|
|
||||||
// `ker_ck / sdmmc_ck` rounded up
|
let clk_div = match ker_ck.0.div_ceil(sdmmc_ck) {
|
||||||
let clk_div = match (ker_ck.0 + sdmmc_ck - 1) / sdmmc_ck {
|
|
||||||
0 | 1 => Ok(0),
|
0 | 1 => Ok(0),
|
||||||
x @ 2..=258 => Ok((x - 2) as u8),
|
x @ 2..=258 => Ok((x - 2) as u8),
|
||||||
_ => Err(Error::BadClock),
|
_ => Err(Error::BadClock),
|
||||||
@ -244,12 +243,11 @@ fn clk_div(ker_ck: Hertz, sdmmc_ck: u32) -> Result<(bool, u8, Hertz), Error> {
|
|||||||
/// `clk_div` is the divisor register value and `clk_f` is the resulting new clock frequency.
|
/// `clk_div` is the divisor register value and `clk_f` is the resulting new clock frequency.
|
||||||
#[cfg(sdmmc_v2)]
|
#[cfg(sdmmc_v2)]
|
||||||
fn clk_div(ker_ck: Hertz, sdmmc_ck: u32) -> Result<(bool, u16, Hertz), Error> {
|
fn clk_div(ker_ck: Hertz, sdmmc_ck: u32) -> Result<(bool, u16, Hertz), Error> {
|
||||||
// `ker_ck / sdmmc_ck` rounded up
|
match ker_ck.0.div_ceil(sdmmc_ck) {
|
||||||
match (ker_ck.0 + sdmmc_ck - 1) / sdmmc_ck {
|
|
||||||
0 | 1 => Ok((false, 0, ker_ck)),
|
0 | 1 => Ok((false, 0, ker_ck)),
|
||||||
x @ 2..=2046 => {
|
x @ 2..=2046 => {
|
||||||
// SDMMC_CK frequency = SDMMCCLK / [CLKDIV * 2]
|
// SDMMC_CK frequency = SDMMCCLK / [CLKDIV * 2]
|
||||||
let clk_div = ((x + 1) / 2) as u16;
|
let clk_div = x.div_ceil(2) as u16;
|
||||||
let clk = Hertz(ker_ck.0 / (clk_div as u32 * 2));
|
let clk = Hertz(ker_ck.0 / (clk_div as u32 * 2));
|
||||||
|
|
||||||
Ok((false, clk_div, clk))
|
Ok((false, clk_div, clk))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user