mideleg.rs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. //! mideleg register
  2. use bit_field::BitField;
  3. /// mideleg register
  4. #[derive(Clone, Copy, Debug)]
  5. pub struct Mideleg {
  6. bits: usize,
  7. }
  8. impl Mideleg {
  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 Delegate
  15. #[inline]
  16. pub fn usoft(&self) -> bool {
  17. self.bits.get_bit(0)
  18. }
  19. /// Supervisor Software Interrupt Delegate
  20. #[inline]
  21. pub fn ssoft(&self) -> bool {
  22. self.bits.get_bit(1)
  23. }
  24. /// User Timer Interrupt Delegate
  25. #[inline]
  26. pub fn utimer(&self) -> bool {
  27. self.bits.get_bit(4)
  28. }
  29. /// Supervisor Timer Interrupt Delegate
  30. #[inline]
  31. pub fn stimer(&self) -> bool {
  32. self.bits.get_bit(5)
  33. }
  34. /// User External Interrupt Delegate
  35. #[inline]
  36. pub fn uext(&self) -> bool {
  37. self.bits.get_bit(8)
  38. }
  39. /// Supervisor External Interrupt Delegate
  40. #[inline]
  41. pub fn sext(&self) -> bool {
  42. self.bits.get_bit(9)
  43. }
  44. }
  45. read_csr_as!(Mideleg, 0x303);
  46. set!(0x303);
  47. clear!(0x303);
  48. set_clear_csr!(
  49. /// User Software Interrupt Delegate
  50. , set_usoft, clear_usoft, 1 << 0);
  51. set_clear_csr!(
  52. /// Supervisor Software Interrupt Delegate
  53. , set_ssoft, clear_ssoft, 1 << 1);
  54. set_clear_csr!(
  55. /// User Timer Interrupt Delegate
  56. , set_utimer, clear_utimer, 1 << 4);
  57. set_clear_csr!(
  58. /// Supervisor Timer Interrupt Delegate
  59. , set_stimer, clear_stimer, 1 << 5);
  60. set_clear_csr!(
  61. /// User External Interrupt Delegate
  62. , set_uext, clear_uext, 1 << 8);
  63. set_clear_csr!(
  64. /// Supervisor External Interrupt Delegate
  65. , set_sext, clear_sext, 1 << 9);