[−][src]Macro ruspiro_register::define_mmio_register
Macro to define a MMIO register with specific defined access mode.
The access mode could one of: ReadOnly, WriteOnly, ReadWrite.
The register size/width could be one of: u8, u16, u32, u64
Examples
Define a simple MMIO register that might only be accessed with it's raw value
define_mmio_register!( FOO<ReadWrite<u32>@(0x3F20_0000+0x10)> );
Define a MMIO register containing a single field at a given offset with 1 bit length.
define_mmio_register!( FOO<ReadWrite<u32>@(0x3F20_0000)> { BAR OFFSET(0) } );
Define a MMIO register containing several fields with different offsets and bit length
define_mmio_register!( FOO<ReadWrite<u32>@(0x3F20_0000)> { BAR OFFSET(0), BAZ OFFSET(3) BITS(3) } );
Define multiple MMIO register at once
define_mmio_register!( FOO<ReadWrite<u32>@(0x3F20_0000)>, BAR<ReadOnly<u32>@(0x3F20_0010)> { BAZ OFFSET(0) BITS(2) [ VAL1 = 0b10 ] } );
Define a MMIO register where one field has defined specific values to be choosen from when writing to or updating this specific register field
define_mmio_register!( /// A MMIO Register FOO /// Defines as Read/Write register FOO<ReadWrite<u32>@(0x3F20_0000)> { /// This is a register field BAR BAR OFFSET(3) BITS(3), /// This is a register field BAZ. /// It contains enum like field value definitions BAZ OFFSET(6) BITS(3) [ /// This is a value of the register field VAL1 = 0b000, VAL2 = 0b010 ], BAL OFFSET(9) BITS(2) [ VAL1 = 0b01, VAL2 = 0b11 ] } ); fn main() { // write a specific value for one field of the MMIO register FOO::Register.write_value( FOO::BAL::VAL1 ); // combine field values of different fields to update the MMIO register FOO::Register.write_value( FOO::BAZ::VAL1 | FOO::BAL::VAL2 ); // write a specific value to a register field that does not provide default/enum values FOO::Register.write_value( FOO::BAR::with_value(0b010) ); }