Порядок битов вывода PIO RP2040

Предположим, у меня есть (очень упрощенная) программа PIO, подобная следующей, которая сдвигает 8 бит за раз из uint32 из выходного сдвигового регистра (OSR) в регистр 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 на другие контакты.

Но что будет, если значение, скажем,? В даташите говорится

Направление сдвига может быть влево / вправо, настраивается процессором через регистры конфигурации.

Означает ли выбор сдвига влево, что первый проход приведет к записи 1 на 4 последовательных контакта, начиная с PINCTRL_OUT_BASE? Или небольшой порядок байтов в модели памяти ARM означает, что байт 0x01 будет первым, извлеченным из OSR?

Что мне действительно нужно здесь, так это понять, как визуализировать биты в OSR. Я должен думать о 0x0f070301 в качестве

00001111 00000111 00000011 00000001

или наоборот?

Спасибо!

0 ответов

Другие вопросы по тегам