5.1.2. Внешние прерывания
Блок внешних прерываний имеет 19 линий прерываний, которые связываются с векторами прерываний посредством КВВП. Из них 16 линий связаны с линиями ПВВ и могут генерировать прерывание по нарастающему или подающему фронту, или же по обоим фронтам. Оставшиеся три линии связаны с линией прерывания ЧРВ, линией возобновления работы порта USB и выходом сигнализации блока контроля напряжения питания. КВВП предоставляет отдельные векторы прерываний для линий внешних прерываний (EXTI) 0-4, ЧРВ, блока контроля напряжения питания и блока USB. Остальные линии EXTI разделены на две группы, линии 5-9 и линии 10-15, которые связаны с двумя дополнительными векторами прерываний. Блок внешних прерываний играет важную роль для управления энергопотреблением МК STM32. Данный блок является асинхронным и, поэтому, может использоваться для возобновления работы микроконтроллера, находящегося в режиме STOP, когда оба основных генератора отключены. EXTI может генерировать прерывание, как для выхода из состояния Wait в режиме прерываний, так и для выхода из состояния Wait в режиме событий.
МК STM32 имеют 16 линий внешних прерываний, которые можно подключить к любой из линий ввода-вывода
Каждую из 16 линий EXTI можно связать с соответствующей линией ввода-вывода любого из портов. Для этого предусмотрены четыре конфигурационных регистра. Данные регистры разделены на четырехбитные поля, связанные с каждой линией EXTI. С помощью данного поля каждую линию EXTI можно связать с любым из пяти ПВВ, например, линию EXTI0 можно связать с линией 0 порта A, B, C, D или E. Такой подход позволяет использовать любой из выводов МК в качестве линии прерывания. Функцию EXTI можно также использовать в связке с альтернативной функцией, активизированной на внешнем выводе.
//Назначение функций внешних прерываний линиям ПВВ
AFIO->EXTICR[0] = 0x00000000;
//Разрешение источников внешних прерываний
EXTI->IMR = 0x00000001;
//Разрешение возобновления при внешних событиях
EXTI->EMR = 0x00000000;
//Выбор падающего фронта в качестве источника запуска
EXTI->FTSR = 0x00000001;
//Выбор нарастающего фронта в качестве источника запуска
EXTI->RTSR = 0x00000000;
//Разрешение источников прерываний в КВВП
NVIC->Enable[0] = 0x00000040;
NVIC->Enable[1] = 0x00000000;
|
У МК STM32 имеется 16 линий прерывания, которые можно подключить к любой линии ввода-вывода. После подключения, выводы внешних прерываний могут генерировать прерывание по падающему и/или нарастающему фронту
После установки регистров конфигурации EXTI, каждое внешнее прерывание можно настроить на генерацию прерывания по нарастающему или падающему фронтам. Также предусмотрена возможность принудительной генерации прерывания EXTI путем записи в соответствующие биты регистра программного прерывания.
|