burrbull: so, I tried a bit of an experiment manually splitting out the peripheral modules into crates. From the bit of work done, it requires splitting out the `generic` module into its own crate, and importing it into the peripheral crate(s). The `R` and `W` types can no longer just be aliased (since they now come from an external crate). Instead, the aliases turn into `pub struct R(generic::R);`. Then, for the field methods: ```rust impl R { pub const fn field(&self) -> FieldR { FieldR::new(self.0.bits() & field_mask) } } ``` Going to take a bit to do that programmatically in `svd2rust` and `form`. Like, `form` is going to need an option to generate new crates, instead of just modules. It may even require bringing the `form` functionality internal to `svd2rust`, idk yet.