aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-rp/src/uart/mod.rs24
1 files changed, 10 insertions, 14 deletions
diff --git a/embassy-rp/src/uart/mod.rs b/embassy-rp/src/uart/mod.rs
index 6b3e2406d..42b3671a0 100644
--- a/embassy-rp/src/uart/mod.rs
+++ b/embassy-rp/src/uart/mod.rs
@@ -296,7 +296,7 @@ impl<'d, T: Instance> Uart<'d, T, Async> {
296 Some(rx_dma.map_into()), 296 Some(rx_dma.map_into()),
297 config, 297 config,
298 ) 298 )
299 } 299 }
300} 300}
301 301
302impl<'d, T: Instance + 'd, M: Mode> Uart<'d, T, M> { 302impl<'d, T: Instance + 'd, M: Mode> Uart<'d, T, M> {
@@ -350,7 +350,7 @@ impl<'d, T: Instance + 'd, M: Mode> Uart<'d, T, M> {
350 pin.pad_ctrl().write(|w| w.set_ie(true)); 350 pin.pad_ctrl().write(|w| w.set_ie(true));
351 } 351 }
352 352
353 Self::set_baudrate_inner(config.baudrate); 353 Self::set_baudrate_inner(config.baudrate);
354 354
355 let (pen, eps) = match config.parity { 355 let (pen, eps) = match config.parity {
356 Parity::ParityNone => (false, false), 356 Parity::ParityNone => (false, false),
@@ -385,22 +385,20 @@ impl<'d, T: Instance + 'd, M: Mode> Uart<'d, T, M> {
385 } 385 }
386 } 386 }
387 387
388
389 /// sets baudrate on runtime 388 /// sets baudrate on runtime
390 pub fn set_baudrate(&mut self, baudrate: u32) { 389 pub fn set_baudrate(&mut self, baudrate: u32) {
391 Self::set_baudrate_inner(baudrate); 390 Self::set_baudrate_inner(baudrate);
392 } 391 }
393 392
394
395 fn set_baudrate_inner(baudrate: u32) { 393 fn set_baudrate_inner(baudrate: u32) {
396 let r = T::regs(); 394 let r = T::regs();
397 395
398 let clk_base = crate::clocks::clk_peri_freq(); 396 let clk_base = crate::clocks::clk_peri_freq();
399 397
400 let baud_rate_div = (8 * clk_base) / baudrate; 398 let baud_rate_div = (8 * clk_base) / baudrate;
401 let mut baud_ibrd = baud_rate_div >> 7; 399 let mut baud_ibrd = baud_rate_div >> 7;
402 let mut baud_fbrd = ((baud_rate_div & 0x7f) + 1) / 2; 400 let mut baud_fbrd = ((baud_rate_div & 0x7f) + 1) / 2;
403 401
404 if baud_ibrd == 0 { 402 if baud_ibrd == 0 {
405 baud_ibrd = 1; 403 baud_ibrd = 1;
406 baud_fbrd = 0; 404 baud_fbrd = 0;
@@ -408,15 +406,13 @@ impl<'d, T: Instance + 'd, M: Mode> Uart<'d, T, M> {
408 baud_ibrd = 65535; 406 baud_ibrd = 65535;
409 baud_fbrd = 0; 407 baud_fbrd = 0;
410 } 408 }
411 409
412 unsafe { 410 unsafe {
413 411 // Load PL011's baud divisor registers
414 // Load PL011's baud divisor registers
415 r.uartibrd().write_value(pac::uart::regs::Uartibrd(baud_ibrd)); 412 r.uartibrd().write_value(pac::uart::regs::Uartibrd(baud_ibrd));
416 r.uartfbrd().write_value(pac::uart::regs::Uartfbrd(baud_fbrd)); 413 r.uartfbrd().write_value(pac::uart::regs::Uartfbrd(baud_fbrd));
417 } 414 }
418 } 415 }
419
420} 416}
421 417
422impl<'d, T: Instance, M: Mode> Uart<'d, T, M> { 418impl<'d, T: Instance, M: Mode> Uart<'d, T, M> {