Управление прерываниями в микроконтроллерах AVR
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

В микроконтроллерах 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.