Внешние прерывания - прерывания от внешних устройств, подключенных к микроконтроллеру, а также событий, происходящих на входах микроконтроллера. Для управления внешними прерываниями предназначен регистр EICRA:
Биты ISC11 (3) и ISC10 (2) управляют событиями, в результате которых будет сгенерировано прерывание INT1:
Бит INT1 (1) разрешает внешние прерывания INT1 при записи в него 1.
Бит INTF1 (1) устанавливается в 1, если прерывание поступило от INT1.
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
-
|
-
|
ISC11
|
ISC10
|
ISC01
|
ISC00
|
Биты ISC11 (3) и ISC10 (2) управляют событиями, в результате которых будет сгенерировано прерывание INT1:
- 00 - низкий уровень на входе INT1
- 01 - любое изменение уровня на входе INT1
- 10 - по спадающему сигналу на входе INT1
- 11 - по возрастающему сигналу на входе INT1
Биты ISC01 (1) и ISC00 (0) управляют событиями, в результате которых будет сгенерировано прерывание INT0:
- 00 - низкий уровень на входе INT0
- 01 - любое изменение уровня на входе INT0
- 10 - по спадающему сигналу на входе INT0
- 11 - по возрастающему сигналу на входе INT0
Разрешением внешних прерываний управляет регистр EIMSK:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
-
|
-
|
-
|
-
|
INT1
|
INT0
|
Бит INT1 (1) разрешает внешние прерывания INT1 при записи в него 1.
Бит INT0 (0) разрешает внешние прерывания INT0 при записи в него 1.
Чтобы определить откуда поступило внешнее прерывание, существует регистр флагов прерываний EIFR:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
-
|
-
|
-
|
-
|
INTF1
|
INTF0
|
Бит INTF1 (1) устанавливается в 1, если прерывание поступило от INT1.
Бит INTF0 (0) устанавливается в 1, если прерывание поступило от INT0.
Помимо внешних прерываний на выводах INT1 (5 ножка) и INT0 (4 ножка) можно использовать различные группы выводов микроконтроллера. В микроконтроллере ATmega328 существует три группы выводов, управление которыми осуществляется регистром PCICP:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
-
|
-
|
-
|
PCIE2
|
PCIE1
|
PCIE0
|
Бит PCIE2 (2) разрешает прерывания по изменению состояния второй группы выводов при установке в него 1.
Бит PCIE1 (1) разрешает прерывания по изменению состояния первой группы выводов при установке в него 1.
Бит PCIE0 (0) разрешает прерывания по изменению состояния нулевой группы выводов при установке в него 1.
Контроль за тем, от какой группы выводов поступило прерывание осуществляется регистром PCIFR:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
-
|
-
|
-
|
PCIF2
|
PCIF1
|
PCIF0
|
Бит PCIF2 (2) устанавливается в 1, если прерывание поступило от второй группы выводов.
Бит PCIF1 (1) устанавливается в 1, если прерывание поступило от первой группы выводов.
Бит PCIF0 (0) устанавливается в 1, если прерывание поступило от нулевой группы выводов.
Влиять на генерацию прерывания может любое изменение на любом выводе группы. Для того, чтобы включить необходимые выводы групп существуют регистры-маски PCMSK2, PCMSK1, PCMSK0.
Регистр PCMSK2:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
PCINT23
|
PCINT22
|
PCINT21
|
PCINT20
|
PCINT19
|
PCINT18
|
PCINT17
|
PCINT16
|
Регистр PCMSK1:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
PCINT14
|
PCINT13
|
PCINT12
|
PCINT11
|
PCINT10
|
PCINT9
|
PCINT8
|
Регистр PCMSK2:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
PCINT7
|
PCINT6
|
PCINT5
|
PCINT4
|
PCINT3
|
PCINT2
|
PCINT1
|
PCINT0
|
Для включения необходимого входа, соответствующий бит в регистре-маске должен быть установлен в 1.
Комментариев нет:
Отправить комментарий