@@ -352,9 +352,15 @@ pub fn gen_peripheral(p: &Peripheral, d: &Defaults) -> Vec<Tokens> {
352352 items. push ( struct_) ;
353353
354354 for register in registers {
355+ let access = access ( & register) ;
356+
355357 items. extend ( gen_register ( register, d) ) ;
356- items. extend ( gen_register_r ( register, d) ) ;
357- items. extend ( gen_register_w ( register, d) ) ;
358+ if access != Access :: WriteOnly {
359+ items. extend ( gen_register_r ( register, d) ) ;
360+ }
361+ if access != Access :: ReadOnly {
362+ items. extend ( gen_register_w ( register, d) ) ;
363+ }
358364 }
359365
360366 items
@@ -436,17 +442,8 @@ fn type_of(r: &Register) -> String {
436442 ( & * ty) . to_pascal_case ( )
437443}
438444
439- #[ doc( hidden) ]
440- pub fn gen_register ( r : & Register , d : & Defaults ) -> Vec < Tokens > {
441- let mut items = vec ! [ ] ;
442-
443- let ty = type_of ( r) ;
444- let name = Ident :: new ( & * ty) ;
445- let bits_ty = r. size
446- . or ( d. size )
447- . expect ( & format ! ( "{:#?} has no `size` field" , r) )
448- . to_ty ( ) ;
449- let access = r. access . unwrap_or_else ( || {
445+ fn access ( r : & Register ) -> Access {
446+ r. access . unwrap_or_else ( || {
450447 let fields = r. fields
451448 . as_ref ( )
452449 . expect ( & format ! ( "{:#?} has no `fields` field" , r) ) ;
@@ -457,7 +454,20 @@ pub fn gen_register(r: &Register, d: &Defaults) -> Vec<Tokens> {
457454 } else {
458455 Access :: ReadWrite
459456 }
460- } ) ;
457+ } )
458+ }
459+
460+ #[ doc( hidden) ]
461+ pub fn gen_register ( r : & Register , d : & Defaults ) -> Vec < Tokens > {
462+ let mut items = vec ! [ ] ;
463+
464+ let ty = type_of ( r) ;
465+ let name = Ident :: new ( & * ty) ;
466+ let bits_ty = r. size
467+ . or ( d. size )
468+ . expect ( & format ! ( "{:#?} has no `size` field" , r) )
469+ . to_ty ( ) ;
470+ let access = access ( r) ;
461471
462472 let name_r = Ident :: new ( format ! ( "{}R" , ty) ) ;
463473 let name_w = Ident :: new ( format ! ( "{}W" , ty) ) ;
0 commit comments