12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- //! stvec register
- pub use crate::register::mtvec::TrapMode;
- /// stvec register
- #[derive(Clone, Copy, Debug)]
- pub struct Utvec {
- bits: usize,
- }
- impl Utvec {
- /// Returns the contents of the register as raw bits
- #[inline]
- pub fn bits(&self) -> usize {
- self.bits
- }
- /// Returns the trap-vector base-address
- #[inline]
- pub fn address(&self) -> usize {
- self.bits - (self.bits & 0b11)
- }
- /// Returns the trap-vector mode
- #[inline]
- pub fn trap_mode(&self) -> Option<TrapMode> {
- let mode = self.bits & 0b11;
- match mode {
- 0 => Some(TrapMode::Direct),
- 1 => Some(TrapMode::Vectored),
- _ => None,
- }
- }
- }
- read_csr_as!(Utvec, 0x005);
- write_csr!(0x005);
- /// Writes the CSR
- #[inline]
- pub unsafe fn write(addr: usize, mode: TrapMode) {
- _write(addr + mode as usize);
- }
|