Skip to main content

register

Macro register 

Source
macro_rules! register {
    ($(#[$attr:meta])* pub struct $name:ident ($val_type:ty) @ $offset:expr, RO { $($field_spec:tt)* }) => { ... };
    ($(#[$attr:meta])* pub struct $name:ident ($val_type:ty) @ $offset:expr, WO { $($field_spec:tt)* }) => { ... };
    ($(#[$attr:meta])* pub struct $name:ident ($val_type:ty) @ $offset:expr, RW { $($field_spec:tt)* }) => { ... };
    ($(#[$attr:meta])* pub struct $name:ident ($val_type:ty) @ $offset:expr, RO ;) => { ... };
    ($(#[$attr:meta])* pub struct $name:ident ($val_type:ty) @ $offset:expr, WO ;) => { ... };
    ($(#[$attr:meta])* pub struct $name:ident ($val_type:ty) @ $offset:expr, RW ;) => { ... };
    ($name:ident, $val_type:ty, $offset:expr, RO, { $($field_spec:tt)* }) => { ... };
    ($name:ident, $val_type:ty, $offset:expr, WO, { $($field_spec:tt)* }) => { ... };
    ($name:ident, $val_type:ty, $offset:expr, RW, { $($field_spec:tt)* }) => { ... };
}
Expand description

A macro for defining a Register and its bitfields.

This macro generates a bitfield struct that implements the Register, RegisterReadAccess and RegisterWriteAccess traits. The access mode (RO, WO, RW) determines which of the ReadableRegister and WritableRegister traits are implemented.

Access modes:

§Examples

register! {
    pub struct StatusReg(u32) @ 0x10, RW {
        pub enabled, set_enabled: 0;
        pub error, _: 1;
        pub value, set_value: 15, 8;
    }
}

Full-width register (no bitfields):

register! {
    pub struct ControlReg(u32) @ 0x14, RW;
}

NOTE: If you use this macro, you must add a dependency on the bitfield crate. (At the time of writing, it isn’t easy to avoid this.)