From d4de1c2d45e64e1c67c115c573a9a0ed1252cd94 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio <jorge@japaric.io> Date: Mon, 15 Jan 2018 18:54:16 +0100 Subject: [PATCH] hide ARMv7-M only peripherals on thumbv6m-none-eabi --- src/peripheral/fpu.rs | 5 ----- src/peripheral/mod.rs | 26 +++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/peripheral/fpu.rs b/src/peripheral/fpu.rs index ada8b7a..f1d4753 100644 --- a/src/peripheral/fpu.rs +++ b/src/peripheral/fpu.rs @@ -1,6 +1,5 @@ //! Floating Point Unit -#[cfg(any(has_fpu, test))] use volatile_register::{RO, RW}; /// Register block @@ -8,15 +7,11 @@ use volatile_register::{RO, RW}; pub struct RegisterBlock { reserved: u32, /// Floating Point Context Control - #[cfg(any(has_fpu, test))] pub fpccr: RW<u32>, /// Floating Point Context Address - #[cfg(any(has_fpu, test))] pub fpcar: RW<u32>, /// Floating Point Default Status Control - #[cfg(any(has_fpu, test))] pub fpdscr: RW<u32>, /// Media and FP Feature - #[cfg(any(has_fpu, test))] pub mvfr: [RO<u32>; 3], } diff --git a/src/peripheral/mod.rs b/src/peripheral/mod.rs index ffbb56c..67bcb21 100644 --- a/src/peripheral/mod.rs +++ b/src/peripheral/mod.rs @@ -79,13 +79,17 @@ pub mod cbp; pub mod cpuid; pub mod dcb; pub mod dwt; +#[cfg(any(armv7m, test))] pub mod fpb; +#[cfg(any(has_fpu, test))] pub mod fpu; +#[cfg(any(armv7m, test))] pub mod itm; pub mod mpu; pub mod nvic; pub mod scb; pub mod syst; +#[cfg(any(armv7m, test))] pub mod tpiu; #[cfg(test)] @@ -106,10 +110,13 @@ pub struct Peripherals { /// Data Watchpoint and Trace unit pub DWT: DWT, /// Flash Patch and Breakpoint unit + #[cfg(armv7m)] pub FPB: FPB, /// Floating Point Unit + #[cfg(has_fpu)] pub FPU: FPU, /// Instrumentation Trace Macrocell + #[cfg(armv7m)] pub ITM: ITM, /// Memory Protection Unit pub MPU: MPU, @@ -120,6 +127,7 @@ pub struct Peripherals { /// SysTick: System Timer pub SYST: SYST, /// Trace Port Interface Unit; + #[cfg(armv7m)] pub TPIU: TPIU, } @@ -161,12 +169,15 @@ impl Peripherals { DWT: DWT { _marker: PhantomData, }, + #[cfg(armv7m)] FPB: FPB { _marker: PhantomData, }, + #[cfg(has_fpu)] FPU: FPU { _marker: PhantomData, }, + #[cfg(armv7m)] ITM: ITM { _marker: PhantomData, }, @@ -182,6 +193,7 @@ impl Peripherals { SYST: SYST { _marker: PhantomData, }, + #[cfg(armv7m)] TPIU: TPIU { _marker: PhantomData, }, @@ -282,10 +294,12 @@ impl Deref for DWT { } /// Flash Patch and Breakpoint unit +#[cfg(any(armv7m, test))] pub struct FPB { _marker: PhantomData<*const ()>, } +#[cfg(any(armv7m, test))] impl FPB { /// Returns a pointer to the register block pub fn ptr() -> *const fpb::RegisterBlock { @@ -293,6 +307,7 @@ impl FPB { } } +#[cfg(armv7m)] impl Deref for FPB { type Target = self::fpb::RegisterBlock; @@ -302,10 +317,12 @@ impl Deref for FPB { } /// Floating Point Unit +#[cfg(any(has_fpu, test))] pub struct FPU { _marker: PhantomData<*const ()>, } +#[cfg(any(has_fpu, test))] impl FPU { /// Returns a pointer to the register block pub fn ptr() -> *const fpu::RegisterBlock { @@ -313,7 +330,7 @@ impl FPU { } } -#[cfg(any(has_fpu, test))] +#[cfg(has_fpu)] impl Deref for FPU { type Target = self::fpu::RegisterBlock; @@ -323,10 +340,12 @@ impl Deref for FPU { } /// Instrumentation Trace Macrocell +#[cfg(any(armv7m, test))] pub struct ITM { _marker: PhantomData<*const ()>, } +#[cfg(any(armv7m, test))] impl ITM { /// Returns a pointer to the register block pub fn ptr() -> *mut itm::RegisterBlock { @@ -334,6 +353,7 @@ impl ITM { } } +#[cfg(armv7m)] impl Deref for ITM { type Target = self::itm::RegisterBlock; @@ -342,6 +362,7 @@ impl Deref for ITM { } } +#[cfg(armv7m)] impl DerefMut for ITM { fn deref_mut(&mut self) -> &mut Self::Target { unsafe { &mut *Self::ptr() } @@ -429,10 +450,12 @@ impl Deref for SYST { } /// Trace Port Interface Unit; +#[cfg(any(armv7m, test))] pub struct TPIU { _marker: PhantomData<*const ()>, } +#[cfg(any(armv7m, test))] impl TPIU { /// Returns a pointer to the register block pub fn ptr() -> *const tpiu::RegisterBlock { @@ -440,6 +463,7 @@ impl TPIU { } } +#[cfg(armv7m)] impl Deref for TPIU { type Target = self::tpiu::RegisterBlock; -- GitLab