pub struct Reg<REG>where
REG: RegisterSpec,{ /* private fields */ }Expand description
This structure provides volatile access to registers.
Implementations§
Source§impl<REG> Reg<REG>where
REG: RegisterSpec,
impl<REG> Reg<REG>where
REG: RegisterSpec,
Source§impl<REG> Reg<REG>where
REG: Readable,
impl<REG> Reg<REG>where
REG: Readable,
Sourcepub fn read(&self) -> R<REG>
pub fn read(&self) -> R<REG>
Reads the contents of a Readable register.
You can read the raw contents of a register by using bits:
let bits = periph.reg.read().bits();or get the content of a particular field of a register:
let reader = periph.reg.read();
let bits = reader.field1().bits();
let flag = reader.field2().bit_is_set();Source§impl<REG> Reg<REG>where
REG: Resettable + Writable,
impl<REG> Reg<REG>where
REG: Resettable + Writable,
Sourcepub fn reset(&self)
pub fn reset(&self)
Writes the reset value to Writable register.
Resets the register to its initial state.
Sourcepub fn write<F>(&self, f: F)where
F: FnOnce(&mut W<REG>) -> &mut W<REG>,
pub fn write<F>(&self, f: F)where
F: FnOnce(&mut W<REG>) -> &mut W<REG>,
Writes bits to a Writable register.
You can write raw bits into a register:
periph.reg.write(|w| unsafe { w.bits(rawbits) });or write only the fields you need:
periph.reg.write(|w| w
.field1().bits(newfield1bits)
.field2().set_bit()
.field3().variant(VARIANT)
);or an alternative way of saying the same:
periph.reg.write(|w| {
w.field1().bits(newfield1bits);
w.field2().set_bit();
w.field3().variant(VARIANT)
});In the latter case, other fields will be set to their reset value.
Source§impl<REG> Reg<REG>where
REG: Writable,
impl<REG> Reg<REG>where
REG: Writable,
Sourcepub unsafe fn write_with_zero<F>(&self, f: F)where
F: FnOnce(&mut W<REG>) -> &mut W<REG>,
pub unsafe fn write_with_zero<F>(&self, f: F)where
F: FnOnce(&mut W<REG>) -> &mut W<REG>,
Writes 0 to a Writable register.
Similar to write, but unused bits will contain 0.
§Safety
Unsafe to use with registers which don’t allow to write 0.
Source§impl<REG> Reg<REG>
impl<REG> Reg<REG>
Sourcepub fn modify<F>(&self, f: F)where
F: for<'w> FnOnce(&R<REG>, &'w mut W<REG>) -> &'w mut W<REG>,
pub fn modify<F>(&self, f: F)where
F: for<'w> FnOnce(&R<REG>, &'w mut W<REG>) -> &'w mut W<REG>,
Modifies the contents of the register by reading and then writing it.
E.g. to do a read-modify-write sequence to change parts of a register:
periph.reg.modify(|r, w| unsafe { w.bits(
r.bits() | 3
) });or
periph.reg.modify(|_, w| w
.field1().bits(newfield1bits)
.field2().set_bit()
.field3().variant(VARIANT)
);or an alternative way of saying the same:
periph.reg.modify(|_, w| {
w.field1().bits(newfield1bits);
w.field2().set_bit();
w.field3().variant(VARIANT)
});Other fields will have the value they had before the call to modify.
Trait Implementations§
Auto Trait Implementations§
impl<REG> !Freeze for Reg<REG>
impl<REG> !RefUnwindSafe for Reg<REG>
impl<REG> !Sync for Reg<REG>
impl<REG> Unpin for Reg<REG>
impl<REG> UnwindSafe for Reg<REG>
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
Source§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more