[][src]Crate cortex_a

Low level access to Cortex-A processors.

Currently Supported Architectures

  • [x] AArch64
  • [ ] AArch32

Minimum Supported Rust Version

Requires rustc 1.45.0 or later due to use of the new asm!() syntax.

Usage

Example from https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials

unsafe fn el2_to_el1_transition() -> ! {
    // Enable timer counter registers for EL1.
    CNTHCTL_EL2.write(CNTHCTL_EL2::EL1PCEN::SET + CNTHCTL_EL2::EL1PCTEN::SET);

    // No offset for reading the counters.
    CNTVOFF_EL2.set(0);

    // Set EL1 execution state to AArch64.
    HCR_EL2.write(HCR_EL2::RW::EL1IsAarch64);

    // Set up a simulated exception return.
    SPSR_EL2.write(
        SPSR_EL2::D::Masked
            + SPSR_EL2::A::Masked
            + SPSR_EL2::I::Masked
            + SPSR_EL2::F::Masked
            + SPSR_EL2::M::EL1h,
    );

Disclaimer

Descriptive comments in the source files are taken from the ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile.

Modules

asm

Miscellaneous assembly instructions

barrier
regs

Processor core registers