[][src]Macro ruspiro_arch_aarch64::define_aarch64_register

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),*
        ])?),*
    }) => { ... };
}

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
    );