aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2025-04-30 17:08:58 +0000
committerGitHub <[email protected]>2025-04-30 17:08:58 +0000
commit52e4c7c30c5f59d10afbef2447b96da68f4be0bc (patch)
tree26ecc28e7c0e760aa8c16a1d9eb294d9b95507e4
parentbd8021fe99c54241beaf9ee6b8adaa188cf573ab (diff)
parent0591d60a7931255fd1161608c69c4935d6a16676 (diff)
Merge pull request #4149 from embassy-rs/stm32-otg-fix-trdt
stm32/otg: calculate TRDT using AHB freq instead of kernel freq.
-rw-r--r--embassy-stm32/build.rs5
-rw-r--r--embassy-stm32/src/rcc/mod.rs2
-rw-r--r--embassy-stm32/src/usb/otg.rs2
3 files changed, 8 insertions, 1 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs
index f9f03c51b..3fefa9717 100644
--- a/embassy-stm32/build.rs
+++ b/embassy-stm32/build.rs
@@ -647,6 +647,8 @@ fn main() {
647 PeripheralRccKernelClock::Clock(clock) => clock_gen.gen_clock(p.name, clock), 647 PeripheralRccKernelClock::Clock(clock) => clock_gen.gen_clock(p.name, clock),
648 }; 648 };
649 649
650 let bus_clock_frequency = clock_gen.gen_clock(p.name, &rcc.bus_clock);
651
650 // A refcount leak can result if the same field is shared by peripherals with different stop modes 652 // A refcount leak can result if the same field is shared by peripherals with different stop modes
651 // This condition should be checked in stm32-data 653 // This condition should be checked in stm32-data
652 let stop_mode = match rcc.stop_mode { 654 let stop_mode = match rcc.stop_mode {
@@ -660,6 +662,9 @@ fn main() {
660 fn frequency() -> crate::time::Hertz { 662 fn frequency() -> crate::time::Hertz {
661 #clock_frequency 663 #clock_frequency
662 } 664 }
665 fn bus_frequency() -> crate::time::Hertz {
666 #bus_clock_frequency
667 }
663 668
664 const RCC_INFO: crate::rcc::RccInfo = unsafe { 669 const RCC_INFO: crate::rcc::RccInfo = unsafe {
665 crate::rcc::RccInfo::new( 670 crate::rcc::RccInfo::new(
diff --git a/embassy-stm32/src/rcc/mod.rs b/embassy-stm32/src/rcc/mod.rs
index 4f43d3748..150daa4a7 100644
--- a/embassy-stm32/src/rcc/mod.rs
+++ b/embassy-stm32/src/rcc/mod.rs
@@ -97,6 +97,8 @@ pub(crate) unsafe fn get_freqs() -> &'static Clocks {
97 97
98pub(crate) trait SealedRccPeripheral { 98pub(crate) trait SealedRccPeripheral {
99 fn frequency() -> Hertz; 99 fn frequency() -> Hertz;
100 #[allow(dead_code)]
101 fn bus_frequency() -> Hertz;
100 const RCC_INFO: RccInfo; 102 const RCC_INFO: RccInfo;
101} 103}
102 104
diff --git a/embassy-stm32/src/usb/otg.rs b/embassy-stm32/src/usb/otg.rs
index 2aca3d929..590d1a427 100644
--- a/embassy-stm32/src/usb/otg.rs
+++ b/embassy-stm32/src/usb/otg.rs
@@ -549,7 +549,7 @@ foreach_interrupt!(
549); 549);
550 550
551fn calculate_trdt<T: Instance>(speed: Dspd) -> u8 { 551fn calculate_trdt<T: Instance>(speed: Dspd) -> u8 {
552 let ahb_freq = T::frequency().0; 552 let ahb_freq = T::bus_frequency().0;
553 match speed { 553 match speed {
554 Dspd::HIGH_SPEED => { 554 Dspd::HIGH_SPEED => {
555 // From RM0431 (F72xx), RM0090 (F429), RM0390 (F446) 555 // From RM0431 (F72xx), RM0090 (F429), RM0390 (F446)