Регистры: mmio.read и mmio.write

Один прямой запрос к регистру по имени из снимка SVD с проверкой прав и эффектов.

с 0.5.0

Методы

ЭлементСигнатураДоступен сAPI 3
mmio.read, mmio.writemmio.read(name, *, allow_effects=False) -> int; mmio.write(name, value, *, allow_effects=False) -> dict0.5.0новое

Изменения API 3 (0.5.0)

Новое в 0.5.0, await не нужен. Нужен [mmio] svd в session.toml; эффекты чтения и записи — только с allow_effects=True.

Правильно

Атомарная установка через BSRR; флаги W1C — явной маской своих битов. Для входа модели подтвердите источник → IDR → потребление прошивкой, соседний вход и восстановление (tests/modeled-gpio).

idr = t.mmio.read("GPIOC.IDR")                  # int, one direct read
ack = t.mmio.write("GPIOC.BSRR", 1 << 13)         # atomic set, no RMW
t.check("acknowledged", ack["acknowledged"], True)
flags = t.mmio.read("DMA2.LISR")
t.mmio.write("DMA2.LIFCR", flags & 0x3D, allow_effects=True)   # W1C: only stream 0 bits

Не рекомендуется

RMW всего регистра теряет атомарность; чтение регистра с эффектом без согласия отклоняется. Повтор после потери ACK запрещён. override не делает IDR записываемым; ACK игнорируемой записи не доказывает воздействия.

t.mmio.write("GPIOC.ODR", t.mmio.read("GPIOC.ODR") | (1 << 13))   # RMW: not atomic
data = t.mmio.read("USART2.DR")         # readAction in the SVD: effect_consent_required
try:
    data = t.mmio.read("USART2.DR", allow_effects=True)
except ApiError:
    data = t.mmio.read("USART2.DR", allow_effects=True)    # retry: the FIFO may be drained

Фрагменты показывают отклонённые или нежелательные приёмы, а не рабочий рецепт.

Фрагменты для тела сценария; символы прошивки условные.

← Выражения и памятьВсе группыПроверки →