ucause only as readable bits
This commit is contained in:
parent
e1232ed680
commit
8840aee369
@ -1,7 +1,5 @@
|
|||||||
//! ucause register
|
//! ucause register
|
||||||
|
|
||||||
pub use crate::register::mcause::{Interrupt, Exception, Trap};
|
|
||||||
|
|
||||||
/// ucause register
|
/// ucause register
|
||||||
#[derive(Clone, Copy, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
pub struct Ucause {
|
pub struct Ucause {
|
||||||
@ -14,47 +12,6 @@ impl Ucause {
|
|||||||
pub fn bits(&self) -> usize {
|
pub fn bits(&self) -> usize {
|
||||||
self.bits
|
self.bits
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the code field
|
|
||||||
pub fn code(&self) -> usize {
|
|
||||||
match () {
|
|
||||||
#[cfg(target_pointer_width = "32")]
|
|
||||||
() => self.bits & !(1 << 31),
|
|
||||||
#[cfg(target_pointer_width = "64")]
|
|
||||||
() => self.bits & !(1 << 63),
|
|
||||||
#[cfg(target_pointer_width = "128")]
|
|
||||||
() => self.bits & !(1 << 127),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Trap Cause
|
|
||||||
#[inline]
|
|
||||||
pub fn cause(&self) -> Trap {
|
|
||||||
if self.is_interrupt() {
|
|
||||||
Trap::Interrupt(Interrupt::from(self.code()))
|
|
||||||
} else {
|
|
||||||
Trap::Exception(Exception::from(self.code()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Is trap cause an interrupt.
|
|
||||||
#[inline]
|
|
||||||
pub fn is_interrupt(&self) -> bool {
|
|
||||||
match () {
|
|
||||||
#[cfg(target_pointer_width = "32")]
|
|
||||||
() => self.bits & (1 << 31) == 1 << 31,
|
|
||||||
#[cfg(target_pointer_width = "64")]
|
|
||||||
() => self.bits & (1 << 63) == 1 << 63,
|
|
||||||
#[cfg(target_pointer_width = "128")]
|
|
||||||
() => self.bits & (1 << 127) == 1 << 127,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Is trap cause an exception.
|
|
||||||
#[inline]
|
|
||||||
pub fn is_exception(&self) -> bool {
|
|
||||||
!self.is_interrupt()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
read_csr_as!(Ucause, 0x042, __read_ucause);
|
read_csr_as!(Ucause, 0x042, __read_ucause);
|
||||||
|
Loading…
Reference in New Issue
Block a user