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:
RO: Read-Only (implementsReadableRegister).WO: Write-Only (implementsWritableRegister).RW: Read-Write (implements bothReadableRegisterandWritableRegister).
§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.)