Контроллер умеет следить за линиями ввода-вывода и генерировать события по фронту сигнала и имеет 7 векторов прерываний (5 индивидуальных и 2 групповых).
читать дальшеЗа тактирование контроллера отвечает бит SYSCFGEN в регистре APB2ENR.
Регистров тут совсем немного и нас интересуют только несколько из них:
EXTI_IMR — маска разрешения прерывания. Бит 0 отвечает за нулевую линию, бит 1 за первую и т.д;
EXTI_RTSR — маска включения детектора нарастающего фронта сигнала;
EXTI_FTSR — маска включения детектора спадающего фронта сигнала;
EXTI_PR — флаги сработавшего детектора. Тут их и надо сбрасывать, Чтоб покинуть прерывание.
Номер линии совпадает с номером пина в порту. Разрешается лишь выбирать, с какого порта эта линия берётся: с порта A или с порта B, или ещё откуда. Это номера от 0 до 15. Остальные линии подключены к разным сигналам:
Линия 16: PVD.
Линия 17: RTC Alarm.
Линия 18: USB OTG FS Wakeup.
Линия 19: Ethernet Wakeup.
Линия 20: USB OTG HS Wakeup.
Линия 21: RTC Tamper и RTC TimeStamp.
Линия 22: RTC Wakeup.
Первые 5 линий имеют индивидуальные вектора EXTI0_IRQHandler, EXTI1_IRQHandler, EXTI2_IRQHandler, EXTI3_IRQHandler, EXTI4_IRQHandler. Потом линии делятся на две группы, 5-9 (EXTI9_5_IRQHandler) и 10-15 (EXTI15_10_IRQHandler). В этих векторах ещё потребуется опросить регистр EXTI_PR, чтоб понять, какая из линий сработала.
Код практически такой же, как и в предыдущем примере за исключением другой периферии.
Примерный код настройки, срабатывание по обоим фронтам по нажатию кнопки User на плате:
Пример обработчика прерывания:
По нажатию на кнопку переменная Counter (и регистр R1 в главном цикле) будут увеличиваться.
Интересные файлы:
main.s
Проект целиком.
Ассемблер пока что на этом заканчивается (за исключением спиноффа про GNU Assembler, но это уже разница в синтаксисе файлов, текст будет таким же), поскольку вся периферия, о которой идёт речь дальше, настраивается всё теми же командами и ничего нового я сказать не могу. Но, конечно, есть ещё ряд интересных моментов, которые я хочу посмотреть. А все примеры, представленные на Си можно будет без особых проблем переписать на ассемблер самостоятельно, если в этом возникнет необходимость.
<< Предыдущее Следующее >>
@темы:
arm,
программизмы,
электроника,
ассемблер,
stm32f4discovery,
stm32