Module kernel::common::regs[][src]

Implementation of registers and bitfields.

Allows register maps to be specified like this:

use common::regs::{ReadOnly, ReadWrite, WriteOnly};

#[repr(C)]
struct Registers {
    // Control register: read-write
    cr: ReadWrite<u32, Control::Register>,
    // Status register: read-only
    s: ReadOnly<u32, Status::Register>,
}

and register fields and definitions to look like:

register_bitfields![u32,
    Status [
        TXCOMPLETE  OFFSET(0) NUMBITS(1) [],
        TXINTERRUPT OFFSET(1) NUMBITS(1) [],
        RXCOMPLETE  OFFSET(2) NUMBITS(1) [],
        RXINTERRUPT OFFSET(3) NUMBITS(1) [],
        MODE        OFFSET(4) NUMBITS(3) [
            FullDuplex = 0,
            HalfDuplex = 1,
            Loopback = 2,
            Disabled = 3
        ],
        ERRORCOUNT OFFSET(6) NUMBITS(3) []
    ]
];

Author

Structs

Field

Specific section of a register.

FieldValue

Values for the specific register fields.

LocalRegisterCopy

This behaves very similarly to a read-only register, but instead of doing a volatile read to MMIO to get the value for each function call, a copy of the register contents are stored locally in memory. This allows a peripheral to do a single read on a register, and then check which bits are set without having to do a full MMIO read each time. It also allows the value of the register to be "cached" in case the peripheral driver needs to clear the register in hardware yet still be able to check the bits.

ReadOnly

Read-only registers.

ReadWrite

Read/Write registers.

WriteOnly

Write-only registers.

Traits

IntLike

IntLike properties needed to read/write/modify a register.

RegisterLongName

Descriptive name for each register.

TryFromValue

Conversion of raw register value into enumerated values member. Implemented inside register_bitfields![] macro for each bit field.