Macro ruspiro_arch_aarch64::define_aarch64_register[][src]

macro_rules! define_aarch64_register {
    (@ $(#[doc = $rdoc : expr]) * $name : ident < $t : ty >
 {
     $($(#[doc = $fdoc : expr]) * $field : ident OFFSET($offset : expr)
       $(BITS($bits : expr)) ?
       $([$($(#[doc = $fvdoc : expr]) * $enum : ident = $value : expr), *])
       ?), *
 }) => { ... };
    ($(#[doc = $rdoc : expr]) * $name : ident < $t : ty >
 {
     $($(#[doc = $fdoc : expr]) * $field : ident OFFSET($offset : expr)
       $(BITS($bits : expr)) ?
       $([$($(#[doc = $fvdoc : expr]) * $enum : ident = $value : expr), *])
       ?), *
 }) => { ... };
}
Expand description

Macro to define an Aarch64 system register and its fields

Examples


define_aarch64_register!(
    /// Aarch64 register foo as 32Bit register
    /// It's always a Read/Write register definition, check the register documentation
    /// to verify write's are allowed
    foo<u32> {
        /// Register field BAR with it's enum fields
        BAR OFFSET(0) [
            /// Field value VAL1
            VAL1 = 0b1,
            VAL0 = 0b0
        ],
        /// Register field BAR with it's own
        /// enum like field values
        BAZ OFFSET(1) BITS(2) [
            VAL1 = 0b01,
            VAL2 = 0b10,
            VAL3 = 0b11
        ]
    }
);

    foo::write(
        foo::BAR::VAL1 | foo::BAZ::VAL2
    );