1
1
//! mip register
2
2
3
- /// mip register
4
- # [ derive ( Clone , Copy , Debug ) ]
5
- pub struct Mip {
6
- bits : usize ,
3
+ read_write_csr ! {
4
+ /// `mip` register
5
+ Mip : 0x344 ,
6
+ mask : 0xaaa ,
7
7
}
8
8
9
- impl Mip {
10
- /// Returns the contents of the register as raw bits
11
- #[ inline]
12
- pub fn bits ( & self ) -> usize {
13
- self . bits
14
- }
15
-
9
+ read_write_csr_field ! {
10
+ Mip ,
16
11
/// Supervisor Software Interrupt Pending
17
- #[ inline]
18
- pub fn ssoft ( & self ) -> bool {
19
- self . bits & ( 1 << 1 ) != 0
20
- }
12
+ ssoft: 1 ,
13
+ }
21
14
15
+ read_only_csr_field ! {
16
+ Mip ,
22
17
/// Machine Software Interrupt Pending
23
- #[ inline]
24
- pub fn msoft ( & self ) -> bool {
25
- self . bits & ( 1 << 3 ) != 0
26
- }
18
+ msoft: 3 ,
19
+ }
27
20
21
+ read_write_csr_field ! {
22
+ Mip ,
28
23
/// Supervisor Timer Interrupt Pending
29
- #[ inline]
30
- pub fn stimer ( & self ) -> bool {
31
- self . bits & ( 1 << 5 ) != 0
32
- }
24
+ stimer: 5 ,
25
+ }
33
26
27
+ read_only_csr_field ! {
28
+ Mip ,
34
29
/// Machine Timer Interrupt Pending
35
- #[ inline]
36
- pub fn mtimer ( & self ) -> bool {
37
- self . bits & ( 1 << 7 ) != 0
38
- }
30
+ mtimer: 7 ,
31
+ }
39
32
33
+ read_write_csr_field ! {
34
+ Mip ,
40
35
/// Supervisor External Interrupt Pending
41
- #[ inline]
42
- pub fn sext ( & self ) -> bool {
43
- self . bits & ( 1 << 9 ) != 0
44
- }
36
+ sext: 9 ,
37
+ }
45
38
39
+ read_only_csr_field ! {
40
+ Mip ,
46
41
/// Machine External Interrupt Pending
47
- #[ inline]
48
- pub fn mext ( & self ) -> bool {
49
- self . bits & ( 1 << 11 ) != 0
50
- }
42
+ mext: 11 ,
51
43
}
52
44
53
- read_csr_as ! ( Mip , 0x344 ) ;
54
45
set ! ( 0x344 ) ;
55
46
clear ! ( 0x344 ) ;
56
47
@@ -63,3 +54,25 @@ set_clear_csr!(
63
54
set_clear_csr ! (
64
55
/// Supervisor External Interrupt Pending
65
56
, set_sext, clear_sext, 1 << 9 ) ;
57
+
58
+ #[ cfg( test) ]
59
+ mod tests {
60
+ use super :: * ;
61
+
62
+ #[ test]
63
+ fn test_mip ( ) {
64
+ let mut m = Mip :: from_bits ( 0 ) ;
65
+
66
+ test_csr_field ! ( m, ssoft) ;
67
+ test_csr_field ! ( m, stimer) ;
68
+ test_csr_field ! ( m, sext) ;
69
+
70
+ assert ! ( !m. msoft( ) ) ;
71
+ assert ! ( !m. mtimer( ) ) ;
72
+ assert ! ( !m. mext( ) ) ;
73
+
74
+ assert ! ( Mip :: from_bits( 1 << 3 ) . msoft( ) ) ;
75
+ assert ! ( Mip :: from_bits( 1 << 7 ) . mtimer( ) ) ;
76
+ assert ! ( Mip :: from_bits( 1 << 11 ) . mext( ) ) ;
77
+ }
78
+ }
0 commit comments