пятница, 22 марта 2013 г.

Внешние прерывания

Внешние прерывания - прерывания от внешних устройств, подключенных к микроконтроллеру, а также событий, происходящих на входах микроконтроллера. Для управления внешними прерываниями предназначен регистр EICRA:

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.