Обмін даними за перериванням

 

Блок переривань приймає запити переривання й організує перехід до виконання визначеної  програми, що перериває. Запити переривання надходять із зовнішніх джерел і з джерел, розташованих у різних пристроях мікроконтролера.

Запит переривання з зовнішнього джерела може бути представлений низьким рівнем сигналу (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»

Біти

7

6

5

4

3

2

1

0

 

 

PCINT7

PCINT6

PCINT5

PCINT4

PCINT3

PCINT2

PCINT1

PCINT0

PCMSK

Читання/Запис

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

 

Початковий стан

0

0

0

0

0

0

0

0

 

 

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.