Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное_пособие.doc
Скачиваний:
70
Добавлен:
10.11.2019
Размер:
8.13 Mб
Скачать
    1. Подсистема прерываний микроконтроллера

Подсистема прерываний является одним из механизмов взаимодействия процессора микроконтроллера с внешними и встроенными устройствами. Суть этого механизма заключается в следующем. Процессором микроконтроллера непрерывно производится обработка данных (выполняется текущая или фоновая программа). При поступлении сигнала запроса на прерывание (ЗПР) от внешнего устройства процессор заканчивает выполнение текущей команды, сохраняет в стеке содержимое счетчика команд РС (адрес возврата в текущую программу после выполнения подпрограммы обработки прерывания) и загружает в счетчик команд адрес вектора. Вектор представляет собой команду перехода JMP к подпрограмме обработки прерываний. Векторы прерываний размещаются в начале программной памяти микроконтроллера, и эта область называется таблицей векторов прерываний (таблица 13).

Таблица 12

Адрес ячейки прогр.памяти

Команда

Описание

0000

JMP $3A

$3A – адрес начала текущей программы

0002

JMP 120

Вектор прерывания по сигналу со входа INT0 (120-адрес подпрограммы прерываний.)

0004

JMP 278

Вектор прерываний по сигналу со входа INT1 (278-адрес подпрограммы прерываний)

0006

JMP 309

Вектор прерываний. по совпадению в таймере Т2 (309-адрес подпрограммы прерываний)

0008

JMP 590

Вектор прерываний по переполнению Т2 (590-адрес подпрограммы прерываний)

000А

JMP 1093

Вектор прерываний по сигналу захвата Т1 (1093-адрес подпрограммы прерываний)

Следовательно, из ячейки программной памяти будет считана и выполнена команда перехода JMP (вектор) к началу подпрограммы обработки прерывания.

Последней командой обработчика прерывания должна быть команда RETI – возврата из подпрограммы обработки прерывания, по которой сохраненное в стеке содержимое счетчика команд восстанавливается из стека, и происходит возврат в прерванную текущую программу.

Различные типы микроконтроллеров семейства ATmega имеют разное число источников прерываний и, следовательно, различный размер таблицы векторов.

Перечень векторов прерываний для микроконтроллера ATmega16 приведен в таблице 13.

Таблица 13 Таблица векторов прерываний: имена и описание

Адрес

вектора

Источник

Условия возникновения прерывания

$0000

RESET

Сброс по сигналу Reset, включению питания и сторожевому таймеру

$0002

INT0

Запрос внешнего прерывания 0

$0004

INT1

Запрос внешнего прерывания 1

$0006

TIMER2 СOMP

Совпадение таймера/ счетчика 2

$0008

TIMER2 OVF

Переполнение таймера/счетчика 2

$000A

TIMER1 CAPT

Захват таймера/счетчика Т1

$000C

TIMER1 СОМРA

Совпадение A таймера/ счетчика 1

$000E

TIMER1 СОМРB

Совпадение B таймера/ счетчика 1

$0010

TIMER1 OVF

Переполнение таймера/счетчика 1

$0012

TIMER0 OVF0

Переполнение таймера/счетчика 0

$0014

SPI,STC

Передача по SPI завершена

$0016

USART, RXC

Завершение приема байта в последовательном канале USART

$0018

USART, UDRE

Регистр данных USART пуст

$001A

USART, TXC

Завершение передачи байта в последовательном канале USART

$001C

ADC

Преобразование АЦП завершено

$001E

EE_RDY

EEPROM готово

$0020

ANA_COMP

Аналоговый компаратор

$0022

TWI

Прерывание от модуля TWI

$0024

INT2

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

$0026

TIMER0 COMP

Совпадение таймера/счетчика Т0

$0028

SPM_RDY

Готовность SPM

Вектор прерывания занимает две ячейки памяти программ, в соответствии с длиной команды JMP. В качестве вектора можно использовать и команду короткого перехода RJMP, которая занимает одну ячейку программной памяти.

