В микроконтроллерах AVR за управление прерываниями отвечают, главным образом, четыре регистра:
-GIMSK (General Interrupt Mask Register) – разрешает или запрещает внешние прерывания по входу INT0/INT1;
-GIFR (General Interrupt Flag Register) – регистр флагов внешних прерываний;
-TIMSK (Timer/Counter Interrupt Mask Register) – регистр маскирования прерываний от таймера/счетчика Т/С0 и Т/С1;
-TIFR (Timer/Counter Interrupt Flag Register) – регистр флагов прерываний от таймеров/счетчиков.
О состоянии прерывания сигнализирует соответствующий флаг, который устанавливается или сбрасывается в регистре флагов. Даже если в регистре маски прерываний установлен соответствующий отдельный разряд разрешения прерывания, то прерывания могут активизироваться только тогда, когда в регистре состояния SREG установлен разряд общего разрешения прерываний I (разряд 7). Если это имеет место, и наступает прерывание, то выполнение программы ответвляется по соответствующему адресу (см. табл. 1.4) и разряд общего разрешения прерываний I в регистре SREG сбрасывается в состояние лог. 0, блокируя тем самым последующие прерывания. Если требуется прервать подпрограмму другим прерыванием, то после входа в подпрограмму обработки прерывания программа пользователя должна установить флаг I в лог. 1.
Вместе с входом в подпрограмму обработки прерывания аппаратно сбрасывается также и соответствующий флаг, вызвавший прерывание. Некоторые флаги прерываний могут быть сброшены самим пользователем посредством установки соответствующего флага в лог. 1.
Регистр GIMSK
Регистр GIMSK (рис. 3.1), расположенный в области ввода/вывода по адресу 0x003В (адрес в SRAM – 0x005В), используется для разрешения внешних прерываний.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
INT1 | INT0 | – | – | – | – | – | – |
Рис. 3.1. Структура регистра GIMSK микроконтроллеров AVR
Если разряд INT1/INT0 установлен в лог. 1, то внешнее прерывание по входу INT1/INT0 будет разрешено до тех пор, пока установлен в лог. 1 разряд I в регистре состояния SREG.
Регистр GIFR
Состояние внешнего прерывания определяется по регистру GIFR (рис. 3.2), который расположен в области ввода/вывода по адресу 0х003А (адрес SRAM – 0х005А).+
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
INTF1 | INTF0 | – | – | – | – | – | – |
Рис. 3.2. Структура регистра GIFR микроконтроллеров AVR
Флаг INTF1/INTF0 устанавливается в лог. 1, если возникает внешнее прерывание по сигналу на выводе INT1/INT0. При входе в подпрограмму обработки прерывания этот разряд переводится аппаратно в исходное состояние лог. 0.
Регистры TIMSK и TIFR
Регистр TIMSK (рис. 3.3), расположенный в области ввода/вывода по адресу 0x0039 (адрес в SRAM – 0x0059), используется для разрешения прерываний от таймеров/счетчиков.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TOIE1 | OCIE1A | OCIE1B | – | TICIE1 | – | TOIE0 | – |
Рис. 3.3. Структура регистра TIMSK микроконтроллеров AVR
Состояние прерываний, имеющих отношение к таймерам/счетчикам микроконтроллеров AVR, определяется по регистру TIFR (рис. 3.4), который расположен в области ввода/вывода по адресу 0x0038 (адрес SRAM – 0x0058).
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TOV1 | OCF1A | OCF1B | – | ICF1 | – | TOV0 | – |
Рис. 3.4. Структура регистра TIFR микроконтроллеров AVR
Когда разряд TOIE1 и разряд I в регистре состояния SREG установлены в лог. 1, то разрешено прерывание при переполнении Т/С1. В случае переполнения в регистре TIFR устанавливается флаг TOV1.
Если разряд OCIE1A и разряд I в регистре состояния SREG установлены в лог. 1, то разрешено прерывание при совпадении содержимого регистра сравнения А с текущим состоянием Т/С1. В случае совпадения, в регистре TIFR устанавливается флаг OCF1 А.
Если разряд OCIE1B и разряд I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание при совпадении содержимого регистра сравнения В с текущим состоянием Т/С1. В случае совпадения, в регистре TIFR устанавливается флаг OCF1B.
Если разряд TICIE1 и разряд I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание при выполнении условия захвата. Когда возникает срабатывание по захвату, в регистре TIFR устанавливается флаг ICF1.
Если разряд TOIE0 и разряд I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание при переполнении таймера/счетчика Т/СО. В таком случае, в регистре TIFR устанавливается флаг TOV0.
Установка в лог. 1 одного из флагов в регистре TIFR приводит к переходу по соответствующему вектору прерывания. При входе в подпрограмму обработки прерывания, флаг в регистре TIFR аппаратно сбрасывается в лог. 0.
Дата: 2019-05-28, просмотров: 225.