@@ -34,7 +34,7 @@ pub fn render(
34
34
}
35
35
36
36
let name_pc = Ident :: from ( & * p. name . to_sanitized_upper_case ( ) ) ;
37
- let address = util:: hex ( p. base_address ) ;
37
+ let address = util:: hex ( p. base_address as u64 ) ;
38
38
let description = util:: respace ( p. description . as_ref ( ) . unwrap_or ( & p. name ) ) ;
39
39
let derive_regs = p_derivedfrom. is_some ( ) && p_original. registers . is_none ( ) ;
40
40
@@ -600,7 +600,11 @@ fn cluster_size_in_bits(info: &ClusterInfo, defs: &Defaults) -> Result<u32> {
600
600
fn expand_cluster ( cluster : & Cluster , defs : & Defaults ) -> Result < Vec < RegisterBlockField > > {
601
601
let mut cluster_expanded = vec ! [ ] ;
602
602
603
- let cluster_size = cluster_size_in_bits ( cluster, defs)
603
+ let reg_size = cluster. size . or ( defs. size ) ;
604
+ let mut defs = defs. clone ( ) ;
605
+ defs. size = reg_size;
606
+
607
+ let cluster_size = cluster_size_in_bits ( cluster, & defs)
604
608
. chain_err ( || format ! ( "Cluster {} has no determinable `size` field" , cluster. name) ) ?;
605
609
606
610
match cluster {
@@ -724,7 +728,12 @@ fn cluster_block(
724
728
. replace ( "[%s]" , "" )
725
729
. replace ( "%s" , "" ) ;
726
730
let name_sc = Ident :: from ( & * mod_name. to_sanitized_snake_case ( ) ) ;
727
- let reg_block = register_or_cluster_block ( & c. children , defaults, Some ( & mod_name) , nightly) ?;
731
+
732
+ let reg_size = c. size . or ( defaults. size ) ;
733
+ let mut defaults = defaults. clone ( ) ;
734
+ defaults. size = reg_size;
735
+
736
+ let reg_block = register_or_cluster_block ( & c. children , & defaults, Some ( & mod_name) , nightly) ?;
728
737
729
738
// Generate definition for each of the registers.
730
739
let registers = util:: only_registers ( & c. children ) ;
@@ -734,14 +743,14 @@ fn cluster_block(
734
743
& registers,
735
744
p,
736
745
all_peripherals,
737
- defaults,
746
+ & defaults,
738
747
) ?) ;
739
748
}
740
749
741
750
// Generate the sub-cluster blocks.
742
751
let clusters = util:: only_clusters ( & c. children ) ;
743
752
for c in & clusters {
744
- mod_items. push ( cluster_block ( c, defaults, p, all_peripherals, nightly) ?) ;
753
+ mod_items. push ( cluster_block ( c, & defaults, p, all_peripherals, nightly) ?) ;
745
754
}
746
755
747
756
Ok ( quote ! {
0 commit comments