Для исключения конфликтов в системе прерываний для каждого источника прерывания су­ществует свой бит индивидуального разрешения/запрета прерываний и, кроме того, имеется бит общего разрешения прерываний I, размещенный в регистре SREG. Чтобы прерывание могло быть обслужено, необходимо: установить бит разрешения всех прерываний и бит индивидуального разрешения. Понятие разрешения прерывания и понятие маска являются антонимами.

Перечень векторов в таблице 13 отражает также уровень приоритета каждого прерывания. Прерывания с младшими адресами векторов имеют больший уровень приоритета: запрос прерывания INT0 имеет наивысший уровень приоритета, следующим является запрос внешнего прерывания INT1 и т.д. Сигнал от разрешенного источника прерывания с большим приоритетом прерывает обработчик прерывания с меньшим приоритетом. Запрос разрешенного прерывания с меньшим приоритетом во время обработки прерывания с большим приоритетом будет обработан после окончания обслуживания запроса с большим приоритетом.

Каждому источнику прерываний соответствует флаг (триггер) прерывания, предназначенный для хранения сигнала запроса на прерывание. При поступлении сигнала запроса на прерывание устанавливается соответствующий флаг прерывания и, если прерывания от этого источника разрешены, производится вход в подпрограмму обработки прерывания (сохранение в стеке содержимого счетчика команд и загрузка в счетчик адреса вектора).

Когда в счетчик команд загружается вектор прерывания, соответствующий флаг прерывания аппаратно очищается. Некоторые флаги прерываний можно очистить программно записью логической единицы по адресу бита флага.

При сбросе флага прерывания сбрасывается также бит I (разрешения всех прерываний) в регистре SREG, запрещая прерывания от других источников. Команда RETI в конце процедуры обслуживания прерывания ус­танавливает бит I, разрешая возможные отложенные прерывания. Процедура прерывания может установить бит I, чтобы разрешить вложенные прерывания.

Если запрос прерывания возник, когда соответствующий бит разрешения прерывания сброшен, флаг прерывания будет сохранен в установленном со­стоянии, пока прерывание не будет разрешено или флаг не будет очищен программно.

Если запросы прерываний возникают при сброшенном бите разрешения всех прерываний, флаги прерываний будут сохранены в установлен­ном состоянии, пока все прерывания не будут разрешены и обработаны в порядке приоритетов.

Сигналы запросов внешних прерываний поступают на входы INT1,INT0 и INT2. Сигналы запросов прерывания принимаются даже, когда выводы сконфигурированы на выход. Флаги внешних прерываний INTF1,INTF0,INTF2 могут устанавливаться либо по фронту, либо по срезу сигнала запроса на прерывание на соответствующем входе микроконтроллера, т.е. входы внешних прерываний INT0,INT1,INT2 могут быть программно настроены на фиксацию сигнала прерывания фронтом или срезом (спадающим фронтом) импульса. Кроме того, входы INT0 и INT1 могут быть настроены на низкий уровень сигнала запроса прерывания. В этом случае сигнал запроса на прерывание поступает в систему прерываний минуя флаг прерывания, т.е. не запоминается. На рисунке 16 верхнее положение переключателя соответствует типу входа внешнего прерывания INT1 на сигнал прерывания по низкому уровню.

Рисунок 16

