Перейти к содержанию
    

Вопрос по побитовым операциям

11 минут назад, dimka76 сказал:

Я имел ввиду GPIOx_BSRR.

А там (выше уже верно написали) достаточно фиксировать данные и через логические вентили принудительно сбрасывать нужные биты. Поэтому BSRR - это именно отдельные регистры, а не область памяти, ячейки которой адресуют биты.

P.S. Спецификация AMBA у STM32F103 довольно древняя, там нет никаких других способов доступа к ячейкам, кроме "читать/писать" данные по 8/16/32 бита.

Из TRM на Cortex-M4, например

Цитата

Bit-banding

Bit-banding is an optional feature of the Cortex-M4 processor. Bit-banding maps a complete word of memory onto a single bit in the bit-band region. For example, writing to one of the alias words sets or clears the corresponding bit in the bit-band region. This enables every individual bit in the bit-banding region to be directly accessible from a word-aligned address using a single LDR instruction. It also enables individual bits to be toggled without performing a read-modify-write sequence of instructions.

The processor memory map includes two bit-band regions. These occupy the lowest 1MB of the SRAM and Peripheral memory regions respectively. These bit-band regions map each word in an alias region of memory to a bit in a bit-band region of memory.

The System bus interface contains logic that controls bit-band accesses as follows:

  • It remaps bit-band alias addresses to the bit-band region.
  • For reads, it extracts the requested bit from the read byte, and returns this in the Least Significant Bit (LSB) of the read data returned to the core.
  • For writes, it converts the write to an atomic read-modify-write operation.
  • The processor does not stall during bit-band operations unless it attempts to access the System bus while the bit-band operation is being carried out.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Arlleex said:

Из TRM на Cortex-M4, например

Ну вот, все и разъяснилось насчет микроархитектурной имплементации bit-banding'а - это все-таки атомарные read-modify-write. Никакой магии. Нормальный инженерный подход.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А есть ли такой оператор в си, наподобие <<, чтобы сдвигать биты с переносом? Чтобы биты, которые "вылетают" из 7 бита, попадали в 0 бит того же регистра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Damyen сказал:

А есть ли такой оператор в си, наподобие <<, чтобы сдвигать биты с переносом? Чтобы биты, которые "вылетают" из 7 бита, попадали в 0 бит того же регистра.

пишите: x = (u8)x << 1 | (u8)x >> 7;

а компилятор, если умный, заменит на соответствующую инструкцию циклического сдвига.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 02.08.2024 в 22:51, Raven сказал:

Ну вот, все и разъяснилось насчет микроархитектурной имплементации bit-banding'а - это все-таки атомарные read-modify-write. Никакой магии. Нормальный инженерный подход.

Атомарные, но не для периферийных регистров :

http://www.efton.sk/STM32/gotcha/g9.html
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В последних МК AVR вроде как есть возможность напрямую управлять битами портов. Для этого есть периферийные регистры OUTSET и OUTCLR, которые меняют биты портов без использования операции «чтение-изменение-запись».

Правда, они расположены далеко в адресном пространстве, командой OUT не добраться.

Напрямую можно управлять не только битами портов, но и переключать биты, менять направление и т.д.

Вообще, в последних МК много чего накрутили, периферийных регистров около 550 штук.

Изменено пользователем AI7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...