0

假设我有一个(非常简化的)PIO 程序,如下所示,它一次将 8 位从uint32输出移位寄存器 (OSR) 中的 a 移入 X 寄存器,并将所有 8 位并行写入一组连续的引脚。

.wrap_target
    out x, 8
    mov pins, x     
.wrap

RP2040 数据表说

OUT 数据的最低有效位映射到 PINCTRL_OUT_BASE,此映射继续 PINCTRL_OUT_COUNT 位,在 GPIO31 之后回绕。

从某种意义上说,这似乎很清楚,如果我的代码写入0x01010101TX FIFO,我希望每次都通过 PIO 循环将 1 写入 PINCTRL_OUT_BASE 并将 0 写入其他引脚。

但是如果值是,比如说,会发生什么0x0f070301?数据表说

移位方向可以是左/右,由处理器通过配置寄存器配置

选择左移是否意味着第一遍将导致 1 被写入从 PINCTRL_OUT_BASE 开始的 4 个连续引脚?或者 ARM 内存模型的小字节顺序是否意味着 0x01 字节将是从 OSR 中提取的第一个字节?

我真正想要的是了解如何可视化 OSR 中的位。我应该认为0x0f070301

00001111 00000111 00000011 00000001

还是反过来?

谢谢!

4

0 回答 0