@@ -529,15 +529,19 @@ pub trait ClockGate: ClockReset {
529
529
/// Reset this peripheral without reconfiguring clocks (if applicable).
530
530
#[ inline]
531
531
unsafe fn reset ( ccu : & RegisterBlock ) {
532
- // assert reset and then deassert reset.
533
- Self :: disable_in ( ccu) ;
534
- Self :: enable_in ( ccu) ;
532
+ unsafe {
533
+ // assert reset and then deassert reset.
534
+ Self :: disable_in ( ccu) ;
535
+ Self :: enable_in ( ccu) ;
536
+ }
535
537
}
536
538
/// Free this peripheral by provided `ccu`.
537
539
#[ inline]
538
540
unsafe fn free ( ccu : & RegisterBlock ) {
539
- // by default, asserting reset signal and mask clock gate.
540
- Self :: disable_in ( ccu) ;
541
+ unsafe {
542
+ // by default, asserting reset signal and mask clock gate.
543
+ Self :: disable_in ( ccu) ;
544
+ }
541
545
}
542
546
}
543
547
@@ -564,9 +568,11 @@ pub trait ClockConfig {
564
568
) where
565
569
Self : ClockGate ,
566
570
{
567
- Self :: disable_in ( ccu) ;
568
- Self :: configure ( ccu, source, factor_m, factor_n) ;
569
- Self :: enable_in ( ccu) ;
571
+ unsafe {
572
+ Self :: disable_in ( ccu) ;
573
+ Self :: configure ( ccu, source, factor_m, factor_n) ;
574
+ Self :: enable_in ( ccu) ;
575
+ }
570
576
}
571
577
/// Reconfigure this clock with dependency to a resettable clock type `T`.
572
578
#[ inline]
@@ -580,15 +586,17 @@ pub trait ClockConfig {
580
586
F : FnOnce ( & RegisterBlock ) -> ( Self :: Source , u8 , PeriFactorN ) ,
581
587
G : FnOnce ( & RegisterBlock ) ,
582
588
{
583
- let _ = dependency; // does not use value, the type T is used instead
584
- T :: assert_reset_only ( ccu) ;
585
- Self :: disable_in ( ccu) ;
586
- let ( source, factor_m, factor_n) = before_configure ( ccu) ;
587
- Self :: configure ( ccu, source, factor_m, factor_n) ;
588
- after_configure ( ccu) ;
589
- Self :: deassert_reset_only ( ccu) ;
590
- T :: deassert_reset_only ( ccu) ;
591
- Self :: unmask_gate_only ( ccu) ;
589
+ unsafe {
590
+ let _ = dependency; // does not use value, the type T is used instead
591
+ T :: assert_reset_only ( ccu) ;
592
+ Self :: disable_in ( ccu) ;
593
+ let ( source, factor_m, factor_n) = before_configure ( ccu) ;
594
+ Self :: configure ( ccu, source, factor_m, factor_n) ;
595
+ after_configure ( ccu) ;
596
+ Self :: deassert_reset_only ( ccu) ;
597
+ T :: deassert_reset_only ( ccu) ;
598
+ Self :: unmask_gate_only ( ccu) ;
599
+ }
592
600
}
593
601
}
594
602
@@ -600,30 +608,42 @@ pub struct DRAM;
600
608
impl ClockReset for DRAM {
601
609
#[ inline]
602
610
unsafe fn deassert_reset_only ( ccu : & RegisterBlock ) {
603
- ccu. dram_bgr . modify ( |v| v. deassert_reset ( ) ) ;
611
+ unsafe {
612
+ ccu. dram_bgr . modify ( |v| v. deassert_reset ( ) ) ;
613
+ }
604
614
}
605
615
#[ inline]
606
616
unsafe fn assert_reset_only ( ccu : & RegisterBlock ) {
607
- ccu. dram_bgr . modify ( |v| v. assert_reset ( ) ) ;
617
+ unsafe {
618
+ ccu. dram_bgr . modify ( |v| v. assert_reset ( ) ) ;
619
+ }
608
620
}
609
621
}
610
622
611
623
impl ClockGate for DRAM {
612
624
#[ inline]
613
625
unsafe fn unmask_gate_only ( ccu : & RegisterBlock ) {
614
- ccu. dram_bgr . modify ( |v| v. gate_pass ( ) ) ;
626
+ unsafe {
627
+ ccu. dram_bgr . modify ( |v| v. gate_pass ( ) ) ;
628
+ }
615
629
}
616
630
#[ inline]
617
631
unsafe fn mask_gate_only ( ccu : & RegisterBlock ) {
618
- ccu. dram_bgr . modify ( |v| v. gate_mask ( ) ) ;
632
+ unsafe {
633
+ ccu. dram_bgr . modify ( |v| v. gate_mask ( ) ) ;
634
+ }
619
635
}
620
636
#[ inline]
621
637
unsafe fn disable_in ( ccu : & RegisterBlock ) {
622
- ccu. dram_bgr . modify ( |v| v. gate_mask ( ) . assert_reset ( ) ) ;
638
+ unsafe {
639
+ ccu. dram_bgr . modify ( |v| v. gate_mask ( ) . assert_reset ( ) ) ;
640
+ }
623
641
}
624
642
#[ inline]
625
643
unsafe fn enable_in ( ccu : & RegisterBlock ) {
626
- ccu. dram_bgr . modify ( |v| v. gate_pass ( ) . deassert_reset ( ) ) ;
644
+ unsafe {
645
+ ccu. dram_bgr . modify ( |v| v. gate_pass ( ) . deassert_reset ( ) ) ;
646
+ }
627
647
}
628
648
}
629
649
@@ -637,13 +657,15 @@ impl ClockConfig for DRAM {
637
657
factor_m : u8 ,
638
658
factor_n : PeriFactorN ,
639
659
) {
640
- let dram_clk = ccu. dram_clock . read ( ) ;
641
- ccu. dram_clock . write (
642
- dram_clk
643
- . set_clock_source ( source)
644
- . set_factor_m ( factor_m)
645
- . set_factor_n ( factor_n) ,
646
- )
660
+ unsafe {
661
+ let dram_clk = ccu. dram_clock . read ( ) ;
662
+ ccu. dram_clock . write (
663
+ dram_clk
664
+ . set_clock_source ( source)
665
+ . set_factor_m ( factor_m)
666
+ . set_factor_n ( factor_n) ,
667
+ )
668
+ }
647
669
}
648
670
}
649
671
@@ -653,11 +675,15 @@ pub struct MBUS;
653
675
impl ClockReset for MBUS {
654
676
#[ inline]
655
677
unsafe fn assert_reset_only ( ccu : & RegisterBlock ) {
656
- ccu. mbus_clock . modify ( |v| v. assert_reset ( ) ) ;
678
+ unsafe {
679
+ ccu. mbus_clock . modify ( |v| v. assert_reset ( ) ) ;
680
+ }
657
681
}
658
682
#[ inline]
659
683
unsafe fn deassert_reset_only ( ccu : & RegisterBlock ) {
660
- ccu. mbus_clock . modify ( |v| v. deassert_reset ( ) ) ;
684
+ unsafe {
685
+ ccu. mbus_clock . modify ( |v| v. deassert_reset ( ) ) ;
686
+ }
661
687
}
662
688
}
663
689
@@ -670,32 +696,44 @@ pub struct UART<const IDX: usize>;
670
696
impl < const I : usize > ClockReset for UART < I > {
671
697
#[ inline]
672
698
unsafe fn assert_reset_only ( ccu : & RegisterBlock ) {
673
- ccu. uart_bgr . modify ( |v| v. assert_reset :: < I > ( ) ) ;
699
+ unsafe {
700
+ ccu. uart_bgr . modify ( |v| v. assert_reset :: < I > ( ) ) ;
701
+ }
674
702
}
675
703
#[ inline]
676
704
unsafe fn deassert_reset_only ( ccu : & RegisterBlock ) {
677
- ccu. uart_bgr . modify ( |v| v. deassert_reset :: < I > ( ) ) ;
705
+ unsafe {
706
+ ccu. uart_bgr . modify ( |v| v. deassert_reset :: < I > ( ) ) ;
707
+ }
678
708
}
679
709
}
680
710
681
711
impl < const I : usize > ClockGate for UART < I > {
682
712
#[ inline]
683
713
unsafe fn unmask_gate_only ( ccu : & RegisterBlock ) {
684
- ccu. uart_bgr . modify ( |v| v. gate_pass :: < I > ( ) ) ;
714
+ unsafe {
715
+ ccu. uart_bgr . modify ( |v| v. gate_pass :: < I > ( ) ) ;
716
+ }
685
717
}
686
718
#[ inline]
687
719
unsafe fn mask_gate_only ( ccu : & RegisterBlock ) {
688
- ccu. uart_bgr . modify ( |v| v. gate_mask :: < I > ( ) ) ;
720
+ unsafe {
721
+ ccu. uart_bgr . modify ( |v| v. gate_mask :: < I > ( ) ) ;
722
+ }
689
723
}
690
724
#[ inline]
691
725
unsafe fn disable_in ( ccu : & RegisterBlock ) {
692
- ccu. uart_bgr
693
- . modify ( |v| v. gate_mask :: < I > ( ) . assert_reset :: < I > ( ) ) ;
726
+ unsafe {
727
+ ccu. uart_bgr
728
+ . modify ( |v| v. gate_mask :: < I > ( ) . assert_reset :: < I > ( ) ) ;
729
+ }
694
730
}
695
731
#[ inline]
696
732
unsafe fn enable_in ( ccu : & RegisterBlock ) {
697
- ccu. uart_bgr
698
- . modify ( |v| v. gate_pass :: < I > ( ) . deassert_reset :: < I > ( ) ) ;
733
+ unsafe {
734
+ ccu. uart_bgr
735
+ . modify ( |v| v. gate_pass :: < I > ( ) . deassert_reset :: < I > ( ) ) ;
736
+ }
699
737
}
700
738
}
701
739
@@ -706,32 +744,44 @@ pub struct SPI<const IDX: usize>;
706
744
impl < const I : usize > ClockReset for SPI < I > {
707
745
#[ inline]
708
746
unsafe fn assert_reset_only ( ccu : & RegisterBlock ) {
709
- ccu. spi_bgr . modify ( |v| v. assert_reset :: < I > ( ) ) ;
747
+ unsafe {
748
+ ccu. spi_bgr . modify ( |v| v. assert_reset :: < I > ( ) ) ;
749
+ }
710
750
}
711
751
#[ inline]
712
752
unsafe fn deassert_reset_only ( ccu : & RegisterBlock ) {
713
- ccu. spi_bgr . modify ( |v| v. deassert_reset :: < I > ( ) ) ;
753
+ unsafe {
754
+ ccu. spi_bgr . modify ( |v| v. deassert_reset :: < I > ( ) ) ;
755
+ }
714
756
}
715
757
}
716
758
717
759
impl < const I : usize > ClockGate for SPI < I > {
718
760
#[ inline]
719
761
unsafe fn unmask_gate_only ( ccu : & RegisterBlock ) {
720
- ccu. spi_bgr . modify ( |v| v. gate_pass :: < I > ( ) ) ;
762
+ unsafe {
763
+ ccu. spi_bgr . modify ( |v| v. gate_pass :: < I > ( ) ) ;
764
+ }
721
765
}
722
766
#[ inline]
723
767
unsafe fn mask_gate_only ( ccu : & RegisterBlock ) {
724
- ccu. spi_bgr . modify ( |v| v. gate_mask :: < I > ( ) ) ;
768
+ unsafe {
769
+ ccu. spi_bgr . modify ( |v| v. gate_mask :: < I > ( ) ) ;
770
+ }
725
771
}
726
772
#[ inline]
727
773
unsafe fn disable_in ( ccu : & RegisterBlock ) {
728
- ccu. spi_bgr
729
- . modify ( |v| v. gate_mask :: < I > ( ) . assert_reset :: < I > ( ) ) ;
774
+ unsafe {
775
+ ccu. spi_bgr
776
+ . modify ( |v| v. gate_mask :: < I > ( ) . assert_reset :: < I > ( ) ) ;
777
+ }
730
778
}
731
779
#[ inline]
732
780
unsafe fn enable_in ( ccu : & RegisterBlock ) {
733
- ccu. spi_bgr
734
- . modify ( |v| v. gate_pass :: < I > ( ) . deassert_reset :: < I > ( ) ) ;
781
+ unsafe {
782
+ ccu. spi_bgr
783
+ . modify ( |v| v. gate_pass :: < I > ( ) . deassert_reset :: < I > ( ) ) ;
784
+ }
735
785
}
736
786
}
737
787
@@ -744,13 +794,15 @@ impl<const I: usize> ClockConfig for SPI<I> {
744
794
factor_m : u8 ,
745
795
factor_n : PeriFactorN ,
746
796
) {
747
- let spi_clk = ccu. spi_clk [ I ] . read ( ) ;
748
- ccu. spi_clk [ I ] . write (
749
- spi_clk
750
- . set_clock_source ( source)
751
- . set_factor_m ( factor_m)
752
- . set_factor_n ( factor_n) ,
753
- )
797
+ unsafe {
798
+ let spi_clk = ccu. spi_clk [ I ] . read ( ) ;
799
+ ccu. spi_clk [ I ] . write (
800
+ spi_clk
801
+ . set_clock_source ( source)
802
+ . set_factor_m ( factor_m)
803
+ . set_factor_n ( factor_n) ,
804
+ )
805
+ }
754
806
}
755
807
}
756
808
0 commit comments