Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 новичку в ARM что к чему
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт дек 23, 2025 09:42:56

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8919 ]     ... , , , 435, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 11:52:00 
Друг Кота

Карма: 20
Рейтинг сообщений: 230
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6452
Рейтинг сообщения: 0
С точки зрения программиста еще неизвестно, что лучше: сразу знать, что происходит, или вспоминать карту адресов...

и какие воспоминания каких адресов на вас норовят нахлынуть при виде такого кода?
Код:
TOGGLE_REG_BIT(GPIOC->ODR, GPIO_ODR_ODR13);

в том и красота приведенных макросов, что ни о чем больше не надо заботиться, если хочется щелкнуть каким-нибудь битиком.

VladislavS писал(а):
Во-первых, в R2 и R4 адреса из воздуха материализовались?

пост не о таинстве экономии парочки байтов.

VladislavS писал(а):
Во-вторых, ни на чём кроме некрофильского F1 это не работает, ибо порты не попадают в область BB.

ложное утверждение. еще как работает на F1, F2, F3, F4 и L1. и, да, я считаю, что STM32F103C8T6 по прежнему весьма хорош.

VladislavS писал(а):
В-третьих, опять макросы, которые даже не подумают предупредить что параметры заданы неверно.

разве мысль о том, что в регистр TIM1->CR1 не стоит пихать что-то отличное от TIM_CR1_чегототам, является такой уж сложной для понимания? надо ли увлекаться гиперопекой в этом случае?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 14:14:52 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18447
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Вы не поверите: если всё обернуть в макрос, то и щелканье битиком даже с управлением по интернету через океан ничем от вашего примера отличаться не будет!

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 18:41:05 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 26
Зарегистрирован: Ср мар 09, 2016 08:07:41
Сообщений: 300
Рейтинг сообщения: 2
разве мысль о том, что в регистр TIM1->CR1 не стоит пихать что-то отличное от TIM_CR1_чегототам, является такой уж сложной для понимания? надо ли увлекаться гиперопекой в этом случае?

не надо валить все в одну кучу. когда у меня в коде встречается именованная константа, то я могу навести на нее мышкой и посмотреть значение:
Изображение
а когда я вижу что-то вроде:
Цитата:
#define GET_BIT(AREA, ADDR, BIT) *(__IO unsigned *)(AREA ## _BB_BASE + 32 * ((unsigned)&ADDR - AREA ## _BASE) + 4 * __builtin_ctz(BIT))

я считаю что автор пытается обфусцировать код. потому что:
1. профита от использования bit-banding никакого.
2. при портировании кода на другие архитектуры, все эти макросы придется переписывать. очевидно автор считает, что это будет делать не он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 19:46:56 
Друг Кота

Карма: 20
Рейтинг сообщений: 230
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6452
Рейтинг сообщения: 0
не надо валить все в одну кучу. когда у меня в коде встречается именованная константа, то я могу навести на нее мышкой и посмотреть значение:

а в моем случае, что вам мешает сделать то же самое? там ровно те же регистры и макроопределения, что и у вас.

Цитата:
1. профита от использования bit-banding никакого.

это серьезное заблуждение. или вы предполагаете, что сидели такие армы и думали, как бы им сделать что нибудь громоздкое и бесполезное, потратив кучу бабла на разработку?

Цитата:
2. при портировании кода на другие архитектуры, все эти макросы придется переписывать. очевидно автор считает, что это будет делать не он.

никогда ничего не портировал, но переписать макросы для замены битбендинга на что-то другое -- это точно будет одна из самых меньших зол портирования.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 20:50:46 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
ложное утверждение.
Посмотрите скриншот в моём сообщении, там видно адрес порта. Не может он там работать. Собственно, и не работает.

Добавлено after 8 minutes 32 seconds:
надо ли увлекаться гиперопекой в этом случае?
Надо. Если вы полезете BB в порты GPIO на том же F3, то компилятор должен, как минимум, покрутить у виска и не дать этого сделать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 21:02:28 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7321
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Силабы (Silicon Labs) сделали проще. В самой функции:
Код:
__STATIC_INLINE unsigned int BUS_RegBitRead(volatile const uint32_t *addr,
                                            unsigned int bit)
{
#if defined(BITBAND_PER_BASE)
  uint32_t aliasAddr =
    BITBAND_PER_BASE + (((uint32_t)addr - PER_MEM_BASE) * (uint32_t)32) + (bit * (uint32_t) 4);

  return *(volatile uint32_t *)aliasAddr;
#else
  return ((*addr) >> bit) & 1UL;
#endif
}

Если есть - пользуем бит-банд, а если нет - маску.

А ST до этого в HAL или LL - не додумался?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 21:13:42 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
Это плохо. Ты рассчитываешь на атомарность, а он тебе RMW влепит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 21:41:28 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1660
Рейтинг сообщения: 0
а когда я вижу что-то вроде:
Цитата:
#define GET_BIT(AREA, ADDR, BIT) *(__IO unsigned *)(AREA ## _BB_BASE + 32 * ((unsigned)&ADDR - AREA ## _BASE) + 4 * __builtin_ctz(BIT))

я считаю что автор пытается обфусцировать код. потому что:
1. профита от использования bit-banding никакого.
На чём основано это утверждение?

Добавлено after 1 minute 21 second:
Это плохо. Ты рассчитываешь на атомарность, а он тебе RMW влепит.
Там вроде только одно чтение. Причём тут RMW?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 21:42:17 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 476
Рейтинг сообщения: 0
Силабы (Silicon Labs) сделали проще.

Если в функцию volatile аргументы передавать, то дополнительные накладные расходы будут... Вообще самую крутую систему я в Pico видел, там атомарные Or/And/Xor работают практические со всеми регистрами, просто смещение к адресам добавляется. И в отличие от BB, время выполнения таких операций такая же как у обычной записи. А у Pico2 для портов есть сопроцессор и чтобы пин затоглить нужно вызвать соответствующую 32-х битную инструкцию которой только номер пина передается, никаких базовых адресов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 21:46:48 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1660
Рейтинг сообщения: 0
А у Pico2 для портов есть сопроцессор и чтобы пин затоглить нужно вызвать соответствующую 32-х битную инструкцию которой только номер пина передается, никаких базовых адресов.
Toggle GPIO пина на XMC4xxx Infineon:
Код:
#define Ptog2(port, pin)    (GPIO[port].OM = 0x10001u << (pin))
#define Ptog(port_pin)      Ptog2(port_pin)
Как видно - тоже просто запись в соответствующий IO-регистр.
не Pico единым! 8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 21:53:48 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
Там вроде только одно чтение. Причём тут RMW?
Интуиция подсказывает, что там где чтение, там и запись где-то рядом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 22:05:18 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 476
Рейтинг сообщения: 0
Код:
#define Ptog2(port, pin)    (GPIO[port].OM = 0x10001u << (pin))
#define Ptog(port_pin)      Ptog2(port_pin)
Как видно - тоже просто запись в соответствующий IO-регистр.

Допустим нужно затоглить GP40, значит сначала в регистр записывается 40, это делается 16-ти битной MOVS, а в вашем случае константа более жирная и инструкция скорее всего будет 32-х битная. Далее на Pico идет 32-х битная инструкция сопроцессора, а у вас будет запись в порт, перед этим загрузка адреса этого порта и еще отдельно сам этот адрес, суммарно ~96 бит. Или нет?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 22:23:09 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1660
Рейтинг сообщения: 0
Допустим нужно затоглить GP40, значит сначала в регистр записывается 40, это делается 16-ти битной MOVS, а в вашем случае константа более жирная и инструкция скорее всего будет 32-х битная. Далее на Pico идет 32-х битная инструкция сопроцессора, а у вас будет запись в порт, перед этим загрузка адреса этого порта и еще отдельно сам этот адрес, суммарно ~96 бит. Или нет?
Я не знаю архитектуры этого самого Pico, потому не могу сказать про него ничего. Но знаю что у каждой архитектуры есть свои преимущества.

А насчёт "константы 40": Если мне нужно "затугглить" не один бит порта, а скажем = 8 соседних? То на XMC4xxx будет ровно та же самая инструкция записи. Только с другой константой. И toggle будет выполнен одновременно всеми пинами.
А на Pico для этого видимо нужно 8 команд? И ни о какой одновременности речи не может идти?

Насчёт выполнения сопроцессором (не знаю что это такое) - манипуляции с пинами на XMC4xxx можно выполнить вообще без процессора. Поручив DMA и таймеру пересылку потока инвертирующих констант в регистр правления GPIO. И не отвлекая основной поток программы от более важных дел. Возможно ли такое на Pico с его сопроцессором?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Сб апр 19, 2025 22:45:50 
Друг Кота

Карма: 20
Рейтинг сообщений: 230
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6452
Рейтинг сообщения: 0
VladislavS писал(а):
Посмотрите скриншот в моём сообщении, там видно адрес порта. Не может он там работать. Собственно, и не работает.

беру свои слова назад. по неведомой мне причине заголовочник stm32f303xc.h утверждает, что битбендинг есть, а на самом деле его нет.
СпойлерИзображение

из списка устройств поддерживающих бетбендинг семейство f3 должно вычеркнуть.


Вложения:
f303_bb.jpg [48.06 KiB]
Скачиваний: 333
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс апр 20, 2025 00:17:16 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 476
Рейтинг сообщения: 0
А на Pico для этого видимо нужно 8 команд? И ни о какой одновременности речи не может идти?

Нет, для отдельных пинов одни команды, для портов целиком - другие. У Pico2 максимум 48 GPIO, сопроцессору можно передать в качестве аргументов команды две 32-х битных маски и затоглить любые из этих пинов одновременно, т.к. интерфейс сопроцессора 64-х битный. И сопроцессор - это дополнительная фича, у первого Pico его не было, у второго он работает только с M33, а там еще RISC-V есть, потому обычные регистры GPIO позволяющие выполнять атомарные операции тоже есть.

jcxz писал(а):
Насчёт выполнения сопроцессором (не знаю что это такое) - манипуляции с пинами на XMC4xxx можно выполнить вообще без процессора. Поручив DMA и таймеру пересылку потока инвертирующих констант в регистр правления GPIO. И не отвлекая основной поток программы от более важных дел. Возможно ли такое на Pico с его сопроцессором?

Когда в стартапе пишут что-то типа:
Код:
SCB->CPACR |= (3 << 20) | (3 << 22);  // set CP10 and CP11 Full Access

то включают сопроцессор для FPU, а у M33+(начиная с какой-то ревизии) появились вендор специфик кастомные инструкции, т.е. возможность добавлять свои сопроцессоры.
У Pico часть периферии висит на Single-cycle IO, в том числе порты, потому тут как с M0+/M23, где DMA не работает с портами. С сопроцессором DMA тоже не работает, но зато есть 12 PIO( programmable input/output block) которые специализированны для работы с портами, т.е. DMA гонит данные в PIO, 32 бита за такт!, и там можно одной командой за 1 такт вывести до 32-х бит в порт начиная с указанного пина, параллельно дергая еще до 5-ти других пинов. И у самомого PIO есть 16.8 делитель частоты, так что даже без дополнительного таймера можно скорость вывода настроить и в отличие от DMA c таймером не будет никакого джиттера.

Добавлено after 19 minutes 41 second:
по неведомой мне причине заголовочник stm32f303xc.h утверждает, что битбендинг есть, а на самом деле его нет.

Да есть он там, но по описанной ранее причине не работает с портами и ADC, c остальной периферией должно работать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс апр 20, 2025 11:15:00 
Друг Кота

Карма: 20
Рейтинг сообщений: 230
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6452
Рейтинг сообщения: 0
Adrift писал(а):
Да есть он там, но по описанной ранее причине не работает с портами и ADC, c остальной периферией должно работать.
занятный прикол: если даташит не содержит упоминания некой фичи, а референс не описывает ее, то это не значит, что в железе ее нет. bit-banding у stm32f3 и stm32l4 описывается в документе под названием:
"AN4832 Application note Migrating from STM32F303 line to STM32L4 Series and STM32L4+ Series microcontrollers" и написано там следующее:

Цитата:
Bit-banding on Cortex-M4

STM32F303 line and STM32L4 Series / STM32L4+ Series support bit-banding on the
lowest 1 Mbyte of SRAM and on the peripheral memory region.

However the peripherals mapped in this bit-banding region are not the same on each series
of products.

The peripherals accessible with bit-banding are:
• For STM32F303 line: all the peripherals except FMC, ADC, GPIOx registers.
• For STM32L4 Series and STM32L4+ Series: all the peripherals except FSMC, RNG,
AES, USB OTG FS, GPIOx, ADC registers.

таким образом, исключенный ранее f3 возвращается в список, плюс еще два семейства: l4 и l4+. похоронщики bit-banding'а посрамлены. :-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс апр 20, 2025 11:35:28 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 476
Рейтинг сообщения: 0
занятный прикол: если даташит не содержит упоминания некой фичи, а референс не описывает ее, то это не значит, что в железе ее нет. bit-banding у stm32f3 и stm32l4 описывается в документе под названием:
"AN4832 Application note Migrating from STM32F303 line to STM32L4 Series and STM32L4+ Series microcontrollers"...

BB - это опциональная фича ядра, она и не обязана описываться в DS или RM, для этого есть "Cortex-M4 Generic User Guide" или его ST аналог: "STM32 Cortex-M4 programming manual". Так что сам BB много где есть, даже у некоторых H7, где есть второе ядро M4, но с портами BB работает далеко не везде.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс апр 20, 2025 12:27:32 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18447
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
В теме для начинающих лучше бы объяснили, что именно в этом способе доступа к битам вас так возбуждает? Атомарность? Ну, ок, а разве нельзя без этой атомарности решить задачу, где, якобы, атомарность необходима? Можно наверняка! Миллионы устройств на МК без этого битбанга по всему миру изготовлено, и?!

Начинающим важнее понять, в чем фишка, чем просто про эту фишку прочесть

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс апр 20, 2025 13:19:07 
Друг Кота

Карма: 20
Рейтинг сообщений: 230
Зарегистрирован: Пт сен 13, 2013 13:11:31
Сообщений: 6452
Рейтинг сообщения: 0
BB - это опциональная фича ядра, она и не обязана описываться в DS или RM

она вполне себе описывалась в референсах у всех, где присутствовала, но начиная с f3 перестала. такая непреемственность немного сбивает с толку.

Цитата:
для этого есть "Cortex-M4 Generic User Guide" или его ST аналог: "STM32 Cortex-M4 programming manual"

вчитываясь в которые нифига не понять, почему у g4 битбендинг отстуствует.

Добавлено after 6 minutes 19 seconds:
а разве нельзя без этой атомарности решить задачу

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 новичку в ARM что к чему
СообщениеДобавлено: Вс апр 20, 2025 13:19:52 
Мучитель микросхем

Карма: 1
Рейтинг сообщений: 48
Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 476
Рейтинг сообщения: 0
вчитываясь в которые нифига не понять, почему у g4 битбендинг отстуствует.

Я еще в первом своем посте про BB написал, что исключая старье он есть у G4 и F3, но с портами не работает.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8919 ]     ... , , , 435, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y