Переривання мікроконтролера 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 1 rn | rn rn $ 0002 rn | rn rn INT0 rn | rn rn Зовнішнє переривання 0 rn | rn rn rn rn 2 rn | rn rn $ 0004 rn | rn rn INT1 rn | rn rn Зовнішнє переривання 1 rn | rn rn rn rn 3 rn | rn rn $ 0006 rn | rn rn TIMER2 COMP rn | rn rn Збіг таймера /лічильника Т2 rn | rn rn rn rn 4 rn | rn rn $ 0008 rn | rn rn TIMER2 OVF rn | rn rn Переповнення таймера /лічильника Т2 rn | rn rn rn rn 5 rn | rn rn $ 000A rn | rn rn TIMER1 CAPT rn | rn rn Захоплення таймера /лічильника Т1 rn | rn rn rn rn 6 rn | rn rn $ 000C rn | rn rn TIMER1 COMPA rn | rn rn Збіг «А» таймера /лічильника Т1 rn | rn rn rn rn 7 rn | rn rn $ 000E rn | rn rn TIMER1 COMPB rn | rn rn Збіг «В» таймера /лічильника Т1 rn | rn rn rn rn 8 rn | rn rn $ 0010 rn | rn rn TIMER1OVF rn | rn rn Переповнення таймера /лічильника Т1 rn | rn rn rn rn 9 rn | rn rn $ 0012 rn | rn rn TIMER0OVF rn | rn rn Переповнення таймера /лічильника Т0 rn | rn rn rn rn 10 rn | rn rn $ 0014 rn | rn rn SPI, STC rn | rn rn Передача по SPI завершена rn | rn rn rn rn 11 rn | rn rn $ 0016 rn | rn rn USART, RXC rn | rn rn USART, прийом завершено rn | rn rn rn rn 12 rn | rn rn $ 0018 rn | rn rn USART, UDRE rn | rn rn Регістр даних USART порожній rn | rn rn rn rn 13 rn | rn rn $ 001A rn | rn rn USART, TXC rn | rn rn USART, передача завершена rn | rn rn rn rn 14 rn | rn rn $ 001C rn | rn rn ADC rn | rn rn Перетворення АЦП завершено rn | rn rn rn rn 15 rn | rn rn $ 001E rn | rn rn EE_RDY rn | rn rn EEPROM, готове rn | rn rn rn rn 16 rn | rn rn $ 0020 rn | rn rn ANA_COMP rn | rn rn Аналоговий компаратор rn | rn rn rn rn 17 rn | rn rn $ 0022 rn | rn rn TWI rn | rn rn Переривання від модуля TWI rn | rn rn rn rn 18 rn | rn rn $ 0024 rn | rn rn INT2 rn | rn rn Зовнішнє переривання 2 rn | rn rn rn rn 19 rn | rn rn $ 0026 rn | rn rn TIMER0 COMP rn | rn rn Збіг таймера /лічильника Т0 rn | rn rn rn rn 20 rn | rn rn $ 0028 rn | rn rn SPM_RDY rn | rn rn Готовність SPM rn | rn rn rn rn Якщо переривання в роботі мікроконтролера не передбачається, то на місці таблиці векторів переривань може бути розміщена частина основної програми. rn Для глобального дозволу /заборони переривань призначений прапор I регістру SREG. Для дозволу переривань він повинен бути встановлений в «1», а для заборони скинутий в «0». Індивідуальне маскування переривань виробляється установкою /скиданням відповідних розрядів регістрів масок переривань. rn При виникненні переривання прапор I регістру SREG апаратно скидається, забороняючи тим самим обробку наступних переривань. Однак у підпрограм обробки переривання цей прапор можна знову встановити в «1» для вирішення вкладених переривань. При поверненні з підпрограми обробки переривань (команда RETI) прапор I встановлюється апаратно. rn Усі наявні переривання можна розділити на два типи. Переривання першого типу генеруються при настанні деякого події, в результаті якого встановлюється прапор переривання. Потім, якщо переривання дозволено, в лічильник команд завантажується адреса вектора відповідного переривання. При цьому прапор переривання апаратно (або програмно) скидається. rn переривання другого типу не мають прапорів переривань і генеруються протягом усього часу, поки присутні умови, необхідні для цього. Відповідно, якщо умови, що викликають переривання, зникнуть до дозволу переривання, генерації переривання не відбудеться. rn Мікроконтролери сімейства Mega підтримують чергу переривань, яка працює в такий спосіб: якщо умови створення одного або більше переривань виникають в той час, коли прапор загального дозволу переривань скинутий, відповідні прапори встановлюються в «1» і залишаються в цьому стані до встановлення прапора загального дозволу переривань. Після дозволу переривань, виконується їх обробка в порядку пріоритету. rn Найменшу час відгуку для будь-якого переривання складає 4 машинних циклу, протягом яких відбувається збереження лічильника команд в стек. Протягом наступних двох або трьох циклів виконується команда переходу до підпрограм обробки переривання. Якщо переривання відбудеться під час виконання команди, що триває кілька циклів, то генерація переривання відбудеться тільки після виконання цієї команди. Якщо ж переривання відбудеться під час знаходження мікроконтролера в «сплячому» режимі, час відгуку збільшується ще на 4 машинних циклу. rn Повернення в основну підпрограм займає 4 машинних циклу, протягом яких відбувається відновлення лічильника команд з стека. Після виходу з переривання процесор завжди виконує одну команду основної програми, перш ніж обслужити будь-який відкладене переривання.
|