假设我有一个(非常简化的)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 之后回绕。
从某种意义上说,这似乎很清楚,如果我的代码写入0x01010101
TX FIFO,我希望每次都通过 PIO 循环将 1 写入 PINCTRL_OUT_BASE 并将 0 写入其他引脚。
但是如果值是,比如说,会发生什么0x0f070301
?数据表说
移位方向可以是左/右,由处理器通过配置寄存器配置
选择左移是否意味着第一遍将导致 1 被写入从 PINCTRL_OUT_BASE 开始的 4 个连续引脚?或者 ARM 内存模型的小字节顺序是否意味着 0x01 字节将是从 OSR 中提取的第一个字节?
我真正想要的是了解如何可视化 OSR 中的位。我应该认为0x0f070301
是
00001111 00000111 00000011 00000001
还是反过来?
谢谢!