Микропроцессоры и микроконтроллеры

 
 
 
«Измерять продуктивность программирования подсчетом строк кода — это так же, как оценивать постройку самолета по его весу.»
Bill Gates
Русский | Українська


Микропроцессоры и микроконтроллеры :: RISC-мікроконтролери сімейства AVR :: Переривання мікроконтролера ATmega16

Переривання мікроконтролера ATmega16

Переривання припиняє нормальний хід програми для виконання пріоритетних завдань, що визначається внутрішнім або зовнішнім подією мікроконтролера. При виникненні переривання мікроконтроллер зберігає в стек вміст лічильника команд PC і завантажує в нього адресу відповідного вектора переривання. За цією адресою, як правило, знаходиться команда безумовного переходу до підпрограм обробки переривання. Останньою командою підпрограми обробки переривання повинна бути команда RETI, яка забезпечить повернення в основну програму і відновлення попередньо збережену лічильника команд.

rn

Мікроконтролери AVR мають багаторівневу систему пріоритетних переривань. Молодші адреси пам'яті програм відведені під таблицю векторів переривання. Кожному переривання відповідає адреса в цій таблиці. Положення вектора в таблиці також визначає і пріоритет відповідного переривання: чим менше адресу, тим вищий пріоритет переривання.

rn

У мікроконтролерах сімейства Mega положення таблиці векторів переривання може бути змінена. Таблиця може розташовуватися не тільки на початку пам'яті програм, а також на початку області завантажувача.

rn

Розподіл адрес таблиці векторів переривань для мікроконтролера ATmega16 наведено в табл. 28.1.

rn

Таблиця 28.1

rn

Таблиця векторів переривань моделі ATmega16

rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn
rn

rn
rn

Адреса

rn
rn

Джерело

rn
rn

Опис

rn
rn

1

rn
rn

$ 0002

rn
rn

INT0

rn
rn

Зовнішнє переривання 0

rn
rn

2

rn
rn

$ 0004

rn
rn

INT1

rn
rn

Зовнішнє переривання 1

rn
rn

3

rn
rn

$ 0006

rn
rn

TIMER2 COMP

rn
rn

Збіг таймера /лічильника Т2

rn
rn

4

rn
rn

$ 0008

rn
rn

TIMER2 OVF

rn
rn

Переповнення таймера /лічильника Т2

rn
rn

5

rn
rn

$ 000A

rn
rn

TIMER1 CAPT

rn
rn

Захоплення таймера /лічильника Т1

rn
rn

6

rn
rn

$ 000C

rn
rn

TIMER1 COMPA

rn
rn

Збіг «А» таймера /лічильника Т1

rn
rn

7

rn
rn

$ 000E

rn
rn

TIMER1 COMPB

rn
rn

Збіг «В» таймера /лічильника Т1

rn
rn

8

rn
rn

$ 0010

rn
rn

TIMER1OVF

rn
rn

Переповнення таймера /лічильника Т1

rn
rn

9

rn
rn

$ 0012

rn
rn

TIMER0OVF

rn
rn

Переповнення таймера /лічильника Т0

rn
rn

10

rn
rn

$ 0014

rn
rn

SPI, STC

rn
rn

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

rn
rn

11

rn
rn

$ 0016

rn
rn

USART, RXC

rn
rn

USART, прийом завершено

rn
rn

12

rn
rn

$ 0018

rn
rn

USART, UDRE

rn
rn

Регістр даних USART порожній

rn
rn

13

rn
rn

$ 001A

rn
rn

USART, TXC

rn
rn

USART, передача завершена

rn
rn

14

rn
rn

$ 001C

rn
rn

ADC

rn
rn

Перетворення АЦП завершено

rn
rn

15

rn
rn

$ 001E

rn
rn

EE_RDY

rn
rn

EEPROM, готове

rn
rn

16

rn
rn

$ 0020

rn
rn

ANA_COMP

rn
rn

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

rn
rn

17

rn
rn

$ 0022

rn
rn

TWI

rn
rn

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

rn
rn

18

rn
rn

$ 0024

rn
rn

INT2

rn
rn

Зовнішнє переривання 2

rn
rn

19

rn
rn

$ 0026

rn
rn

TIMER0 COMP

rn
rn

Збіг таймера /лічильника Т0

rn
rn

20

rn
rn

$ 0028

rn
rn

SPM_RDY

rn
rn

Готовність SPM

rn
rn

Якщо переривання в роботі мікроконтролера не передбачається, то на місці таблиці векторів переривань може бути розміщена частина основної програми.

rn

Для глобального дозволу /заборони переривань призначений прапор I регістру SREG. Для дозволу переривань він повинен бути встановлений в «1», а для заборони скинутий в «0». Індивідуальне маскування переривань виробляється установкою /скиданням відповідних розрядів регістрів масок переривань.

rn

При виникненні переривання прапор I регістру SREG апаратно скидається, забороняючи тим самим обробку наступних переривань. Однак у підпрограм обробки переривання цей прапор можна знову встановити в «1» для вирішення вкладених переривань. При поверненні з підпрограми обробки переривань (команда RETI) прапор I встановлюється апаратно.

rn

Усі наявні переривання можна розділити на два типи. Переривання першого типу генеруються при настанні деякого події, в результаті якого встановлюється прапор переривання. Потім, якщо переривання дозволено, в лічильник команд завантажується адреса вектора відповідного переривання. При цьому прапор переривання апаратно (або програмно) скидається.

rn

переривання другого типу не мають прапорів переривань і генеруються протягом усього часу, поки присутні умови, необхідні для цього. Відповідно, якщо умови, що викликають переривання, зникнуть до дозволу переривання, генерації переривання не відбудеться.

rn

Мікроконтролери сімейства Mega підтримують чергу переривань, яка працює в такий спосіб: якщо умови створення одного або більше переривань виникають в той час, коли прапор загального дозволу переривань скинутий, відповідні прапори встановлюються в «1» і залишаються в цьому стані до встановлення прапора загального дозволу переривань. Після дозволу переривань, виконується їх обробка в порядку пріоритету.

rn

Найменшу час відгуку для будь-якого переривання складає 4 машинних циклу, протягом яких відбувається збереження лічильника команд в стек. Протягом наступних двох або трьох циклів виконується команда переходу до підпрограм обробки переривання. Якщо переривання відбудеться під час виконання команди, що триває кілька циклів, то генерація переривання відбудеться тільки після виконання цієї команди. Якщо ж переривання відбудеться під час знаходження мікроконтролера в «сплячому» режимі, час відгуку збільшується ще на 4 машинних циклу.

rn

Повернення в основну підпрограм займає 4 машинних циклу, протягом яких відбувається відновлення лічильника команд з стека. Після виходу з переривання процесор завжди виконує одну команду основної програми, перш ніж обслужити будь-який відкладене переривання.