# [−] [src] Crate volatile_register

Volatile access to memory mapped hardware registers

# Usage

    use volatile_register::RW;

    // Create a struct that represents the memory mapped register block
    /// Nested Vector Interrupt Controller
    #[repr(C)]
    pub struct Nvic {
        /// Interrupt Set-Enable
        pub iser: [RW<u32>; 8],
        reserved0: [u32; 24],
        /// Interrupt Clear-Enable
        pub icer: [RW<u32>; 8],
        reserved1: [u32; 24],
        // .. more registers ..
    }

    // Access the registers by casting the base address of the register block
    // to the previously declared `struct`
    let nvic = 0xE000_E100 as *const Nvic;
    // Unsafe because the compiler can't verify the address is correct
    unsafe { (*nvic).iser[0].write(1) }

## Structs

RO | Read-Only register
RW | Read-Write register
WO | Write-Only register

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g. `str,u8` or `String,struct:Vec,test`)