pub struct ReadWriteRiscvCsr<T: UIntLike, R: RegisterLongName, const V: usize> { /* private fields */ }
Expand description
Read/Write registers.
Implementations§
Source§impl<R: RegisterLongName, const V: usize> ReadWriteRiscvCsr<usize, R, V>
impl<R: RegisterLongName, const V: usize> ReadWriteRiscvCsr<usize, R, V>
pub const fn new() -> Self
Sourcepub fn atomic_replace(&self, val_to_set: usize) -> usize
pub fn atomic_replace(&self, val_to_set: usize) -> usize
Atomically swap the contents of a CSR
Reads the current value of a CSR and replaces it with the specified value in a single instruction, returning the previous value.
This method corresponds to the RISC-V CSRRW rd, csr, rs1
instruction where rs1 = in(reg) value_to_set
and rd = out(reg) <return value>
.
Sourcepub fn read_and_set_bits(&self, bitmask: usize) -> usize
pub fn read_and_set_bits(&self, bitmask: usize) -> usize
Atomically read a CSR and set bits specified in a bitmask
This method corresponds to the RISC-V CSRRS rd, csr, rs1
instruction where rs1 = in(reg) bitmask
and rd = out(reg) <return value>
.
Sourcepub fn read_and_clear_bits(&self, bitmask: usize) -> usize
pub fn read_and_clear_bits(&self, bitmask: usize) -> usize
Atomically read a CSR and clear bits specified in a bitmask
This method corresponds to the RISC-V CSRRC rd, csr, rs1
instruction where rs1 = in(reg) bitmask
and rd = out(reg) <return value>
.
Trait Implementations§
Source§impl<T: Clone + UIntLike, R: Clone + RegisterLongName, const V: usize> Clone for ReadWriteRiscvCsr<T, R, V>
impl<T: Clone + UIntLike, R: Clone + RegisterLongName, const V: usize> Clone for ReadWriteRiscvCsr<T, R, V>
Source§fn clone(&self) -> ReadWriteRiscvCsr<T, R, V>
fn clone(&self) -> ReadWriteRiscvCsr<T, R, V>
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<R: RegisterLongName, const V: usize> Readable for ReadWriteRiscvCsr<usize, R, V>
impl<R: RegisterLongName, const V: usize> Readable for ReadWriteRiscvCsr<usize, R, V>
type T = usize
type R = R
Source§fn read_as_enum<E>(&self, field: Field<Self::T, Self::R>) -> Option<E>where
E: TryFromValue<Self::T, EnumType = E>,
fn read_as_enum<E>(&self, field: Field<Self::T, Self::R>) -> Option<E>where
E: TryFromValue<Self::T, EnumType = E>,
Set the raw register value Read more
Source§fn is_set(&self, field: Field<Self::T, Self::R>) -> bool
fn is_set(&self, field: Field<Self::T, Self::R>) -> bool
Check if one or more bits in a field are set
Source§fn any_matching_bits_set(&self, field: FieldValue<Self::T, Self::R>) -> bool
fn any_matching_bits_set(&self, field: FieldValue<Self::T, Self::R>) -> bool
Check if any bits corresponding to the mask in the passed
FieldValue
are set.
This function is identical to is_set()
but operates on a FieldValue
rather
than a Field
, allowing for checking if any bits are set across multiple,
non-contiguous portions of a bitfield.Source§fn matches_all(&self, field: FieldValue<Self::T, Self::R>) -> bool
fn matches_all(&self, field: FieldValue<Self::T, Self::R>) -> bool
Check if all specified parts of a field match
Source§fn matches_any(&self, fields: &[FieldValue<Self::T, Self::R>]) -> bool
fn matches_any(&self, fields: &[FieldValue<Self::T, Self::R>]) -> bool
Check if any of the passed parts of a field exactly match the contained
value. This allows for matching on unset bits, or matching on specific values
in multi-bit fields.
Source§impl<R: RegisterLongName, const V: usize> Writeable for ReadWriteRiscvCsr<usize, R, V>
impl<R: RegisterLongName, const V: usize> Writeable for ReadWriteRiscvCsr<usize, R, V>
type T = usize
type R = R
Source§fn write(&self, field: FieldValue<Self::T, Self::R>)
fn write(&self, field: FieldValue<Self::T, Self::R>)
Write the value of one or more fields, overwriting the other fields with zero
Source§fn modify_no_read(
&self,
original: LocalRegisterCopy<Self::T, Self::R>,
field: FieldValue<Self::T, Self::R>,
)
fn modify_no_read( &self, original: LocalRegisterCopy<Self::T, Self::R>, field: FieldValue<Self::T, Self::R>, )
Write the value of one or more fields, maintaining the value of unchanged fields via a
provided original value, rather than a register read.
impl<T: Copy + UIntLike, R: Copy + RegisterLongName, const V: usize> Copy for ReadWriteRiscvCsr<T, R, V>
Auto Trait Implementations§
impl<T, R, const V: usize> Freeze for ReadWriteRiscvCsr<T, R, V>
impl<T, R, const V: usize> RefUnwindSafe for ReadWriteRiscvCsr<T, R, V>where
R: RefUnwindSafe,
T: RefUnwindSafe,
impl<T, R, const V: usize> Send for ReadWriteRiscvCsr<T, R, V>
impl<T, R, const V: usize> Sync for ReadWriteRiscvCsr<T, R, V>
impl<T, R, const V: usize> Unpin for ReadWriteRiscvCsr<T, R, V>
impl<T, R, const V: usize> UnwindSafe for ReadWriteRiscvCsr<T, R, V>where
R: UnwindSafe,
T: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Debuggable for Twhere
T: Readable,
impl<T> Debuggable for Twhere
T: Readable,
Source§fn debug(&self) -> RegisterDebugValue<Self::T, Self::R>
fn debug(&self) -> RegisterDebugValue<Self::T, Self::R>
Returns a
RegisterDebugValue
that
implements core::fmt::Debug
, the debug information is extracted from
<Register>::DebugInfo
.Source§impl<T, R, S> ReadWriteable for S
impl<T, R, S> ReadWriteable for S
type T = T
type R = R
Source§fn modify(
&self,
field: FieldValue<<S as ReadWriteable>::T, <S as ReadWriteable>::R>,
)
fn modify( &self, field: FieldValue<<S as ReadWriteable>::T, <S as ReadWriteable>::R>, )
Write the value of one or more fields, leaving the other fields unchanged