mip.rs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. //! mip register
  2. use bit_field::BitField;
  3. /// mip register
  4. #[derive(Clone, Copy, Debug)]
  5. pub struct Mip {
  6. bits: usize,
  7. }
  8. impl Mip {
  9. /// Returns the contents of the register as raw bits
  10. #[inline]
  11. pub fn bits(&self) -> usize {
  12. self.bits
  13. }
  14. /// User Software Interrupt Pending
  15. #[inline]
  16. pub fn usoft(&self) -> bool {
  17. self.bits.get_bit(0)
  18. }
  19. /// Supervisor Software Interrupt Pending
  20. #[inline]
  21. pub fn ssoft(&self) -> bool {
  22. self.bits.get_bit(1)
  23. }
  24. /// Machine Software Interrupt Pending
  25. #[inline]
  26. pub fn msoft(&self) -> bool {
  27. self.bits.get_bit(3)
  28. }
  29. /// User Timer Interrupt Pending
  30. #[inline]
  31. pub fn utimer(&self) -> bool {
  32. self.bits.get_bit(4)
  33. }
  34. /// Supervisor Timer Interrupt Pending
  35. #[inline]
  36. pub fn stimer(&self) -> bool {
  37. self.bits.get_bit(5)
  38. }
  39. /// Machine Timer Interrupt Pending
  40. #[inline]
  41. pub fn mtimer(&self) -> bool {
  42. self.bits.get_bit(7)
  43. }
  44. /// User External Interrupt Pending
  45. #[inline]
  46. pub fn uext(&self) -> bool {
  47. self.bits.get_bit(8)
  48. }
  49. /// Supervisor External Interrupt Pending
  50. #[inline]
  51. pub fn sext(&self) -> bool {
  52. self.bits.get_bit(9)
  53. }
  54. /// Machine External Interrupt Pending
  55. #[inline]
  56. pub fn mext(&self) -> bool {
  57. self.bits.get_bit(11)
  58. }
  59. }
  60. read_csr_as!(Mip, 0x344, __read_mip);