1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- //! scounteren register
- use bit_field::BitField;
- /// scounteren register
- #[derive(Clone, Copy, Debug)]
- pub struct Scounteren {
- bits: usize,
- }
- impl Scounteren {
- /// User "cycle\[h\]" Enable
- #[inline]
- pub fn cy(&self) -> bool {
- self.bits.get_bit(0)
- }
- /// User "time\[h\]" Enable
- #[inline]
- pub fn tm(&self) -> bool {
- self.bits.get_bit(1)
- }
- /// User "instret\[h]\" Enable
- #[inline]
- pub fn ir(&self) -> bool {
- self.bits.get_bit(2)
- }
- /// User "hpm\[x\]" Enable (bits 3-31)
- #[inline]
- pub fn hpm(&self, index: usize) -> bool {
- assert!(3 <= index && index < 32);
- self.bits.get_bit(index)
- }
- }
- read_csr_as!(Scounteren, 0x106, __read_scounteren);
- write_csr!(0x106, __write_scounteren);
- set!(0x106, __set_scounteren);
- clear!(0x106, __clear_scounteren);
- set_clear_csr!(
- /// User cycle Enable
- , set_cy, clear_cy, 1 << 0);
- set_clear_csr!(
- /// User time Enable
- , set_tm, clear_tm, 1 << 1);
- set_clear_csr!(
- /// User instret Enable
- , set_ir, clear_ir, 1 << 2);
- #[inline]
- pub unsafe fn set_hpm(index: usize) {
- assert!(3 <= index && index < 32);
- _set(1 << index);
- }
- #[inline]
- pub unsafe fn clear_hpm(index: usize) {
- assert!(3 <= index && index < 32);
- _clear(1 << index);
- }
|