cleanup and consolidate peripherals macro
This commit is contained in:
		@@ -105,3 +105,42 @@ macro_rules! impl_unborrow {
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[macro_export]
 | 
			
		||||
macro_rules! std_peripherals {
 | 
			
		||||
    ($($(#[$cfg:meta])? $name:ident),*$(,)?) => {
 | 
			
		||||
        #[doc = r"All the peripherals"]
 | 
			
		||||
        #[allow(non_snake_case)]
 | 
			
		||||
        pub struct Peripherals {
 | 
			
		||||
            $(
 | 
			
		||||
                $(#[$cfg])?
 | 
			
		||||
                pub $name: pac::$name,
 | 
			
		||||
            )+
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        static mut GLOBAL_CLOCKS: Option<Clocks> = None;
 | 
			
		||||
 | 
			
		||||
        impl Peripherals {
 | 
			
		||||
            pub fn take() -> Option<(Peripherals, Clocks)> {
 | 
			
		||||
                match unsafe {GLOBAL_CLOCKS} {
 | 
			
		||||
                    Some(clocks) => {
 | 
			
		||||
                        let dp = unsafe { pac::Peripherals::steal() };
 | 
			
		||||
                        let peripherals = Peripherals {
 | 
			
		||||
                            $(
 | 
			
		||||
                                $(#[$cfg])?
 | 
			
		||||
                                $name: dp.$name,
 | 
			
		||||
                            )+
 | 
			
		||||
                        };
 | 
			
		||||
 | 
			
		||||
                        Some((peripherals, clocks))
 | 
			
		||||
                    },
 | 
			
		||||
                    None => None,
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            pub unsafe fn set_peripherals(clocks: Clocks) {
 | 
			
		||||
                GLOBAL_CLOCKS.replace(clocks);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -100,39 +100,8 @@ use core::option::Option;
 | 
			
		||||
use hal::prelude::*;
 | 
			
		||||
use hal::rcc::Clocks;
 | 
			
		||||
 | 
			
		||||
macro_rules! peripherals {
 | 
			
		||||
    ($($PER:ident,)+) => {
 | 
			
		||||
        #[doc = r"All the peripherals"]
 | 
			
		||||
        #[allow(non_snake_case)]
 | 
			
		||||
        pub struct Peripherals {
 | 
			
		||||
            $(
 | 
			
		||||
                pub $PER: pac::$PER,
 | 
			
		||||
            )+
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        static mut GLOBAL_PERIPHERALS: Option<(Peripherals, Clocks)> = None;
 | 
			
		||||
 | 
			
		||||
        impl Peripherals {
 | 
			
		||||
            pub fn take() -> Option<(Peripherals, Clocks)> {
 | 
			
		||||
                unsafe { GLOBAL_PERIPHERALS.take() }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            pub unsafe fn set_peripherals(clocks: Clocks) {
 | 
			
		||||
                let dp = pac::Peripherals::steal();
 | 
			
		||||
                let peripherals = Peripherals {
 | 
			
		||||
                    $(
 | 
			
		||||
                        $PER: dp.$PER,
 | 
			
		||||
                    )+
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                GLOBAL_PERIPHERALS.replace((peripherals, clocks));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(feature = "stm32f446")]
 | 
			
		||||
peripherals! {
 | 
			
		||||
embassy_extras::std_peripherals! {
 | 
			
		||||
    DCMI,
 | 
			
		||||
    FMC,
 | 
			
		||||
    DBGMCU,
 | 
			
		||||
@@ -211,7 +180,7 @@ peripherals! {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(feature = "stm32f405")]
 | 
			
		||||
peripherals! {
 | 
			
		||||
embassy_extras::std_peripherals! {
 | 
			
		||||
    RNG,
 | 
			
		||||
    DCMI,
 | 
			
		||||
    FSMC,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user