dimka76 63 2 августа Опубликовано 2 августа · Жалоба On 8/2/2024 at 7:22 PM, Arlleex said: Не совсем понял про GPIO. Я имел ввиду GPIOx_BSRR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 2 августа Опубликовано 2 августа · Жалоба 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. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 2 августа Опубликовано 2 августа · Жалоба 3 hours ago, Arlleex said: Из TRM на Cortex-M4, например Ну вот, все и разъяснилось насчет микроархитектурной имплементации bit-banding'а - это все-таки атомарные read-modify-write. Никакой магии. Нормальный инженерный подход. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Damyen 1 16 августа Опубликовано 16 августа · Жалоба А есть ли такой оператор в си, наподобие <<, чтобы сдвигать биты с переносом? Чтобы биты, которые "вылетают" из 7 бита, попадали в 0 бит того же регистра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 16 августа Опубликовано 16 августа · Жалоба Нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 16 августа Опубликовано 16 августа · Жалоба 6 часов назад, Damyen сказал: А есть ли такой оператор в си, наподобие <<, чтобы сдвигать биты с переносом? Чтобы биты, которые "вылетают" из 7 бита, попадали в 0 бит того же регистра. пишите: x = (u8)x << 1 | (u8)x >> 7; а компилятор, если умный, заменит на соответствующую инструкцию циклического сдвига. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artem K 0 18 августа Опубликовано 18 августа · Жалоба В 02.08.2024 в 22:51, Raven сказал: Ну вот, все и разъяснилось насчет микроархитектурной имплементации bit-banding'а - это все-таки атомарные read-modify-write. Никакой магии. Нормальный инженерный подход. Атомарные, но не для периферийных регистров : http://www.efton.sk/STM32/gotcha/g9.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AI7 0 19 августа Опубликовано 19 августа (изменено) · Жалоба В последних МК AVR вроде как есть возможность напрямую управлять битами портов. Для этого есть периферийные регистры OUTSET и OUTCLR, которые меняют биты портов без использования операции «чтение-изменение-запись». Правда, они расположены далеко в адресном пространстве, командой OUT не добраться. Напрямую можно управлять не только битами портов, но и переключать биты, менять направление и т.д. Вообще, в последних МК много чего накрутили, периферийных регистров около 550 штук. Изменено 19 августа пользователем AI7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться