Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Макрос для настройки EXTI


Автор: supercelt 20.8.2017, 21:18
Здравствуйте. Помогите пожалуйста.
Имелся у меня как-то stm32f100
и для него надо было автоматизировать настройку портов и прерываний, например я нашёл вот такое решение
Код

#define EXTI_INI_PIN(PORT, PIN) AFIO->EXTICR[PIN/4] |= ((((uint32_t)(&(PORT->CRL)) - GPIOA_BASE) >> 10) << ((PIN % 4) << 2))

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

И тут я перешёл на stm32f405

макрос будет уже другой. Я просто не понимаю, логику. Как автор выяснил что нужно именно так писать? что тут сдвинуть на 10 вправо, потом налево, деление с остатком. Мне надо написать для 405. Но я не понимаю алгоритм как это вычислить.

Автор: Romikgy 21.8.2017, 09:14
а заглянуть в datasheet религия не позволяет?

Автор: supercelt 21.8.2017, 11:21
Позволяет. Но например я так и не понял как например вычисляется адрес PORT->CRL. В даташите адреса такого нет. Есть базовый адрес шины. И дано смещение на регистры. Получается адрес crl и будет адрес шины, если смещение 0? Но я немного о другом. Даже допустим зная все адреса, как понять что надо именно вычесть что-то от чего-то, потом сместить именно в такой последовательности, а не в другой? Я поэтому и обратился к вам за помощью, потому что не понимаю(((

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)