Обмін даними за перериванням
Блок переривань приймає запити переривання й організує
перехід до виконання визначеної
програми, що перериває. Запити переривання надходять із зовнішніх джерел
і з джерел, розташованих у різних пристроях мікроконтролера.
Запит переривання з зовнішнього джерела може бути
представлений низьким рівнем сигналу (L), переходом від високого рівня до
низького (HL), переходом від низького рівня до високого (LH) або переходом
будь-якого напрямку (LH/HL). Вибір способу представлення визначається
комбінацією станів розрядів ІSCx0 і ІSCxl у регістрі MCUCR
($D5) (таблиця 1).
Кожний запит переривання надходить у блок переривань,
якщо переривання в мікроконтролері дозволені (І =
SREG.7 = 1) і дозволене переривання по даному запиту. Переривання по окремому запиту дозволено,
якщо в одиничному стані знаходиться
розряд, що маскує, (MASK) для даного запиту переривання, розташований в
одному з регістрів I/O.
З появою запиту переривання встановлюється в одиничний
стан прапорець (FLAG) для
даного запиту переривання, розташований в одному з регістрів
введення/виведення. Стан прапорця розряду запитується апаратно і, крім того,
може бути перевірений програмними засобами.
При надходженні запиту блок переривань організує
апаратний безумовний перехід до виконання команди, адреса якої (вектор
переривання) зв'язана з ім'ям запиту переривання. За цією адресою в мікроконтролері записується команда безумовного переходу з мнемокодом RJMP. За цією командою виконується програмний
безумовний перехід до першої команди відповідної програми, що перериває, що може бути
розташована в будь-якому місці FlashROM.
При одночасному надходженні в блок переривань
декількох запитів у блоці виділяється запит з найбільш високим пріоритетом
серед усіх, що надійшли і виконується перехід за адресою, який відповідає цьому
запиту.
При переході до виконання програми, що перериває, розряд І в регістрі
SREG апаратно скидається в нульовий стан і переривання по всіх запитах
виявляються забороненими. Розряд І встановлюється в одиничний стан при
виконанні команди повернення з програми,
що перериває, із мнемокодом RETІ. Розряд І може бути
встановлений в одиничний стан програмно або командою SEІ в
програмі, що перериває. Програма, що виконується при запуску мікроконтролера і за запитом RESET, не містить команди
RETІ, для виконання переривань повинна містити команду SEІ.
Мікроконтролер Attiny2313
використовує 19 джерел переривання (10 переривань AT90S2313). Ці переривання і вектор скидання розташовують
окремими програмними векторами в просторі пам'яті програм. Кожному перериванню
привласнений свій біт дозволу який повинний бути встановлений разом з бітом І
регістра статусу.
Молодші адреси
простору пам'яті програм автоматично визначаються як вектор скидання і
переривань.
Переривання з
молодшими адресами мають більший рівень пріоритету.
Програмні установки адрес векторів скидання і
переривань, що найчастіше використовуються
Адреса в пам’яті програм |
Джерело переривання |
Опис |
0х0000 |
rjmp RESET; |
Зовнішнє скидання, скидання при увімкненні живлення, при спрацюванні
сторожового таймеру, при зниженні напруги живлення |
0х0001 |
rjmp INT0; |
Зовнішній запит на переривання по
входу INT0 |
0х0002 |
rjmp INT1; |
Зовнішній запит на переривання по
входу INT1 |
0х0003 |
rjmp T/C1_CAPT; |
Захоплення по таймеру/лічильнику
T/C1 |
0х0004 |
rjmp T/C1_COMPA; |
Співпадання з
регістром порівняння А таймера T/C1 |
0х0005 |
rjmp T/C1_OVF; |
Переповнення таймера/лічильника
T/C1 |
0х0006 |
rjmp T/C0_OVF; |
Переповнення таймера/лічильника
T/C0 |
0х0007 |
rjmp UART_RX; |
Прийом байту UART завершено |
0х0008 |
rjmp UART_UDRE; |
Регістр даних UART порожній |
0х0009 |
rjmp UART_TX; |
Передача даних UART завершена |
0х000А |
rjmp ANA_COMP; |
Переривання від аналогового
компаратора |
0х000В |
rjmp PCINT; |
Зміна стану виводів PCINT0 -
PCINT7 |
0х000С |
rjmp T/C1_COMPB; |
Співпадання з
регістром порівняння B таймера T/C1 |
0х000D |
rjmp T/C0_COMPA; |
Співпадання з
регістром порівняння A таймера T/C0 |
0x000E |
rjmp T/C0_COMPB; |
Співпадання з
регістром порівняння B таймера T/C0 |
0x000F |
rjmp USI_START; |
Переповнення по USI.
Готовність до старту |
0x0010 |
rjmp USI_ OVF; |
Переповнення по USI.
переповнення |
0x0011 |
rjmp EE_READY; |
Готовність EEPROM |
0x0012 |
rjmp WDT_OVF; |
Переривання при переповненні сторожового таймера |
0x0013 |
MAIN: ldi r16, low (RAMEND); |
Початок
основної програми (Main program
start) |
0x0014 |
out SPL, r16 |
|
0x0015 |
<instr> xxx |
|
Зовнішні переривання викликаються виводами INTO і INT1
або будь-яким з виводів PCINT7.0. Якщо
переривання дозволене, то воно буде викликано навіть, якщо відповідний вивід
налагоджений як вихід. Це забезпечує можливість викликати переривання
програмним способом. Регістр управління "PCMSK" визначає, який з
виводів PCINT7–0 може викликати переривання. Виводи PCINT7–0 працюють незалежно
від тактового генератора МК, тобто їх робота з ним не синхронізується, а це означає
переривання на цих виводах може бути використано для пробудження з різних
режимів сну, окрім холостоro -"Idle".
Переривання на виводах INT0 і INT1 можуть бути
викликані спадаючим фронтом сигналу, наростаючим фронтом або зміною рівня
сигналу на ніжці. Ці налаштування задаються в MCUCR бітами ISC11, ICS10 – INT1, ISC01, ICS00 – INT0.
Таблиця 1 –
Режими виклику переривання INT1/ INT0
ISC11(ISC01) |
ISC10(ISC00) |
Опис |
0 |
0 |
Низький
рівень на вході INT1/INT0 генерує запит на переривання |
0 |
1 |
Будь-яка
зміна логічного рівня на вході INT1/INT0 генерує запит на переривання |
1 |
0 |
Задній
фронт вхідного сигналу INT1/INT0 викликає запит на переривання |
1 |
1 |
Передній
фронт вхідного сигналу INT1/INT0 викликає запит на переривання |
Таблиця 2 – Регістр масок зовнішніх переривань – GIMSK
Біти |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
$3B ($5B) |
INT1 |
INT0 |
PCIE |
|
|
|
|
|
GIMSK |
Читання/Запис |
R/W |
R/W |
R/W |
R |
R |
R |
R |
R |
|
Початковий стан |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Bit 7 – INT1: Дозвіл запиту зовнішніх переривань 1. При
встановленому біту ІNT1 і
встановленому біту І регістра статусу (SREG) дозволяються переривання по відповідним виводам
входів сигналів переривань. Біт керування впізнанням переривання регістра
керування зовнішніми перериваннями EІCR (External Іnterrupt Control Regіster) визначає спрацьовування по наростаючому чи
спадаючому фронту, по логічному рівні.
Активація кожного з цих виводів викликає запит переривання навіть якщо вивід
буде дозволений як вихід. Це забезпечує можливість організації програмного
переривання.
Bit 6 - INT0: Дозвіл запиту зовнішніх переривань
0. При встановленому біту ІNT0 і
встановленому біту І регістра статусу (SREG) дозволяються переривання по
відповідним входах переривань. Зовнішні переривання завжди викликають
переривання низьким рівнем. Активація кожного з цих виводів викликає запит
переривання навіть якщо вивід буде дозволений як вихід. Це забезпечує
можливість організації програмного переривання. Запит переривання по логічному
рівні, якщо він дозволений, буде генерувати запит переривання доти, поки на
вході буде знаходитися низький рівень.
Bit 5 – PCIE: Дозвіл запиту зовнішніх переривань за зміною стану
виводів. Якщо біт PCIE
встановлений в 1, й при цьому
встановлений біт I регістра SREG, переривання за зміною будь-якого контакту
дозволено. Які контакти будуть викликати переривання, визначається
індивідуально, установкою одного з біт PCINT7–0 регістра PCMSK.
Таблиця 3 – Регістр маски переривання
виводів PCINT7…0 «PCMSK»
Біти |
|
|
||||||||
|
|
PCMSK |
||||||||
Читання/Запис |
|
|
||||||||
Початковий стан |
|
|
Bits 7…0 – PCINT7…0: Маскувальні біти виводів PCINT7...0. Кожен біт з
PCINT7…0 відповідає за свій вивід. Установка якого-небудь біта з PCINT7...0
дозволяє відповідному I/O виводу працювати джерелом переривання, за умови, що
встановлений біт PCIE в GIMSK. Якщо будь-який біт з PCINT7…0 очищений (нуль),
то відповідний I/O - вивід не працюватиме джерелом переривання.
ATtiny2313 містить три регістри введення/виведення
загального призначення. Ці регістри можуть бути використані для
запам'ятовування будь-якої інформації і особливо вони корисні для
запам'ятовування глобальних змінних і прапорів стану. Регістри
введення/виведення загального призначення GPIOR2
– GPIOR0 доступні через інструкції SBI, CBI, SBIS, і SBIC.