pub struct Value<R: RegisterValue> { /* private fields */ }
Expand description
A value read from or to be written to a register
§Created by:
Reg::read
: read the value from the register.Default
or theValue::reset
: the reset value of the register.
§Usable with:
Reg::write
: write the value to the register.Value
&
Fields
extractsFieldValues
.
Values can be modified with the |
and ^
operators, and well as with |=
and ^=
.
§Example
use peripherals::{register, 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 `reset` method or by reading the register
let mut value = Value::<Register>::reset();
assert_eq!(value.value(), 0b1001);
/// Extract single field
assert_eq!(value.field(Register::BIT1), Bit1(true));
assert_eq!(value.field(Register::BIT2), Bit2(false));
assert_eq!(value.field(Register::TWO_BITS), TwoBits(0b10));
// Extract multiple fields
let fields_12 = value & (Register::BIT1 | Register::BIT2);
assert_eq!(fields_12.bits(), 0b001);
assert_eq!((value & Register::TWO_BITS).bits(), 0b1000);
// Toggle single-bit fields
value ^= Register::BIT1;
assert_eq!(value.value(), 0b1000);
value ^= Register::BIT1 | Register::BIT2;
assert_eq!(value.value(), 0b1011);
// Write back fields previously read
value |= fields_12;
assert_eq!(value.value(), 0b1001);
// Modify fields
value |= Bit1(false);
assert_eq!(value.value(), 0b1000);
value |= TwoBits(0b01);
assert_eq!(value.value(), 0b0100);
Implementations§
Source§impl<R: RegisterValue> Value<R>
impl<R: RegisterValue> Value<R>
Sourcepub fn field<T>(self, field: Field<R, T, R::Int>) -> T
pub fn field<T>(self, field: Field<R, T, R::Int>) -> T
Read the given field
This returns the value of a field defined with the [periph!
] or [register!
] macro.
Sourcepub fn test<B: Into<FieldValues<R>>>(self, bits: B) -> bool
pub fn test<B: Into<FieldValues<R>>>(self, bits: B) -> bool
Test the given fields
This returns true if the field has the value given in parameter. It can also be used with
more values, combined with |
, in which case all fields must match.
Trait Implementations§
Source§impl<R: RegisterValue, T: Into<FieldValues<R>>> BitOr<T> for Value<R>
impl<R: RegisterValue, T: Into<FieldValues<R>>> BitOr<T> for Value<R>
Source§impl<R: RegisterValue, T: Into<FieldValues<R>>> BitOrAssign<T> for Value<R>
impl<R: RegisterValue, T: Into<FieldValues<R>>> BitOrAssign<T> for Value<R>
Source§fn bitor_assign(&mut self, other: T)
fn bitor_assign(&mut self, other: T)
Performs the
|=
operation. Read moreSource§impl<R: RegisterValue, T: Into<Fields<R, Toggle>>> BitXorAssign<T> for Value<R>
impl<R: RegisterValue, T: Into<Fields<R, Toggle>>> BitXorAssign<T> for Value<R>
Source§fn bitxor_assign(&mut self, other: T)
fn bitxor_assign(&mut self, other: T)
Performs the
^=
operation. Read moreSource§impl<R: RegisterValue> Clone for Value<R>
impl<R: RegisterValue> Clone for Value<R>
Source§impl<R: RegisterValue> Debug for Value<R>
impl<R: RegisterValue> Debug for Value<R>
Source§impl<R: RegisterValue> Default for Value<R>
impl<R: RegisterValue> Default for Value<R>
impl<R: RegisterValue> Copy for Value<R>
impl<R: RegisterValue> Eq for Value<R>
Auto Trait Implementations§
impl<R> Freeze for Value<R>
impl<R> RefUnwindSafe for Value<R>
impl<R> Send for Value<R>
impl<R> Sync for Value<R>
impl<R> Unpin for Value<R>
impl<R> UnwindSafe for Value<R>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more