Struct peripherals::Fields [−][src]
pub struct Fields<R: RegisterValue, T = ()> { /* fields omitted */ }
Expand description
A set of register fields
Created by:
- Combining (with
|
) fields generated by theperiph!
or theregister!
macro. Default
orFields::empty
: a set with no fields.
Usable with:
Reg::fields
orValue
&
Fields
: read someFieldValues
from the register. They can then be compared or written back.Reg::toggle
orValue
^
Fields
: toggle these fields (only for single-bit fields).
These fields be combined together with |
, &
and ^
. For operators that returns the same
type as their first operand, the “assign” form (i.e. |=
, &=
and ^=
) can also be used.
Example
use peripherals::{register, Fields, Value}; register! { Register: u8 = 0b1001 { BIT1: 0 = struct Bit1(bool); BIT2: 1 = struct Bit2(bool); TWO_BITS: 2..3 = struct TwoBits(u8); } } // Obtain it with the `empty` method or by combining fields let empty = Fields::<Register>::empty(); assert_eq!(empty.mask(), 0b0000); let bits_12 = Register::BIT1 | Register::BIT2; assert_eq!(bits_12.mask(), 0b0011); let fields = Register::BIT1 | Register::TWO_BITS; assert_eq!(fields.mask(), 0b1101); // Combine fields together assert_eq!(bits_12 | fields, Register::BIT1 | Register::BIT2 | Register::TWO_BITS); assert_eq!(bits_12 & fields, Register::BIT1); assert_eq!(bits_12 ^ fields, Register::BIT2 | Register::TWO_BITS); assert_eq!(bits_12 | empty, bits_12); assert_eq!(bits_12 & empty, empty); assert_eq!(bits_12 ^ empty, bits_12); let mut value = Value::reset(); assert_eq!(value.value(), 0b1001); // Use it to read fields let value_12 = value & (Register::BIT1 | Register::BIT2); assert_eq!(value_12.bits(), 0b001); assert_eq!((value & Register::TWO_BITS).bits(), 0b1000); // Toggle single-bit fields value ^= bits_12; assert_eq!(value.value(), 0b1010); value ^= Register::BIT1; assert_eq!(value.value(), 0b1011); // Write back bits previously read value |= value_12; assert_eq!(value.value(), 0b1001);
Implementations
impl<R: RegisterValue, T> Fields<R, T>
[src]
impl<R: RegisterValue, T> Fields<R, T>
[src]Trait Implementations
impl<R: RegisterValue, T: Into<Fields<R>>, U> BitAndAssign<T> for Fields<R, U> where
T: Either<U, Output = U>,
[src]
impl<R: RegisterValue, T: Into<Fields<R>>, U> BitAndAssign<T> for Fields<R, U> where
T: Either<U, Output = U>,
[src]fn bitand_assign(&mut self, other: T)
[src]
fn bitand_assign(&mut self, other: T)
[src]Performs the &=
operation. Read more
impl<R: RegisterValue, T: Into<Fields<R>>, U> BitOrAssign<T> for Fields<R, U> where
T: Both<U, Output = U>,
[src]
impl<R: RegisterValue, T: Into<Fields<R>>, U> BitOrAssign<T> for Fields<R, U> where
T: Both<U, Output = U>,
[src]fn bitor_assign(&mut self, other: T)
[src]
fn bitor_assign(&mut self, other: T)
[src]Performs the |=
operation. Read more
impl<R: RegisterValue, T: Into<Fields<R>>, U> BitXorAssign<T> for Fields<R, U> where
T: Both<U, Output = U>,
[src]
impl<R: RegisterValue, T: Into<Fields<R>>, U> BitXorAssign<T> for Fields<R, U> where
T: Both<U, Output = U>,
[src]fn bitxor_assign(&mut self, other: T)
[src]
fn bitxor_assign(&mut self, other: T)
[src]Performs the ^=
operation. Read more
impl<R: RegisterValue, T> Clone for Fields<R, T>
[src]
impl<R: RegisterValue, T> Clone for Fields<R, T>
[src]impl<R: RegisterValue, T> Debug for Fields<R, T>
[src]
impl<R: RegisterValue, T> Debug for Fields<R, T>
[src]impl<R: RegisterValue, T> Default for Fields<R, T>
[src]
impl<R: RegisterValue, T> Default for Fields<R, T>
[src]impl<R: RegisterValue, T> From<Field<R, T, <R as RegisterValue>::Int>> for Fields<R, ()>
[src]
impl<R: RegisterValue, T> From<Field<R, T, <R as RegisterValue>::Int>> for Fields<R, ()>
[src]impl<R: RegisterValue, T: MayToggle<Toggle = Toggle>> From<Field<R, T, <R as RegisterValue>::Int>> for Fields<R, Toggle>
[src]
impl<R: RegisterValue, T: MayToggle<Toggle = Toggle>> From<Field<R, T, <R as RegisterValue>::Int>> for Fields<R, Toggle>
[src]impl<R: RegisterValue, T> MayToggle for Fields<R, T>
[src]
impl<R: RegisterValue, T> MayToggle for Fields<R, T>
[src]type Toggle = T
type Toggle = T
Toggle
if it can be toggled, ()
otherwise
impl<R: RegisterValue, T> Copy for Fields<R, T>
[src]
Auto Trait Implementations
impl<R, T> Send for Fields<R, T> where
R: Send,
T: Send,
<R as RegisterValue>::Int: Send,
R: Send,
T: Send,
<R as RegisterValue>::Int: Send,
impl<R, T> Sync for Fields<R, T> where
R: Sync,
T: Sync,
<R as RegisterValue>::Int: Sync,
R: Sync,
T: Sync,
<R as RegisterValue>::Int: Sync,
impl<R, T> Unpin for Fields<R, T> where
R: Unpin,
T: Unpin,
<R as RegisterValue>::Int: Unpin,
R: Unpin,
T: Unpin,
<R as RegisterValue>::Int: Unpin,