Система прерываний управляется регистрами:

  • регистр масок внешних прерываний GICR (Global Interrupt Control Register);

  • регистр масок прерываний таймеров/счетчиков TIMSK (Timer/Counter Interrupt Mask;

  • регистр флагов внешних прерываний GIFR;

  • регистр флагов прерываний таймеров/счетчиков TIFR;

  • регистр управления процессора MCUCR.

Биты разрешения прерываний со входов внешних прерываний INT1,INT0 и INT2 размещены в регистре GICR.

Регистр разрешения внешних прерываний – GICR

7 6 5 4 3 2 1 0

INT1

INT0

INT2

-

-

-

-

-

Рисунок 17

GICR.7-5 - Разрешение внешних прерываний INT1,INT0,INT2. При установленных битах INT1,INT0,INT2 и установленном бите I регистра SREG разрешаются прерывания по соответствующим входам внешних прерыва­ний. Активность сиг­нала по любому из этих выводов (фронт,срез или уровень 0) вызовет запрос прерывания, даже если вывод определен как выход. Запрос прерывания по логическому уровню, если он разрешен, будет существовать до тех пор, пока на входе будет низкий уровень сигнала.

Флаги внешних прерываний со входов INT1,INT0,INT2 размещены в регистре GIFR.

Регистр флагов внешних прерываний - GIFR

7

6

5

4

3

2

1

0

INTF1

INTF0

INTF2

-

Рисунок 18

GIFR.7-5 - Флаги внешних прерываний INTF1,INTF0,INTF2. При идентификации активного сигнала на входах INT1,INT0,INT2 соответствующий флаг прерывания INTF1, INTF0, INTF2 устанавливается (=1). Если бит I реги­стра SREG и соответствующий индивидуальный бит разрешения установлены, то вызывается подпрограмма, адрес которой соответствует адресу в соответствующем векторе.

Установки типа входов внешних прерываний производятся разрядами ISC01- ISC00 регистра управления MCUCR.

Регистр управления процессора – MCUCR

7

6

5

4

3

2

1

0

-

ISC2

SE

SM

ISC11

ISC10

ISC01

ISC00

Рисунок 19

MCUCR.3 – MCUCR.0 : Биты управления типом сигналов на входах прерываний INT1 и INT0. Запросы внешних прерываний на выводах INT1 – INT0 идентифицируются по значениям пар разрядов в соответствии с таблицей 14. Биты ISC11,ISC10 - для входа INT1, а биты ISC01,ISC00 - для входа INT0 .

При изменении значений битов ISC прерывание должно быть запрещено очисткой бита разрешения в регистре GICR. Иначе может произойти прерывание в момент изменения значения битов.

Таблица 14 Управление типом сигналов внешних прерываний INT0 и INT1

ISC11

(ISC01)

ISC10

(ISC00)

Описание

0

0

Запрос прерывания идентифицируется по низкому уровню на INT1(INT0)

0

1

Зарезервирован

1

0

Запрос прерывания идентифицируется по спадающему фронту на INT1(INT0)

1

1

Запрос прерывания идентифицируется по нарастающему фронту на INT1(INT0)

Прерывание по входу INT2 может быть сгенерировано только по фронту или по срезу сигнала. Если разряд ISC2 равен 0, то прерывание будет по срезу, а если ISC2=1, то прерывание по фронту.

Индивидуальные биты разрешения прерываний от внешних входов и от таймеров Т0,Т1 и Т2 размещены в регистре TIMSK микроконтроллера.

Регистр разрешения прерываний таймеров/счетчиков – TIMSK

7

6

5

4

3

2

1

0

OCIE2

TOIE2

TICIE1

OCIE1A

OCIE1B

TOIE1

OCIE0

TOIE0

Рисунок 20

TIMSК. 7 – ОСIE2: Разрешение прерывания по совпадению счетчика/таймера Т2.

TIMSК.6 – TOIE2: Разрешение прерывания по переполнению счетчика/тай­мера 2. При установленном бите TOIE2 и установленном бите I регистра SREG разрешается прерывание при переполнении таймера 2.

TIMSK.5 – TICIE1: Разрешение прерывания по захвату счетчика/таймера Т1. При TICIE1=1 и установленном бите I в регистре SREG разрешается прерывание от сигнала на входе захвата ICP.

TIMSK.4-3 - OCIE1A-OCIE1B: Разрешение прерывания по совпадению реги­стров OCR1А и OCR1B с таймером 1. При установленном бите OCIE1A или OCIE1B и установ­ленном бите I регистра SREG разрешается прерывание при совпадении значения в регистре OCR1A или OCR1B со значением в рабочем регистре таймера 1.

TIMSK.2 - TOIE1: Разрешение прерывания по переполнению Тай­мера 1. При установленном бите TOIE1 и установленном бите I регистра SREG разрешается прерывание при переполнении таймера 1.

TIMSК. 1 – ОСIE0: Разрешение прерывания по совпадению счетчика/таймера Т0.

TIMSК. 0 – TOIE0: Разрешение прерывания по переполнению счетчика/тай­мера 0. При установленном бите TOIEO и установленном бите I регистра SREG разрешается прерывание при переполнении таймера 0.

Флаги прерываний от таймеров Т0,Т1 и Т2 размещены в регистре TIFR микроконтроллера.