Регистры: mmio.read и mmio.write
Один прямой запрос к регистру по имени из снимка SVD с проверкой прав и эффектов.
с 0.5.0
Методы
| Элемент | Сигнатура | Доступен с | API 3 |
|---|---|---|---|
mmio.read, mmio.write | mmio.read(name, *, allow_effects=False) -> int; mmio.write(name, value, *, allow_effects=False) -> dict | 0.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Фрагменты показывают отклонённые или нежелательные приёмы, а не рабочий рецепт.
Фрагменты для тела сценария; символы прошивки условные.