Приклад настройки і роботи з зовнішніми переривання в avr atmega, mainloop

Для чого потрібні зовнішні переривання

Переривання - це подія за яким переривається виконання основного коду програми (наприклад функції main) і управління передається функції обробника переривання. Відповідно зовнішні переривання - це якісь зовнішні події переривають виконання основного коду програми.

Зовнішні переривання дозволяють отримати швидку, гарантовану реакцію на зовнішні події. З цього найбільш часте застосування зовнішніх переривань це реалізація лічильників імпульсів, вимірювання частоти або тривалості імпульсів, програмна реалізація uart, one-wire, I2С, spi, а так-же обробка сигналів від зовнішніх периферійних пристроїв.

Принцип роботи зовнішніх переривань в AVR

Для того що б мікроконтролер дізнався про зовнішні події використовуються дискретні входи INT0 INT1 і т.д. Дискретні означає що вони працюють з логічними рівнями: 0 і 1.
0 - це відсутність напруги на вході
1 - наявність на вході напруги, яке дорівнює напрузі живлення мікроконтролера.

Зовнішні переривання можна розділити на два типи:

  • зовнішні переривання по рівню
  • зовнішні переривання по фронту

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

Спрацьовування зовнішнього переривання може бути налаштоване на низький або високий логічний рівень. Наприклад, якщо переривання налаштоване на низький логічний рівень, то воно виникає коли на вході INT напруга дорівнює нулю. Якщо ж переривання налаштоване на високий рівень, то воно виникає коли на вході логічна 1.
При роботі з перериваннями за рівнем треба пам'ятати, що поки на вході INT відповідний рівень, переривання буде виникати постійно. Тобто якщо виникло переривання, наприклад за низьким рівнем і програма його опрацювала, але якщо при виході з обробника переривання на вході залишається низький рівень, то переривання спрацює ще раз, і знову буде викликаний оброблювач переривання, і так буде тривати до тих пір поки на вході не з'явиться високий рівень. Що б цього не відбувалося потрібно в обробнику забороняти даний вид переривань, або перенастроювати його на інший рівень.

Зовнішні переривання по фронту

Переривання по передньому фронту або, як іноді кажуть, наростання сигналу, виникає коли відбувається зміна рівня сигналу на вході INT з 0 на 1. Переривання по задньому фронту (спаду сигналу), виникає при зміні рівня сигналу на вході INT з 1 на 0.
Так само можливо налаштувати переривання що б воно реагувало на будь-яка зміна на вході INT тобто воно буде виникати і по передньому і по задньому фронту.

Налаштування зовнішніх переривань в AVR

Зовнішні переривання в avr atmega8 налаштовуються за допомогою біт ISCxx регістра MCUCR.

Залежність умови спрацьовування зовнішнього переривання INT0 від біт ISC0x регістра MCUCR в avr atmega8