update UART clock config, bugfix
shared-hal-ci / Check build (push) Has been cancelled
shared-hal-ci / Check formatting (push) Has been cancelled
shared-hal-ci / Check Documentation Build (push) Has been cancelled
shared-hal-ci / Clippy (push) Has been cancelled
va108xx-ci / Check build (push) Has been cancelled
va108xx-ci / Run Tests (push) Has been cancelled
va108xx-ci / Check formatting (push) Has been cancelled
va108xx-ci / Check Documentation Build (push) Has been cancelled
va108xx-ci / Clippy (push) Has been cancelled
va416xx-ci / Check build (push) Has been cancelled
va416xx-ci / Run Tests (push) Has been cancelled
va416xx-ci / Check formatting (push) Has been cancelled
va416xx-ci / Check Documentation Build (push) Has been cancelled
va416xx-ci / Clippy (push) Has been cancelled
shared-hal-ci / Check build (pull_request) Has been cancelled
shared-hal-ci / Check formatting (pull_request) Has been cancelled
shared-hal-ci / Check Documentation Build (pull_request) Has been cancelled
shared-hal-ci / Clippy (pull_request) Has been cancelled
va108xx-ci / Check build (pull_request) Has been cancelled
va108xx-ci / Run Tests (pull_request) Has been cancelled
va108xx-ci / Check formatting (pull_request) Has been cancelled
va108xx-ci / Check Documentation Build (pull_request) Has been cancelled
va108xx-ci / Clippy (pull_request) Has been cancelled
va416xx-ci / Check build (pull_request) Has been cancelled
va416xx-ci / Run Tests (pull_request) Has been cancelled
va416xx-ci / Check formatting (pull_request) Has been cancelled
va416xx-ci / Check Documentation Build (pull_request) Has been cancelled
va416xx-ci / Clippy (pull_request) Has been cancelled

This commit is contained in:
Robin Mueller
2026-04-25 22:16:22 +02:00
parent 73c8d30078
commit 97a66f22e2
14 changed files with 197 additions and 119 deletions
+50
View File
@@ -0,0 +1,50 @@
use arbitrary_int::{u6, u18};
#[derive(Debug, Copy, Clone)]
pub struct ClockConfig {
pub frac: u6,
pub int: u18,
}
#[derive(Debug, Copy, Clone)]
pub enum BaudMultiplier {
_8 = 8,
_16 = 16,
}
pub fn uart_clock_calc(ref_clk: u32, baudrate: u32, baud_mult: BaudMultiplier) -> ClockConfig {
// This is the calculation: (64.0 * (x - integer_part as f32) + 0.5) as u32 without floating
// point calculations.
let multiplier = baud_mult as u32;
let frac = ((ref_clk % (baudrate * multiplier)) * 64 + (baudrate * (multiplier / 2)))
/ (baudrate * multiplier);
// Calculations here are derived from chapter 4.8.5 (p.79) of the datasheet.
let integer_part = ref_clk / (baudrate * multiplier);
ClockConfig {
frac: u6::new(frac as u8),
int: u18::new(integer_part),
}
}
const SYS_CLK_50_MHZ: u32 = 50_000_000;
fn main() {
println!("UART Clock Configuration App");
let clock_config = uart_clock_calc(SYS_CLK_50_MHZ, 38400, BaudMultiplier::_16);
println!(
"For a reference clock of {} Hz and baud rate of {} bps with multiplier {}, the clock configuration is: {:?}",
SYS_CLK_50_MHZ,
38400,
BaudMultiplier::_16 as u32,
clock_config
);
let clock_config = uart_clock_calc(SYS_CLK_50_MHZ, 38400, BaudMultiplier::_8);
println!(
"For a reference clock of {} Hz and baud rate of {} bps with multiplier {}, the clock configuration is: {:?}",
SYS_CLK_50_MHZ,
38400,
BaudMultiplier::_8 as u32,
clock_config
);
()
}