Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

safe-mmio

Крейт safe-mmio предоставляет типы для обёртки регистров, которые можно безопасно читать или записывать.

Нельзя читатьЧтение без побочных эффектовЧтение с побочными эффектами
Нельзя записыватьReadPureReadOnly
Можно записыватьWriteOnlyReadPureWriteReadWrite
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0

use safe_mmio::fields::{ReadPure, ReadPureWrite, ReadWrite, WriteOnly};

#[repr(C, align(4))]
pub struct Registers {
    dr: ReadWrite<u16>,
    _reserved0: [u8; 2],
    rsr: ReadPure<ReceiveStatus>,
    _reserved1: [u8; 19],
    fr: ReadPure<Flags>,
    _reserved2: [u8; 6],
    ilpr: ReadPureWrite<u8>,
    _reserved3: [u8; 3],
    ibrd: ReadPureWrite<u16>,
    _reserved4: [u8; 2],
    fbrd: ReadPureWrite<u8>,
    _reserved5: [u8; 3],
    lcr_h: ReadPureWrite<u8>,
    _reserved6: [u8; 3],
    cr: ReadPureWrite<u16>,
    _reserved7: [u8; 3],
    ifls: ReadPureWrite<u8>,
    _reserved8: [u8; 3],
    imsc: ReadPureWrite<u16>,
    _reserved9: [u8; 2],
    ris: ReadPure<u16>,
    _reserved10: [u8; 2],
    mis: ReadPure<u16>,
    _reserved11: [u8; 2],
    icr: WriteOnly<u16>,
    _reserved12: [u8; 2],
    dmacr: ReadPureWrite<u8>,
    _reserved13: [u8; 3],
}
  • Чтение dr имеет побочный эффект: оно извлекает байт из очереди приёма (FIFO).
  • Чтение rsr (и других регистров) не имеет побочных эффектов. Это «чистое» (pure) чтение.
  • Существует несколько разных крейтов, которые предоставляют безопасные абстракции над операциями MMIO; мы рекомендуем крейт safe-mmio.
  • Разница между ReadPure или ReadOnly (и аналогично между ReadPureWrite и ReadWrite) в том, может ли чтение регистра иметь побочные эффекты, которые меняют состояние устройства, например чтение регистра данных извлекает байт из очереди приёма. ReadPure означает, что чтение не имеет побочных эффектов, это чистое чтение данных.