@@ -6,13 +6,6 @@ use super::{BusClock, BusTimerClock, RccBus};
6
6
use fugit:: HertzU32 as Hertz ;
7
7
use fugit:: RateExtU32 ;
8
8
9
- #[ cfg( not( feature = "gpio-f410" ) ) ]
10
- use pll:: I2sPll ;
11
- use pll:: MainPll ;
12
- #[ cfg( feature = "sai" ) ]
13
- #[ cfg( not( feature = "gpio-f413" ) ) ]
14
- use pll:: SaiPll ;
15
-
16
9
mod pll;
17
10
18
11
mod enable;
@@ -449,148 +442,6 @@ impl CFGR {
449
442
}
450
443
}
451
444
452
- impl CFGR {
453
- #[ cfg( feature = "gpio-f410" ) ]
454
- #[ inline( always) ]
455
- fn pll_setup ( & self , pllsrcclk : u32 , pllsysclk : Option < u32 > ) -> PllSetup {
456
- let i2s_clocks = self . i2s_clocks ( ) ;
457
-
458
- let main_pll = if let Some ( i2s_clk) = i2s_clocks. pll_i2s_clk {
459
- // The I2S frequency is generated by the main PLL. The frequency needs to be accurate,
460
- // so we need an expensive full PLL configuration search.
461
- MainPll :: setup_with_i2s (
462
- pllsrcclk,
463
- self . hse . is_some ( ) ,
464
- pllsysclk,
465
- self . pll48clk ,
466
- i2s_clk,
467
- )
468
- } else {
469
- MainPll :: fast_setup ( pllsrcclk, self . hse . is_some ( ) , pllsysclk, self . pll48clk )
470
- } ;
471
-
472
- PllSetup {
473
- use_pll : main_pll. use_pll ,
474
- pllsysclk : main_pll. pllsysclk ,
475
- pll48clk : main_pll. pll48clk ,
476
- i2s : i2s_clocks. real ( main_pll. plli2sclk , self . i2s_ckin ) ,
477
- }
478
- }
479
-
480
- #[ cfg( feature = "gpio-f413" ) ]
481
- #[ inline( always) ]
482
- fn pll_setup ( & self , pllsrcclk : u32 , pllsysclk : Option < u32 > ) -> PllSetup {
483
- let rcc = unsafe { & * RCC :: ptr ( ) } ;
484
-
485
- let i2s_clocks = self . i2s_clocks ( ) ;
486
- let sai_clocks = self . sai_clocks ( ) ;
487
-
488
- let main_pll = MainPll :: fast_setup ( pllsrcclk, self . hse . is_some ( ) , pllsysclk, self . pll48clk ) ;
489
-
490
- let ( i2s_pll, real_sai_clk) = if let Some ( i2s_clk) = i2s_clocks. pll_i2s_clk {
491
- // Currently, we only support generating SAI/PLL clocks with the I2S PLL. This is only
492
- // really usable when the frequencies are identical or the I2S frequency is a multiple of
493
- // the SAI frequency. Therefore, we just optimize the PLL for the I2S frequency and then
494
- // derive the SAI frequency from the I2S frequency.
495
- let i2s_pll = I2sPll :: setup ( pllsrcclk, Some ( i2s_clk) ) ;
496
-
497
- if let Some ( sai_clk) = sai_clocks. pll_sai_clk {
498
- let div = u32:: min (
499
- u32:: max ( ( i2s_pll. plli2sclk . unwrap ( ) + ( sai_clk >> 1 ) ) / sai_clk, 1 ) ,
500
- 31 ,
501
- ) ;
502
- rcc. dckcfgr ( ) . modify ( |_, w| w. plli2sdivr ( ) . set ( div as u8 ) ) ;
503
- let real_sai_clk = sai_clk / div;
504
- ( i2s_pll, Some ( real_sai_clk) )
505
- } else {
506
- ( i2s_pll, None )
507
- }
508
- } else if let Some ( pll_sai_clk) = sai_clocks. pll_sai_clk {
509
- // We try all divider values to get the best approximation of the requested frequency.
510
- // NOTE: STM32F413/423 have a different divider range than other models!
511
- let ( i2s_pll, real_sai_clk, div) = ( 1 ..31 )
512
- . map ( |div| {
513
- let i2s_pll = I2sPll :: setup ( pllsrcclk, Some ( pll_sai_clk * div) ) ;
514
- let real_clk = i2s_pll. plli2sclk . unwrap ( ) / div;
515
- ( i2s_pll, real_clk, div)
516
- } )
517
- . min_by_key ( |( _, real_clk, _) | ( * real_clk as i32 - pll_sai_clk as i32 ) . abs ( ) )
518
- . unwrap ( ) ;
519
- rcc. dckcfgr ( ) . modify ( |_, w| w. plli2sdivr ( ) . set ( div as u8 ) ) ;
520
- ( i2s_pll, Some ( real_sai_clk) )
521
- } else {
522
- ( I2sPll :: unused ( ) , None )
523
- } ;
524
-
525
- PllSetup {
526
- use_pll : main_pll. use_pll ,
527
- use_i2spll : i2s_pll. use_pll ,
528
- pllsysclk : main_pll. pllsysclk ,
529
- pll48clk : main_pll. pll48clk ,
530
- i2s : i2s_clocks. real ( i2s_pll. plli2sclk , self . i2s_ckin ) ,
531
- sai : sai_clocks. real ( real_sai_clk, self . i2s_ckin ) ,
532
- }
533
- }
534
-
535
- #[ cfg( any( feature = "gpio-f411" , feature = "gpio-f412" , feature = "gpio-f446" ) ) ]
536
- #[ inline( always) ]
537
- fn pll_setup ( & self , pllsrcclk : u32 , pllsysclk : Option < u32 > ) -> PllSetup {
538
- let i2s_clocks = self . i2s_clocks ( ) ;
539
- #[ cfg( feature = "sai" ) ]
540
- let sai_clocks = self . sai_clocks ( ) ;
541
-
542
- // All PLLs are completely independent.
543
- let main_pll = MainPll :: fast_setup ( pllsrcclk, self . hse . is_some ( ) , pllsysclk, self . pll48clk ) ;
544
- let i2s_pll = I2sPll :: setup ( pllsrcclk, i2s_clocks. pll_i2s_clk ) ;
545
- #[ cfg( feature = "sai" ) ]
546
- let sai_pll = SaiPll :: setup ( pllsrcclk, sai_clocks. pll_sai_clk ) ;
547
-
548
- PllSetup {
549
- use_pll : main_pll. use_pll ,
550
- use_i2spll : i2s_pll. use_pll ,
551
- #[ cfg( feature = "sai" ) ]
552
- use_saipll : sai_pll. use_pll ,
553
- pllsysclk : main_pll. pllsysclk ,
554
- pll48clk : main_pll. pll48clk ,
555
- i2s : i2s_clocks. real ( i2s_pll. plli2sclk , self . i2s_ckin ) ,
556
- #[ cfg( feature = "sai" ) ]
557
- sai : sai_clocks. real ( sai_pll. sai_clk , self . i2s_ckin ) ,
558
- }
559
- }
560
-
561
- #[ cfg( any(
562
- feature = "gpio-f401" ,
563
- feature = "gpio-f417" ,
564
- feature = "gpio-f427" ,
565
- feature = "gpio-f469" ,
566
- ) ) ]
567
- #[ inline( always) ]
568
- fn pll_setup ( & self , pllsrcclk : u32 , pllsysclk : Option < u32 > ) -> PllSetup {
569
- let i2s_clocks = self . i2s_clocks ( ) ;
570
- #[ cfg( any( feature = "gpio-f427" , feature = "gpio-f469" ) ) ]
571
- let sai_clocks = self . sai_clocks ( ) ;
572
-
573
- // We have separate PLLs, but they share the "M" divider.
574
- let main_pll = MainPll :: fast_setup ( pllsrcclk, self . hse . is_some ( ) , pllsysclk, self . pll48clk ) ;
575
- let i2s_pll = I2sPll :: setup_shared_m ( pllsrcclk, main_pll. m , i2s_clocks. pll_i2s_clk ) ;
576
- #[ cfg( feature = "sai" ) ]
577
- let sai_pll =
578
- SaiPll :: setup_shared_m ( pllsrcclk, main_pll. m . or ( i2s_pll. m ) , sai_clocks. pll_sai_clk ) ;
579
-
580
- PllSetup {
581
- use_pll : main_pll. use_pll ,
582
- use_i2spll : i2s_pll. use_pll ,
583
- #[ cfg( feature = "sai" ) ]
584
- use_saipll : sai_pll. use_pll ,
585
- pllsysclk : main_pll. pllsysclk ,
586
- pll48clk : main_pll. pll48clk ,
587
- i2s : i2s_clocks. real ( i2s_pll. plli2sclk , self . i2s_ckin ) ,
588
- #[ cfg( feature = "sai" ) ]
589
- sai : sai_clocks. real ( sai_pll. sai_clk , self . i2s_ckin ) ,
590
- }
591
- }
592
- }
593
-
594
445
#[ cfg( feature = "sai" ) ]
595
446
impl CFGR {
596
447
fn sai_clocks ( & self ) -> SaiClocks {
@@ -703,7 +554,6 @@ impl CFGR {
703
554
fn freeze_internal ( self , unchecked : bool ) -> Clocks {
704
555
let rcc = unsafe { & * RCC :: ptr ( ) } ;
705
556
706
- //let (use_pll, sysclk_on_pll, sysclk, pll48clk) = self.pll_setup();
707
557
let pllsrcclk = self . hse . unwrap_or ( HSI ) ;
708
558
let sysclk = self . sysclk . unwrap_or ( pllsrcclk) ;
709
559
let sysclk_on_pll = sysclk != pllsrcclk;
@@ -893,25 +743,6 @@ impl CFGR {
893
743
}
894
744
}
895
745
896
- #[ cfg_attr( feature = "defmt" , derive( defmt:: Format ) ) ]
897
- #[ derive( Copy , Clone , PartialEq , Eq , Debug ) ]
898
- struct PllSetup {
899
- use_pll : bool ,
900
- #[ cfg( not( feature = "gpio-f410" ) ) ]
901
- use_i2spll : bool ,
902
- #[ cfg( feature = "sai" ) ]
903
- #[ cfg( not( feature = "gpio-f413" ) ) ]
904
- use_saipll : bool ,
905
-
906
- pllsysclk : Option < u32 > ,
907
- pll48clk : Option < u32 > ,
908
-
909
- i2s : RealI2sClocks ,
910
-
911
- #[ cfg( feature = "sai" ) ]
912
- sai : RealSaiClocks ,
913
- }
914
-
915
746
#[ cfg_attr( feature = "defmt" , derive( defmt:: Format ) ) ]
916
747
#[ derive( Copy , Clone , PartialEq , Eq , Debug ) ]
917
748
struct I2sClocks {
0 commit comments