@@ -4,6 +4,8 @@ pub mod result;
4
4
5
5
use result:: Result ;
6
6
7
+ pub use riscv_pac_macros:: * ;
8
+
7
9
/// Trait for enums of target-specific exception numbers.
8
10
///
9
11
/// This trait should be implemented by a peripheral access crate (PAC) on its enum of available
@@ -137,23 +139,22 @@ pub unsafe trait HartIdNumber: Copy {
137
139
mod test {
138
140
use super :: * ;
139
141
140
- #[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
142
+ #[ derive( Clone , Copy , Debug , Eq , PartialEq , ExceptionNumber ) ]
141
143
#[ repr( u16 ) ]
142
144
enum Exception {
143
145
E1 = 1 ,
144
146
E3 = 3 ,
145
147
}
146
148
147
- #[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
149
+ #[ derive( Clone , Copy , Debug , Eq , PartialEq , InterruptNumber ) ]
148
150
#[ repr( u16 ) ]
149
151
enum Interrupt {
150
152
I1 = 1 ,
151
153
I2 = 2 ,
152
- I3 = 3 ,
153
154
I4 = 4 ,
154
155
}
155
156
156
- #[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
157
+ #[ derive( Clone , Copy , Debug , Eq , PartialEq , PriorityNumber ) ]
157
158
#[ repr( u8 ) ]
158
159
enum Priority {
159
160
P0 = 0 ,
@@ -162,7 +163,7 @@ mod test {
162
163
P3 = 3 ,
163
164
}
164
165
165
- #[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
166
+ #[ derive( Clone , Copy , Debug , Eq , PartialEq , HartIdNumber ) ]
166
167
#[ repr( u16 ) ]
167
168
enum Context {
168
169
C0 = 0 ,
@@ -253,27 +254,24 @@ mod test {
253
254
assert_eq ! ( Exception :: E1 . number( ) , 1 ) ;
254
255
assert_eq ! ( Exception :: E3 . number( ) , 3 ) ;
255
256
256
- assert_eq ! ( Exception :: from_number( 1 ) , Ok ( Exception :: E1 ) ) ;
257
- assert_eq ! ( Exception :: from_number( 3 ) , Ok ( Exception :: E3 ) ) ;
258
-
259
257
assert_eq ! ( Exception :: from_number( 0 ) , Err ( 0 ) ) ;
258
+ assert_eq ! ( Exception :: from_number( 1 ) , Ok ( Exception :: E1 ) ) ;
260
259
assert_eq ! ( Exception :: from_number( 2 ) , Err ( 2 ) ) ;
260
+ assert_eq ! ( Exception :: from_number( 3 ) , Ok ( Exception :: E3 ) ) ;
261
261
assert_eq ! ( Exception :: from_number( 4 ) , Err ( 4 ) ) ;
262
262
}
263
263
264
264
#[ test]
265
265
fn check_interrupt_enum ( ) {
266
266
assert_eq ! ( Interrupt :: I1 . number( ) , 1 ) ;
267
267
assert_eq ! ( Interrupt :: I2 . number( ) , 2 ) ;
268
- assert_eq ! ( Interrupt :: I3 . number( ) , 3 ) ;
269
268
assert_eq ! ( Interrupt :: I4 . number( ) , 4 ) ;
270
269
270
+ assert_eq ! ( Interrupt :: from_number( 0 ) , Err ( 0 ) ) ;
271
271
assert_eq ! ( Interrupt :: from_number( 1 ) , Ok ( Interrupt :: I1 ) ) ;
272
272
assert_eq ! ( Interrupt :: from_number( 2 ) , Ok ( Interrupt :: I2 ) ) ;
273
- assert_eq ! ( Interrupt :: from_number( 3 ) , Ok ( Interrupt :: I3 ) ) ;
273
+ assert_eq ! ( Interrupt :: from_number( 3 ) , Err ( 3 ) ) ;
274
274
assert_eq ! ( Interrupt :: from_number( 4 ) , Ok ( Interrupt :: I4 ) ) ;
275
-
276
- assert_eq ! ( Interrupt :: from_number( 0 ) , Err ( 0 ) ) ;
277
275
assert_eq ! ( Interrupt :: from_number( 5 ) , Err ( 5 ) ) ;
278
276
}
279
277
@@ -288,20 +286,18 @@ mod test {
288
286
assert_eq ! ( Priority :: from_number( 1 ) , Ok ( Priority :: P1 ) ) ;
289
287
assert_eq ! ( Priority :: from_number( 2 ) , Ok ( Priority :: P2 ) ) ;
290
288
assert_eq ! ( Priority :: from_number( 3 ) , Ok ( Priority :: P3 ) ) ;
291
-
292
289
assert_eq ! ( Priority :: from_number( 4 ) , Err ( 4 ) ) ;
293
290
}
294
291
295
292
#[ test]
296
- fn check_context_enum ( ) {
297
- assert_eq ! ( Context :: C0 . number( ) , 0 ) ;
298
- assert_eq ! ( Context :: C1 . number( ) , 1 ) ;
299
- assert_eq ! ( Context :: C2 . number( ) , 2 ) ;
300
-
301
- assert_eq ! ( Context :: from_number( 0 ) , Ok ( Context :: C0 ) ) ;
302
- assert_eq ! ( Context :: from_number( 1 ) , Ok ( Context :: C1 ) ) ;
303
- assert_eq ! ( Context :: from_number( 2 ) , Ok ( Context :: C2 ) ) ;
304
-
305
- assert_eq ! ( Context :: from_number( 3 ) , Err ( 3 ) ) ;
293
+ fn check_hart_id_enum ( ) {
294
+ assert_eq ! ( HartId :: H0 . number( ) , 0 ) ;
295
+ assert_eq ! ( HartId :: H1 . number( ) , 1 ) ;
296
+ assert_eq ! ( HartId :: H2 . number( ) , 2 ) ;
297
+
298
+ assert_eq ! ( HartId :: from_number( 0 ) , Ok ( HartId :: H0 ) ) ;
299
+ assert_eq ! ( HartId :: from_number( 1 ) , Ok ( HartId :: H1 ) ) ;
300
+ assert_eq ! ( HartId :: from_number( 2 ) , Ok ( HartId :: H2 ) ) ;
301
+ assert_eq ! ( HartId :: from_number( 3 ) , Err ( 3 ) ) ;
306
302
}
307
303
}
0 commit comments